Releases: maxfelker/maxfelker.com
v0.6 — Mobile Experience Overhaul & Clarity
The site is mobile-first now, with analytics. v0.5 added video articles; v0.6 overhauls the mobile experience, fixes a stubborn dark-mode background split, and turns on Microsoft Clarity. Closes #37 and #9.
Highlights
Mobile experience (#37)
- Full-bleed media — hero images, inline images, and embedded video span the full viewport width on phones and landscape through iPad mini (≤1024px).
- No more bounding-border dead space — fluid side padding (
clamp(2rem, 5vw, 4rem)), equidistant with the 2rem top/bottom; rem-based ~1rem vertical rhythm; tighter title/article-top spacing. - Theme — unified
#010101background, pink links (#ff4ac8, visited#cc3ba0). - Zoom + meta — locked viewport (no pinch/double-tap jitter) plus mobile meta tags (theme-color, app-capable, status-bar,
format-detection). - Home hero redesign — circular profile photo (left of the tagline on desktop, stacked + centered on mobile), tagline header, and a pill Learn More CTA.
The background split — pixel sampling showed #060606 content vs #010101 canvas: Chrome's Auto Dark Theme was force-darkening our already-dark page. Declaring color-scheme: dark opts the page out and keeps it uniformly #010101.
Analytics (#9)
- Microsoft Clarity via
@microsoft/clarity(projectx7s0rggs25, overrideVITE_CLARITY_ID), production-only.
Notes / follow-ups
- Google Analytics (
gtag) still runs alongside Clarity — drop one when ready. profile-pic.pngis ~725 KB; worth compressing for mobile.
Closed in this release: #37, #9
Full changelog: v0.5.0...v0.6.0
v0.5 — Video Articles & Smarter Unfurls
Articles can now lead with video, and links unfurl smarter. v0.4 made previews rich; v0.5 adds the first video article (the Microsoft Build talk), auto-thumbnails video links, and widens the reading layout.
Highlights
MS Build cloud-native talk, now its own article (#33)
- The Microsoft Build 2024 session (BRK254) moves off the About page into a dedicated article — the video embed is the main content up top, with a short summary below. Dated to the YouTube publish date (2024-05-24). First step of the #10 cleanup (article-like content → its own stub).
Smarter unfurl image for video articles
parse()now separates the displayed hero from the preview image: an explicitimage:wins, otherwise a video article falls back to the embedded video's YouTube thumbnail. So video links unfurl as a richsummary_large_imagecard without rendering a redundant hero on the page.
Wider, tighter layout
- Content container widened ~30% (home 650→845, article 680→884, about 800→1040).
- Article page top spacing cut from
8remto3rem, removing the dead space above the title.
Notes / follow-ups
maxresdefaultthumbnails exist for most uploads; if a future video only hashqdefault, set an explicitimage:on that article.- About-page trim and Clarity analytics are tracked separately (#10, #9).
Closed in this release: #33
Full changelog: v0.4.0...v0.5.0
v0.4 — Rich Social Previews & Article Images
Article links now unfurl with rich previews. v0.3 made the site a publishing platform; v0.4 makes shared article links look the part — real social/SMS cards with a hero image — and lets articles carry images. Completes feature #7.
Highlights
Rich social previews via build-time prerender (#7, #20)
- Crawlers (Facebook, X, iMessage, Slack) don't run JS, so the SPA's
<head>was invisible to them. A post-build step now writesdist/article/<slug>.html— the shell with per-articleog:*+twitter:*tags baked in. nginx serves it viatry_files $uri.htmlwith no redirect; real users still get the SPA.
Hero + inline images, co-located with the Markdown
- Each article is now a folder:
articles/<slug>/index.mdplus its images alongside. image: hero.jpgsets a hero shown atop the article AND used as theog:image/twitter:image(card upgrades tosummary_large_image). Inlineimages render responsively.- Authors reference images by bare filename; they resolve to a stable
/articles/<slug>/<file>path — served by a small Vite dev middleware locally and copied intodistfor prod.
Notes / follow-ups
- SMS/iMessage unfurl (#8) rides on the same prerendered tags — what's left there is verification + a pre-publish checklist (#21).
- Home-page list is still text-only; hero thumbnails are an easy future add.
Closed in this release: #7, #20
Full changelog: v0.3.0...v0.4.0
v0.3 — Markdown Articles & Durable Article URLs
The content platform is live. v0.2 was the foundation; v0.3 makes MaxFelker.com an actual publishing site — Markdown articles render from the repo at durable URLs, with the first article migrated off Medium. Completes feature #6.
Highlights
Markdown articles from the repo (#6, #18)
- Articles are plain Markdown files in
articles/. Vite's nativeimport.meta.globreads them at build time, parses frontmatter (title, summary, date, slug, optional image), and renders the body withmarked. One small dependency, no CMS, no server. - A Node self-check (
src/articles.test.mjs) covers the frontmatter parser.
Durable article pages (#17)
- Each article is served at
/article/:slug, resolved against the loaded set, with a graceful not-found and back-home nav.
First article
- Why you should never schedule agile ceremonies on Monday or Friday (2024-02-15), migrated from Medium as the first real piece.
Authoring workflow (#19)
articles/README.mddocuments how to add an article and every frontmatter field.
Fixes
- The dev container never received
articles/(Dockerfile.devand compose mounted files individually) — added the copy + mount so local dev and hot-reload work. - Article list came back empty because
import.meta.globwas behind a runtimetypeofguard; it's a compile-time macro, so the guard always took the empty branch. Now called unconditionally, withparse()split intofrontmatter.jsfor the Node test. Verified rendering in a clean browser for both dev and the production image.
Notes / follow-ups
- Home-page article list is feature #4 — the loader already exports a date-sorted
articlesarray for it. - Social/SMS unfurl (#7/#8) still needs build-time prerender; article
<head>meta is client-rendered today.
Closed in this release: #6, #17, #18, #19
Full changelog: v0.2.1...v0.3.0
v0.2.1 — Tag-Driven Deploy Working
Patch release that proves out the deploy pipeline. v0.2 shipped but never reached Azure — the workflow still triggered on the dead may-2025 branch. #26 rewired it to fire on v* tags; this tag is the first to exercise that path end to end.
What changed
- Version bump
0.2.0 → 0.2.1to cut a fresh tag. - First successful tag-driven deploy: build → push
:v0.2.1+:latestto ACR → deploy to the Azure Web App (build ✓, deploy ✓).
Notes
- Future tags (
v0.3, …) now deploy automatically on push. - GitHub will force Actions onto Node 24 on 2026-06-16; the pinned actions still run but should be bumped in a later minor.
Full changelog: v0.2...v0.2.1
v0.2 — Phase 1 Foundation: Toolchain Current & Text-First Layout
The site's foundation is current again, and the decoration is gone. v0.1 was the gradient portfolio; v0.2 drags the toolchain forward two majors across the board and strips the site back to a readable text column — the groundwork for article publishing (epic #2). Completes the Phase 1 foundation feature (#3).
Highlights
Dependencies, two majors forward
- Vite 4 → 7 and @vitejs/plugin-react 3 → 5 (#11). Build verified clean after the jump.
- React 18 → 19 and react-router-dom 6 → 7 (#12). The
createBrowserRouter/RouterProviderAPI is unchanged, so both routes carried over untouched.
Runtime & CI off EOL (#13, #14)
- Docker base image
node:18-alpine→node:22-alpine— Node 18 is end-of-life — andnginxpinned to1.27-alpineinstead of a floating tag. Release image build verified on node 22. - GitHub Actions bumped to current majors:
checkout@v4,setup-buildx@v3,login@v3,build-push@v6,webapps-deploy@v3.
Text-first layout (#15)
- Deleted the pulsing gradient background and the fade / scale / blur entrance animations, plus the now-unused
AppCSS module. - CSS payload dropped ~58% (2.28 kB → 0.95 kB). The result is a plain readable reading column — the "text-first" baseline the article work sits on.
Notes / follow-ups
- Social & SMS unfurl (#7 / #8) will need build-time prerendering — this SPA can't emit per-article
<head>meta that crawlers see at runtime. That's the load-bearing decision for the next slice of epic #2. - Analytics: Google Analytics (
gtag) is still inindex.html. The Clarity task (#9) should reconcile that before stacking a second tracker. - Security: a
maxfelker.pembundling a private key was briefly committed and has been purged from history — the key was pushed and should be rotated regardless.
Closed in this release: #3, #11, #12, #13, #14, #15
Full changelog: v0.1...v0.2