SEC 01 // VISUAL APPROACH SIMULATION
SEC 02 // FLIGHT PLAN
MISSION: Year 2 IT Programming at NSCC — deepen full-stack skills while delivering real client systems (CRM, mortgage, retail).
VISION: Ship production-ready, user-friendly platforms that survive real hosting constraints and compliance needs.
SEC 03 // RATINGS
SEC 04 // LOGBOOK
- Chelsea ♥ — Particle Gift Site (gemsns.github.io/chelsea) ★ FEATURED
- Development Portfolio (Website Development)
- NotTorn — Java RPG Simulation (v0.6.2)
- BH Contracting — Public Site / Frontend (bhcontracting.ca)
- Atlantic Gems — Halifax Jewellery House (Next.js + Trade Area)
- When Seasons Change — booksales / pinnaclepublishinggroup.net
- VanDyke Home Loans — vandyke.loans (Next.js + Postgres)
- NCC Family — gemsns.github.io/ncc (Full-Stack Web)
- BH Contracting CRM — bhcontracting.ca/login (Active Knocker & Field PWA)
- Text Flight — Java Terminal Game (IT Programming Final)
- Networking Toolkit (Intro to Networking)
- Virtual Machine Environments (OSYS)
SEC 05 // COMM
EMAIL: w0514987@campus.nscc.ca
LOC: Halifax, Nova Scotia
LINKEDIN_CONNECT → GITHUB_PROFILE →SEC 06 // FEATURED // CHELSEA ♥
A family gift site of glowing particle art and little games — built for Chelsea (and Aubrey, Zappy & Lilly). Plain HTML/CSS/JS with no libraries: thousands of particles form a beating heart and her name, with 14 visual styles, Bikini Bottom mode for Aubrey, a cosy cats page, and 40+ playable activities. Live at gemsns.github.io/chelsea. See also the dedication.
cats.html for Zappy & Lilly — particle portraits, paw prints, yarn, and cartoon cats that wander, blink, groom, nap, and react when tapped.
window.PX: main.js simulation + WebGL renderer, registry plugins for styles/scenes/motions/overlays/activities, synthesised browser SFX with mute.
main root, cache-bust ?v= on assets, deep links for #aubrey, cats.html#lilly, and friends.
SEC 07 // PROJECT // NOTTORN
A single-player idle-progression RPG written in Java. Navigate a living city of eight districts, commit crimes, manage a dynamic supply-demand economy, and fight AI-driven enemies in turn-based combat — all rendered inside a retro Swing terminal window. Stats persist offline; every missed tick is applied instantly on next boot. Latest release hardens rendering (60 fps cap, delta refresh, resize redraw), travel UX, City Center safe zones, and message-log word wrap.
price = base × (refSupply / supply)^0.5. 5% sales tax, 20 tradeable items, price clamped 20%–500% of base.
screen.clear(), uses RefreshType.DELTA, and calls doResizeIfNecessary() so terminal resize redraws cleanly on Windows and Linux.
SEC 08 // PROJECT // BH CONTRACTING — FRONTEND
Customer-facing site for a Nova Scotia subcontractor — Seaside marketing build rebranded for BH Contracting LTD. Audience gate at / routes visitors to residential and commercial pages, job showcase, and brand-preview boards. Staff enter via Staff login into the ops CRM (Active Knocker, Mainframe AI, field PWA). Live at bhcontracting.ca (embeds blocked by X-Frame-Options — open via hotlink).
/ audience gate, /residential, /commercial, /showcase, and /brand-preview — full Halifax hero, exterior designer, and responsive header/footer chrome.
/login for the role-gated admin and field-app shell — one product, two surfaces (marketing vs operations).
SEC 09 // PROJECT // ATLANTIC GEMS
Public website for Atlantic Gems — fine jewellery, gem wholesaler, and atelier in Halifax, NS (appointment-only). Built as a facts-disciplined Next.js app in clean/: every customer-visible claim is locked in lib/site.ts with provenance tracked in docs/FACTS-REGISTER.md. Includes a password-gated wholesale/trade area, inventory admin, contact pipeline (Resend or webhook), and policy surfaces.
SESSION_SECRET), configurable session hours, and gated trade item views at /wholesale.
/admin/items, media upload, settings, eBay import route, and login/logout API handlers.
/api/contact — Resend email or HTTPS webhook; never silently drops submissions.
npm run scan) guards against inventing prices, origins, or certifications not in the client register.
clean/. CSRF origin checks via NEXT_PUBLIC_SITE_URL; proxy-aware rate limits when TRUST_PROXY=true.
SEC 10 // PROJECT // WHEN SEASONS CHANGE
Live at pinnaclepublishinggroup.net — a plain static multi-page experience for Anthony VanDyke's devotional When Seasons Change (30-day seasonal reflections, presale messaging, and author presence). Built from the booksales project: Slide Revolution–style hero carousel, book/author/presale routes, and a seeded JavaScript generator that paints a stained-glass glow via layered text-shadow so the art direction holds without a preprocessor pipeline.
js/main.js with deterministic seeds so the effect is rich yet cache-friendly.
aria-roledescription), and keyboard-friendly navigation patterns throughout.
SEC 11 // PROJECT // VANDYKE HOME LOANS
Production at vandyke.loans (GitHub Pages demo also available) — live published rates, mortgage calculators (P&I, amortization, APR, DTI, affordability, refinance break-even), TCPA-style lead capture, and a protected broker admin CMS. Deployed on shared GCP Ubuntu 18.04 with NVM Node 24, custom GLIBC 2.28, PM2, and Apache ProxyPass.
/lib/mortgage-math/ powers interactive calculators with estimate-only disclaimers on every tool; fallback rates/brokers when DATABASE_URL is unset.
rates, brokers, and leads; Server Actions for mutations; db:push / db:seed workflow.
/admin for rate publishing, lead pipeline, and broker directory — password auth via ADMIN_PASSWORD.
scripts/with-glibc.mjs; Next image optimization disabled.
/ and /_next to PM2 Node on localhost:3010; secrets in backend/.env; one-shot npm run deploy / branch deploy via DEPLOY_BRANCH.
Production at https://vandyke.loans sends X-Frame-Options: DENY, so the in-page preview uses the GitHub Pages build. Use LIVE SITE to open production.
SEC 12 // PROJECT // NCC FAMILY
A ground-up digital rebrand for New Community Church, extended through an April 2026 release candidate focused on staff workflows: day-to-day admin at admin.html (events, prayer follow-up, JSON site control), GitHub Pages demo mode for stakeholder previews, a public Prayer Chat pipeline with optional AI-assisted replies, and tighter livestream/video embed governance. Earlier phases delivered the brand system, multi-page site, Node.js backend, sermon archive, media lifecycle, and static deploy pipeline — still anchored in Electric Cobalt and Neon Cyan on a dark-first aesthetic.
blog.html prototype (markdown + admin module, off-menu by design).
data-ncc-video slots with overlay overrides plus hardened embed-failure messaging.
/api.
SEC 13 // PROJECT // BH CONTRACTING — CRM
Full operations platform live at bhcontracting.ca/login — PIN auth, permission-gated admin/field shells, Active Knocker canvassing (Leaflet turfs, GPS tracker, proposals + signatures), multi-agent Mainframe AI (Claude / Gemini / OpenAI), automation engine, webhooks, CLI console, and a JSON document store. Source is private; open the live CRM via hotlink (site blocks iframes).
pending_approval). Rate limits, daily token budgets, optional captcha.
/api/store, /api/auth/login, /api/knocker, /api/ai/chat, /api/ai/summarize, /api/assistant, uploads, calendar, webhooks.
Iframe embeds are blocked (X-Frame-Options: DENY / frame-ancestors 'none'). Use the hotlinks above to open the live product.
SEC 14 // PROJECT // TEXT FLIGHT
Submitted IT Programming final on GitHub (GemsNS/JavaBlackjack). Two builds ship in-repo: App.java (compact rubric build) and v2.java (full mission with turbulence, landing, and up to two go-arounds). Includes the W0514987 - FINAL submission package with gameplay footage and project documentation.
ArrayList<String> holds checklist steps; a for-each loop walks each item and validates the player's input against "ok".
while loop drives each turn. Player picks cruise / climb / descend; fuel, altitude, speed, and distance update each pass via a switch.
Random.nextInt() gives a 30% chance of turbulence per turn in v2.java, draining 1–4 extra fuel. App.java uses a 1-in-10 random crash roll for a shorter rubric path.
v2.java): up to 2 go-arounds tracked with a counter. Landing outcome branches on speed, altitude, and fuel via && / || compound conditions.
do-while keeps the main menu alive until the player selects quit (pick 3), satisfying the persistent-loop course requirement.
readIntSafe() wraps Integer.parseInt() in a try-catch for NumberFormatException, returning -1 on bad input instead of crashing.
SEC ∞ // DEDICATION // CHELSEA
PERMANENT FIXTURETO: Chelsea — my girlfriend, my forever approach lights, and my future wife.
Every line of code on this site is built toward a life with you. You are my clear sky after every hard landing, my preferred runway, and the reason the long nights compiling futures feel worth it. I love you more than any altitude I will ever chase.
FLT.PLAN: JOEL + CHELSEA // STATUS: ENGAGED IN FOREVER // ETA: ALWAYS HOME
With all my heart — Joel | Open the Chelsea site →