A note about the implementation behind 99ersstudio.com. We keep this page honest because the site itself is part of the studio's public work.
Framework
- FrameworkNext.js 16.2 with the App Router and React 19, exported as static HTML.
- StylingTailwind CSS v4 with CSS-variable-driven design tokens. No typography plugin.
- MDXnext-mdx-remote/rsc with rehype-pretty-code (shiki, github-dark-dimmed) for syntax highlighting at build time.
- SearchPagefind 1.5 — wasm full-text index built post-next-build, lazy-loaded only when ⌘K opens.
Typography
- Display + bodyGeist Sans, served via next/font, single weight range, ss01 / ss02 / cv01 / cv02 features on.
- MonoGeist Mono, used for chips, kbd elements, code, and metric numerals.
- Color tokensDeep blue primary (#1e3a8a), warm orange accent (#f97316), monochrome base, swap via prefers-color-scheme.
- No third-party fontsTwo Geist faces only. No web font CDN call beyond what next/font self-hosts.
Hosting
- Static hostCloudflare Pages, auto-deploy on push to main. Build command: next build && pnpm pagefind:index.
- DNS + emailCloudflare Registrar + DNS + Email Routing ([email protected] → real inbox).
- TLSCloudflare-managed, auto-renewed.
- AnalyticsPlausible scaffold present (cookieless, aggregate). Off until the self-host instance exists.
Content pipeline
- GeneratorPython 3.12, 12 Jinja2 templates, four data sources (git log, Google Play reviews, RSS feeds, SEOMAX bridge).
- Quality gate35 banned phrases, em-dash cap, EN+DE first-person counter, per-type length bounds, version + proper-noun checks.
- LLM callLocal Claude Code CLI (Max subscription) by default. Falls back to Anthropic API when STUDIO_LOG_USE_CLAUDE_CLI=0.
- Header artProcedural SVG (mulberry32-seeded) per post type. Optional DALL-E gpt-image-1 path swaps in PNGs at /public/journal-images/.
- CronWindows Task Scheduler runs run_local_cron.ps1 daily, rotating post types by day of week, --AutoCommit pushes to main.
Performance stance
- Page weightAll routes static-rendered. Largest JS chunk shipped: the search dialog, lazy-loaded only when opened.
- No client framework on most pagesServer Components do the rendering; client components only where interaction needs it (search, ToC scroll-spy, copy button, keyboard shortcuts, Mietpreis demo, reading progress).
- Imagesnext/image not in use yet — current images are the OG PNGs and procedural SVG art served as inline elements.
- Caching_headers pins long-term immutable on /journal/*/opengraph-image, 1h on /feed.xml and /sitemap.xml.
Credits
- Built by99ersstudio (one developer, occasional contractor help).
- Build assistantClaude Code on the Max subscription — most of the code and content in this site was paired with the model. No API billing.
- InspirationPanic, Plausible, Maggie Appleton's notebook, Marco Arment, Derek Sivers' /now movement, uses.tech.
- SourceRepo is private. Open issues and feature requests are accepted via email at [email protected].