Source for my personal site — a portfolio and writing space for a senior full-stack and cloud platform engineer. It presents selected work as case studies, a full career history, and essays on platform engineering, public-sector delivery, and building software that has to survive real constraints.
Live at toufichajj.dev.
- Thirty North — privacy-first GST/HST threshold, registration-timing, filing-deadline, late-filing-penalty, and return-line tools for Canadian cross-border freelancers, with free resources in English and French.
- Free GST/HST tools
- Canada sales tax calculator — all provinces and territories
- Calculateur des taxes de vente au Canada — toutes les administrations
- GST/HST place-of-supply screener for ordinary services
- Présélecteur du lieu de fourniture TPS/TVH des services
- Québec GST/QST calculator — forward and reverse
- Calculateur TPS/TVQ du Québec — régulier et inverse
- Québec GST/QST Quick Method calculator
- Calculateur de la méthode rapide TPS/TVQ du Québec
- Registration deadline calculator
- GST/HST filing and payment deadline calculator
- Calculateur des dates limites de production et de paiement TPS/TVH
- GST/HST instalment calculator for annual filers
- Calculateur d’acomptes provisionnels TPS/TVQ
- GST/HST late-filing penalty calculator
- Calculateur de pénalité pour production tardive TPS/TVH
- GST/HST return calculator — lines 101 to 115
- Calculateur de déclaration TPS/TVH — lignes 101 à 115
- Foreign-currency invoice converter
- GST/HST invoice requirements checker
- Vérificateur des exigences de facture TPS/TVQ
- No-GST/HST invoice template for Canadian small suppliers
- Modèle de facture sans TPS/TVQ pour petit fournisseur
- Copy-ready bilingual invoice templates on GitHub
- Québec GST/QST C$30,000 guide
- Guide québécois TPS/TVQ en français
- Outils gratuits en français
- Home — positioning, capability pillars, featured case studies, and a condensed career timeline.
- Work — case studies for BAnQ, Châlons-en-Champagne, Thirty North, Stonkify, Open Trivia, and this site, each framed by problem, approach, and outcome.
- About — full career history, an architect-level capability map, education, and certifications.
- Blog — essays on platform engineering, hybrid deployment, accessibility and privacy, and leading R&D without leaving the craft.
- Next.js 14 (App Router) with a fully static export — no server runtime in production
- TypeScript and React 18
- MDX for case studies and blog posts, rendered through a custom component set
- A hand-authored CSS design system in
src/styles/premium/global.css— no utility framework in the render path - Framer Motion for page transitions and scroll reveals
- Self-hosted Google Fonts via
next/font(Figtree and Source Serif 4) - GitHub Actions → GitHub Pages for build and deploy
src/
app/
(main)/ Route group carrying the site chrome and design system
page.tsx Home
about/ About page
work/ Work index, [slug] detail, and projects/*.mdx
blog/ Blog index, [slug] detail, and posts/*.mdx
layout.tsx Root layout: fonts, metadata, analytics
sitemap.ts Generated sitemap and robots rules
components/
premium/ The component library the site is built from
resources/
content.tsx Structured content: bio, experience, skills, education
config.js Base URL, routes, and site-level flags
styles/premium/ The design system stylesheet
public/ Images, OG image, CNAME
Content lives in two places by design: prose-heavy pages are MDX files next to their route, while structured data that several pages share (work experience, skills, education) lives in src/resources/content.tsx.
npm install
npm run dev # http://localhost:3000Other scripts:
npm run build # static export to ./out
npm run lintAnalytics are opt-in through NEXT_PUBLIC_GA_MEASUREMENT_ID. Without it the tracker is a no-op, so local development stays clean.
Pushing to main triggers .github/workflows/nextjs.yml, which builds the static export and publishes ./out to GitHub Pages. The custom domain is held in public/CNAME so it survives every export.
Toufic Hajj — LinkedIn · toufichajj.dev