W0514987

JOEL AL GOHRI SAYED

Aviation Enthusiast // Year 2 IT Programmer

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

TypeScript
Next.js
React
Java
Postgres
Node.js
HTML5
CSS3
SQL
Zod
Drizzle
PWA

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 ♥

LIVE SITE → GITHUB_REPO → FAMILY GIFT
Chelsea ♥ / Aubrey 🍍 / Zappy & Lilly 🐾 — Particle Art Gift Site
HTML / CSS / JS WebGL Particles 40+ Activities No Build Step

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.

CHELSEA MODE Heart + name particle sculpture. Style picker (✨) cycles 14 looks — rose petals, starry night, butterflies, galaxy, fireflies, rainbow, and more — with the choice remembered locally.
AUBREY MODE Bikini Bottom underwater theme: pineapple house, jellyfish, colour-art snail, string-art sponge, starfish buddy, and full-body Strong SpongeBob particle scenes.
CATS PAGE cats.html for Zappy & Lilly — particle portraits, paw prints, yarn, and cartoon cats that wander, blink, groom, nap, and react when tapped.
ACTIVITY DOCK 40+ games filtered by theme: Heart Catcher / Compliment Jar for Chelsea, Jellyfishing / Krabby Patty Stack for Aubrey, Laser Pointer / Boop the Snoot for the cats, plus Draw It, Fireworks, Black Hole, and more.
PARTICLE ENGINE Plugin architecture via window.PX: main.js simulation + WebGL renderer, registry plugins for styles/scenes/motions/overlays/activities, synthesised browser SFX with mute.
SHIPPING Zero build step, GitHub Pages from main root, cache-bust ?v= on assets, deep links for #aubrey, cats.html#lilly, and friends.

SEC 07 // PROJECT // NOTTORN

GITHUB_REPO → v0.6.2
NotTorn — Text-Based Crime Simulation RPG
Java 17 Lanterna 3.1.2 Jackson 2.16.1 Idle-Progression RPG

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.

CITY & WORLD 8 connected districts — City Center, Gym, Hospital, Dark Alley, Item Market, Police Station, Bank, Drug Store. Full ASCII city map on demand. City Center is a combat safe zone; NPCs cannot start or finish fights there.
CRIME ENGINE 10 crime types. Nerve-gated access, CE-based success rolls (up to +20% at 5,000 CE), timed jail lockouts on failure.
COMBAT SYSTEM Turn-based fights up to 25 rounds. 14 weighted hitboxes, 12% base crit chance, log-table hit/mitigation math, BigInteger battle stats.
LIVE ECONOMY Supply/demand pricing: price = base × (refSupply / supply)^0.5. 5% sales tax, 20 tradeable items, price clamped 20%–500% of base.
RENDER & PLATFORM Logic/render decoupled at 60 Hz. v0.6.2 removes per-frame screen.clear(), uses RefreshType.DELTA, and calls doResizeIfNecessary() so terminal resize redraws cleanly on Windows and Linux.
CAREERS, TRAVEL & UX 4 career paths with auto-promotion. 11 international destinations with flight-time lockouts. Travel menu shows explicit return-home option; corrupt in-flight saves heal on load; message log word-wraps long lines.
NotTorn — Main UI city overview and stats panel NotTorn — Crime menu NotTorn — Turn-based combat NotTorn — City map panel

SEC 08 // PROJECT // BH CONTRACTING — FRONTEND

LIVE SITE →
BH Contracting LTD. — Public Marketing Frontend
Next.js 15 TypeScript Framer Motion Tailwind CSS v4

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).

PUBLIC ROUTES / audience gate, /residential, /commercial, /showcase, and /brand-preview — full Halifax hero, exterior designer, and responsive header/footer chrome.
MOTION & LAYOUT Framer Motion page transitions and scroll-reveal effects; mobile-first responsive navigation with polished contracting-industry art direction.
BRAND SYSTEM Dedicated brand-preview page with vehicle-wrap mockups and direction boards for fleet and signage reference — same design language as the live public site.
PRODUCTION Public marketing + staff CRM served from bhcontracting.ca. Private source repo; portfolio links to the live product only.
STAFF HANDOFF Public chrome links cleanly into /login for the role-gated admin and field-app shell — one product, two surfaces (marketing vs operations).
QUALITY ESLint + Vitest in the same Next.js codebase; TypeScript strict mode across all public pages and shared UI components.

SEC 09 // PROJECT // ATLANTIC GEMS

