This site is a personal project, built and maintained by one person with no agency, no development team, and no six-figure budget. In the spirit of open source, here is a full accounting of every tool, platform, and service used to make it run — including the AI that helped build it.
01
Hosting & Delivery
Cloudflare Workers — the site is deployed as a static asset bundle via Cloudflare Workers, served from Cloudflare's global edge network. Fast. Reliable. Free tier covers everything this site needs. workers.cloudflare.com
Cloudflare DNS & CDN — domain DNS, SSL/TLS, and edge caching are all handled by Cloudflare. The www → non-www redirect is managed via Cloudflare Redirect Rules at the DNS level.
DigitalOcean Spaces — video files and large media assets are hosted on DigitalOcean Spaces object storage and delivered via their CDN. Keeps the main repo lean and load times fast. digitalocean.com
02
Version Control & Deployment
GitHub — all source code lives in a GitHub repository. Commits to the main branch automatically trigger a Cloudflare Pages build and deployment. github.com
Cloudflare Pages (CI/CD) — connected to the GitHub repo for automatic deployments on every push to main. Zero-config build pipeline for a static site. pages.cloudflare.com
03
Frontend
HTML5 — semantic markup throughout, including Schema.org structured data (Person) for SEO. No static site generator, no templating engine — just clean HTML written by hand.
CSS3 — fully custom design system with CSS custom properties (variables) for the dark theme, orange accent color, typography scale, and responsive layout. No CSS frameworks (no Bootstrap, no Tailwind). Every line was written or reviewed deliberately.
Vanilla JavaScript — no JavaScript frameworks or libraries. All interactivity (nav toggle, blog filters, form handling, video thumbnails) is written in plain JS.
Google Fonts — Fira Sans for headings and display text; Open Sans for body copy. Loaded via Google Fonts CDN. fonts.google.com
04
Analytics & Tag Management
Google Tag Manager — all third-party tags (analytics, consent, CRM tracking) are managed through a single GTM container rather than hardcoded into the HTML. Keeps things clean and consent-aware. Container ID: GTM-MSJ6S3RQtagmanager.google.com
Google Analytics 4 — site traffic and engagement are measured through GA4, fired via GTM only after the visitor has provided consent. No data is collected before consent is granted. analytics.google.com
05
Privacy & Consent
CookieYes — GDPR-compliant consent management platform. Handles the cookie consent banner and implements Google Consent Mode v2, so analytics and tracking only fire after a visitor explicitly consents. Integrated via GTM. cookieyes.com
HTTP Security Headers — a custom _headers file sets strict security headers at the Cloudflare edge: Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy. Rated A on securityheaders.com.
06
Forms & Security
HubSpot Forms API — the contact form submits to HubSpot's CRM via their Forms API (not an embedded HubSpot form). Custom-built HTML form with a native look and feel, connected to a HubSpot portal for lead management. hubspot.com
Cloudflare Turnstile — invisible CAPTCHA that validates form submissions without ever showing a "select all the traffic lights" puzzle to real visitors. Privacy-respecting alternative to reCAPTCHA. cloudflare.com/products/turnstile
07
SEO & Discoverability
Schema.org Structured Data — a Person schema is embedded on key pages with alternateName set to "Bruce Morin" to help Google understand both name variations and associate them with the same person.
XML Sitemap — a hand-maintained sitemap.xml is submitted to Google Search Console and updated with each new post or significant page change to prompt reindexing.
Google Search Console — used to monitor indexing status, search performance, and submit the sitemap. search.google.com/search-console
08
AI Development Partner
Claude by Anthropic — this site was designed, built, and iterated on in active collaboration with Claude, Anthropic's AI assistant. Claude served as the primary development partner: writing and reviewing HTML/CSS/JS, architecting the tag management setup, drafting copy, solving deployment issues, and maintaining consistency across the codebase. Every line of code was reviewed and approved by a human, but Claude did the heavy lifting. anthropic.com
Claude Code (CLI) — the agentic version of Claude used directly from the terminal, with access to the local filesystem and git. All commits in this repository were made in pair-programming sessions with Claude Code, giving it the ability to read, write, and push code while a human stays in the loop at every step.
This isn't a disclaimer — it's a point of pride. AI-assisted development isn't replacing human judgment; it's amplifying what one person can build and ship. The ideas, direction, and decisions are mine. Claude handles the execution.
09
Design & Photography
Custom Design System — dark background (#1a1917), orange accent (#e07b39), off-white body text. All spacing, sizing, and component patterns are defined as CSS custom properties and applied consistently across every page.
Original Photography — all photography on this site is original work shot by Bruce Peter Morin. No stock photos. The images are part of the story.
SVG Icons — all iconography is inline SVG, hand-placed. No icon libraries or webfont icon sets.
10
What's Next
This site is intentionally simple — lean HTML/CSS/JS deployed to the edge. That won't last forever. The next iteration is planned as a Next.js application hosted on Cloudflare Pages, which will bring component-based architecture, better content management, and a cleaner path for adding interactivity.
The tech stack will be updated here as the site evolves. This page is a living document.