colophon
how this is built.
no cookie banner. no popups. no chat widget. no autoplay. no third-party tracking. you're welcome.
stack
- framework
- Next.js 14 (App Router)
- language
- TypeScript 5 (strict)
- runtime
- Node 18+
- styling
- Tailwind CSS + custom editorial tokens
- fonts
- Inter (sans) + JetBrains Mono (mono)
data
- database
- PostgreSQL
- orm
- Drizzle
- content
- Hybrid: MDX files (source of truth) + Postgres for AI-generated
- social images
- Typographic OG cards generated on demand via next/og (satori): title, category, wordmark
AI pipeline
- model
- Gemini 2.5 Flash
- cadence
- 4×/week (Mon, Tue, Thu, Fri at 09:00 UTC)
- voice
- The Shipping Desk, single editorial persona
- generation
- Topic → draft → meta → excerpt → FAQs → tags → image → internal-link inject → validate → score → schedule
- gate
- Posts that score < 70 land in admin queue as drafts; ≥ 70 auto-schedule
delivery
- hosting
- Railway
- cron
- Railway cron primary, GitHub Actions fallback at +15min
- engagement
- Self-hosted views/votes/comments, no third-party widgets
- comments
- Cloudflare Turnstile invisible challenge, no email gate
standards
- every claim
- sourced: primary docs, vendor blogs, research papers
- every stat
- dated
- every tool
- verified as of publish date
- every paragraph
- earns its word count or it gets cut
things we will never add
- ×cookie banner / consent modal
- ×live chat widget
- ×autoplay video
- ×email-required popup on first visit
- ×affiliate-disclosure-driven content
- ×third-party analytics with PII
- ×AMP pages