LIVE DEMO → GITHUB_REPO →
Atlantic Gems — Halifax Fine Jewellery House
Next.js 15 TypeScript Zod Trade Area Auth

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.

SERVICE ROUTES Jewellery, gemstones, custom, repair/restoration, stone setting, appraisals/consignment, watches, contact, inventory detail pages, plus privacy and disclosure policies.
WHOLESALE / TRADE SHA-256 passphrase login, signed cookie sessions (SESSION_SECRET), configurable session hours, and gated trade item views at /wholesale.
ADMIN CMS Staff inventory CRUD at /admin/items, media upload, settings, eBay import route, and login/logout API handlers.
CONTACT PIPELINE Typed enquiry categories (buy, sell, sourcing, wholesale, custom, repair, appraisal, etc.) via /api/contact — Resend email or HTTPS webhook; never silently drops submissions.
FACTS DISCIPLINE Null fields are not rendered. A string-scan script (npm run scan) guards against inventing prices, origins, or certifications not in the client register.
DEPLOY Standalone Next.js build for Node 20+ / PM2 + reverse proxy, or Vercel with root clean/. CSRF origin checks via NEXT_PUBLIC_SITE_URL; proxy-aware rate limits when TRUST_PROXY=true.
gemsns.github.io/Atlantic-Gems/
↑ LIVE PREVIEW  |  OPEN IN NEW TAB →

SEC 10 // PROJECT // WHEN SEASONS CHANGE

LIVE SITE → STATIC MULTI-PAGE
When Seasons Change — Pinnacle Publishing Group Book Landing
HTML / CSS / JS No Build Step Hero Carousel UI

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.

INFORMATION ARCHITECTURE Four primary surfaces — Home, Book, Author, and Presale — plus outbound link to AnthonyInspiration for extended ministry content.
HERO SHOWCASE Four-season carousel with layered photography, gradient tints, and keyed overlay assets for a high-end publishing presentation.
ATMOSPHERE ENGINE Floating stained-glass treatment generated in js/main.js with deterministic seeds so the effect is rich yet cache-friendly.
COMMERCE READY CTA placeholders wired for real checkout URLs (Amazon, Stripe, Shopify, Gumroad, etc.) once campaigns go live.
TYPOGRAPHY STACK Crimson Pro, Inter, and Montserrat via Google Fonts for editorial headings and crisp marketing copy.
ACCESSIBILITY TOUCHES Skip links, carousel semantics (aria-roledescription), and keyboard-friendly navigation patterns throughout.

SEC 11 // PROJECT // VANDYKE HOME LOANS

LIVE SITE → GH PAGES → GITHUB_REPO →
VanDyke Home Loans — Mortgage Broker Web Platform
Next.js 15 TypeScript Tailwind CSS v3.4 Postgres + Drizzle

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.

PUBLIC TOOLS /lib/mortgage-math/ powers interactive calculators with estimate-only disclaimers on every tool; fallback rates/brokers when DATABASE_URL is unset.
DATA LAYER Drizzle ORM + postgres.js models for rates, brokers, and leads; Server Actions for mutations; db:push / db:seed workflow.
ADMIN CMS Protected /admin for rate publishing, lead pipeline, and broker directory — password auth via ADMIN_PASSWORD.
COMPLIANCE Equal Housing / ECOA footer language, NMLS IDs, Privacy & Licensing pages, MAP-style rate+APR advertising disclaimer, and TCPA consent on the lead funnel.
HOST CONSTRAINTS Ubuntu 18.04 + GLIBC 2.28 profile: no Prisma, no Tailwind v4 Oxide, no Sharp; all npm scripts run through scripts/with-glibc.mjs; Next image optimization disabled.
PRODUCTION DEPLOY Apache proxies / and /_next to PM2 Node on localhost:3010; secrets in backend/.env; one-shot npm run deploy / branch deploy via DEPLOY_BRANCH.
gemsns.github.io/vandykehomeloans/  |  prod: https://vandyke.loans
↑ LIVE SITE (https://vandyke.loans)  |  OPEN IN NEW TAB →

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

LIVE SITE → GITHUB_REPO →
New Community Church — Suffolk, VA — Full Digital Rebrand
HTML / CSS / JS Node.js Backend 12-Phase Build GitHub Pages

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.

SITE PAGES 12+ public routes (Home, About, Ministries, Messages, Gallery, Events, Contact, Give, Admin, Brand, etc.) plus a hidden blog.html prototype (markdown + admin module, off-menu by design).
STAFF ADMIN & DEMO MODE Events CRUD feeds the public calendar; Prayer Chat conversations land in a staff inbox; JSON editor controls livestream ticker, video slots, and calendar feeds. GitHub Pages “Demo Mode” mirrors flows with localStorage + bundled sample content — no backend required for walkthroughs.
SERMON ARCHIVE Searchable media archive with tag/speaker filters, sermon notes support, and rich metadata rendering tied to the publishing workflow.
LIVESTREAM & MANAGED VIDEO Config-driven ticker, manual or scheduled live status, and per-service timeline overlays. Centralized data-ncc-video slots with overlay overrides plus hardened embed-failure messaging.
PRAYER CHAT Floating on-site Prayer Chat with optional server-side AI replies (OpenAI when configured), stored threads for staff review, and a lightweight local helper when APIs are offline.
SECURITY & DEPLOY Draft/archived content blocked from public routes; production boot fails fast without critical secrets; atomic JSON writes for file storage; cPanel-style Node hosting documented for same-origin /api.

SEC 13 // PROJECT // BH CONTRACTING — CRM

LIVE CRM → PUBLIC SITE →
BH Contracting LTD. — Operations CRM, Active Knocker & Field PWA
Next.js 15.5 TypeScript JSON Store + REST Leaflet + PWA

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).

ACTIVE KNOCKER Map turfs (RDP-simplified polygons), color outcome pins, double-knock 409 guard, GPS breadcrumbs with wake lock + battery-aware accuracy, proposal builder with signature pad, calendar ICS / Google template sync.
MAINFRAME AI Multi-agent router (orchestrator, CRM, estimator, research, design). Provider order: Claude → Gemini → OpenAI → local parser. Tools never auto-send outreach (pending_approval). Rate limits, daily token budgets, optional captcha.
API SURFACE Zod-validated routes: /api/store, /api/auth/login, /api/knocker, /api/ai/chat, /api/ai/summarize, /api/assistant, uploads, calendar, webhooks.
OPS MODULES Sales hub (Pipeline / Client 360° / Automation / Outreach), schedule & shift pool, inventory, damage reports, job progress + AI summarize, invoices, JARVIS ⌘K palette, Markets terminal.
CLI & AUTOMATION Interactive CRM console, CLI for AI/store/ads/webhooks, automation tick, store backup, and verify pipeline (lint + typecheck + test + build) for release CI.
PWA / FIELD Service worker + web manifest; push reminders for due todos; AppsShell bottom tabs on mobile; production persistence on the live host at bhcontracting.ca.

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

GITHUB_REPO → IT PROGRAMMING FINAL
Text Flight — Java Terminal Flight Simulation
Java Terminal / Console IT Programming

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.

PREFLIGHT CHECKLIST ArrayList<String> holds checklist steps; a for-each loop walks each item and validates the player's input against "ok".
FLIGHT LOOP while loop drives each turn. Player picks cruise / climb / descend; fuel, altitude, speed, and distance update each pass via a switch.
TURBULENCE ENGINE 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.
LANDING & GO-AROUND Full build (v2.java): up to 2 go-arounds tracked with a counter. Landing outcome branches on speed, altitude, and fuel via && / || compound conditions.
MAIN MENU LOOP do-while keeps the main menu alive until the player selects quit (pick 3), satisfying the persistent-loop course requirement.
SAFE INPUT PARSING readIntSafe() wraps Integer.parseInt() in a try-catch for NumberFormatException, returning -1 on bad input instead of crashing.
// SAMPLE RUN
=== text flight (terminal) ===
1 start mission   2 help   3 quit
pick: 1
-- preflight --
1) check fuel gauge   type ok: ok
2) check engines   type ok: ok
3) release brake   type ok: ok
wheels up
-- flying --
turn 1 | fuel ~100 | alt 500 | speed 420 | dist 150 km
1 cruise   2 climb   3 descend
action: 1   turbulence... -3 fuel
turn 2 | fuel ~92 | alt 500 | speed 415 | dist 125 km
...
smooth landing

SEC ∞ // DEDICATION // CHELSEA

PERMANENT FIXTURE

TO: 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 →

140
20 20 10 10 10 10
00000
CMD
LOC
G/S
GS 142
TAS 140
HDG 270° M
10005000
TAT 4cREF 140
N1
REVREV
55.0
55.0
EGT
410
410
2.40
FF
2.40
DOWN
GEAR
DOWN