Documentation
Docs
Technical reference for ft3.tronboll.us. Architecture, stack, playbook, and compliance.
Tech Stack
- Runtime: Next.js 14.2 on Vercel Edge Network
- Language: TypeScript (strict mode)
- Database: Neon Postgres (serverless) via Prisma 6.0 ORM
- Auth: NextAuth 5.0-beta with Prisma Adapter — admin password (Credentials) + email magic link (Resend)
- Editor: Tiptap (ProseMirror) with Markdown storage via Turndown
- AI (dual-motor): Anthropic Claude Sonnet 4 + xAI Grok-3 — both live in /admin/ai-forge
- AI (editor): Claude Sonnet 4 — tag/excerpt generation, prose refinement, theme analysis
- Email: Resend (transactional + newsletter)
- Styling: Tailwind CSS 3.4 with custom semantic color system (cream/night theme)
- Search: Client-side full-text over pre-built index
- Fonts: Crimson Pro (display), Outfit (body), IBM Plex Mono (code)
- Deployment: Vercel (auto-deploy from main branch, preview deploys on PR)
- Cron: Vercel Cron Jobs — 1-minute (publish scheduler) + 4-hour (social dispatch)
- Social: Facebook Graph API + X API v2 (twitter-api-v2) + Instagram Graph API (stubbed)
- Build Provenance: Automated git SHA + ISO timestamp injection at build time
Platforms
| Property | Domain | Stack |
|---|---|---|
| FT3 (essays) | ft3.tronboll.us | Next.js 14 + Prisma + Neon Postgres (own database) |
| Stoic Preparedness | stoic.tronboll.us | Next.js 14 + Prisma + Neon Postgres (shared) |
| Discreet Dynasties | discreet.tronboll.us | Next.js 14 + Prisma + Neon Postgres (shared) |
| Tronboll.us | tronboll.us | Next.js 16 + Prisma + Neon Postgres (shared) |
All properties share the same design language: flat, monospace-accented, zero-ornament typography. There are no microservices and no runtime coupling — each site builds, deploys and serves on its own, and a failure in one cannot take another down. Lone Ranger architecture.
Two honest qualifications, because this page is meant to be verifiable rather than flattering. Storage is not fully separate: FT3 runs on its own Neon database, but the three satellites share a single one, so they are independent at the application layer and not at the data layer. And a secondary scheduler exists — each site owns its own cron entries in its own vercel.json, while the enterprise orchestrator acts as an outside trigger and monitoring layer rather than a dependency.
Site Architecture Overview
ft3.tronboll.us
├── app/ # Next.js App Router
│ ├── (public routes) # Feed, Archive, Posts, Tags, About, Works
│ ├── admin/ # Dashboard, Editor, Scheduled Posts, Preview
│ ├── api/ # REST endpoints (posts, auth, search, cron, AI)
│ └── docs/ # This page
├── components/ # React components (zero external UI library)
├── content/docs/ # Markdown source for /docs
├── lib/ # Shared utilities (db, auth, posts, build-info)
├── prisma/ # Schema + migrations
└── public/ # Static assets
Data Flow
- Write: Admin → Tiptap editor → Turndown → Markdown → Prisma → Neon Postgres
- Read: Request → Prisma query (published + publishedAt ≤ now) → Remark → HTML → React
- Schedule: Admin sets future publishedAt → Vercel Cron (06:02 + 18:02 UTC daily) → flip published flag
- AI: Admin triggers action → API route → Anthropic SDK → Claude Sonnet 4 → structured response
Principles
- Server components by default. Client components only for interactivity.
- No state management library. React state + server actions.
- No component library. Every element is hand-written Tailwind.
- No analytics, no tracking, no cookies (beyond auth session).
- Build provenance injected at compile time — never hardcoded.
Developer Playbook
Local Development
git clone <repo>
cp .env.example .env.local
npm install
npx prisma db push
npm run dev
Environment Variables
| Variable | Purpose |
|---|---|
| DATABASE_URL | Neon Postgres connection string |
| AUTH_SECRET | NextAuth encryption key |
| AUTH_RESEND_KEY | Resend API key for email auth |
| AUTH_GITHUB_ID / SECRET | GitHub OAuth credentials |
| ANTHROPIC_API_KEY | Claude API access |
| CRON_SECRET | Bearer token for /api/cron/publish |
| RESEND_API_KEY | Newsletter sending |
Conventions
- Commits: Imperative mood, one sentence. No emoji.
- Branches: Feature branches off main. No develop branch.
- Deploys: Push to main = production. No staging environment.
- CSS: Tailwind utility classes only. No custom CSS except prose-content and thread-connector.
- Types: TypeScript strict. No
anyunless truly necessary. - AI assistance: Claude.md governs all automated behavior. Build-info.ts handles provenance.
Command Palette
Press Cmd+K anywhere on the site to open the command palette. Press ? for all keyboard shortcuts.
Compliance & Legal
- Data Residency: All data stored in Neon Postgres (US regions)
- Authentication: Email verification (Resend) + GitHub OAuth. No password storage.
- Session Management: NextAuth with secure HTTP-only cookies. CSRF protection enabled.
- GDPR: No tracking, no analytics, no third-party cookies. Newsletter subscription is explicit opt-in with email confirmation.
- Content License: All essays © F. Tronboll III. All rights reserved unless stated otherwise.
- Open Source: Site infrastructure patterns are documented publicly at /docs. Source code is private.
- Cookie Policy: Single session cookie for authenticated admin users. No cookies for public visitors.
- Data Deletion: Subscribers can unsubscribe at any time. Contact for full data deletion requests.
Security Profile
NSA-exceeding protection. Documented. Public. Verifiable.
Full security documentation: /docs/security
Summary
- Zero-trust authentication with email verification + OAuth
- Edge-first architecture — no origin server exposed
- All secrets managed via environment variables, never committed
- Database connections use SSL with connection pooling
- Immutable deploy history via Vercel + git SHA provenance
- Admin routes protected by middleware + session validation + role checks
- CRON endpoints secured with bearer token verification
- No user-uploaded files, no file system writes, no shell execution
Release Notes
Auto-generated from deploy history.
v2026.08 — Last compiled 2026-08-28T15:55:15.134Z
Deploy SHA: 7a509d5
System Performance
Runtime: Vercel Edge (auto-scaling, zero cold starts on edge functions)
Database: Neon Postgres (serverless, auto-suspend on idle)
Build: 2026-08-28T15:55:15.134Z
Cron: 60s (publish) + 4h (social dispatch) — live proof sheet
AI engines: Claude Sonnet 4 + Grok-3
CDN: Vercel Edge Network (global)
Last Forge Run
Run ID: seo-the-register-why-the-softest-voice-in-the-room-wins-the-room-1786471345983
Model: claude-sonnet-4-6
Tokens: 8,743
SHA: f4499ba
Time: 2026-08-11T18:02:53.170Z
Knowledge Base
How does scheduled publishing work?
Posts with a future publishedAt date are saved with published=false. A Vercel Cron job hits /api/cron/publish on a fixed schedule (daily 06:02 + 18:02 UTC), finds posts where publishedAt is in the past and published=false, and flips them to published=true. A post therefore goes live at the next firing after its scheduled time, so worst case is about twelve hours. The cron endpoint is secured with a bearer token (CRON_SECRET).
How does the AI assistant work?
The admin editor includes AI actions powered by Claude Sonnet 4 via the Anthropic SDK. Actions: generate tags/excerpt, refine prose, suggest titles, analyze themes. All processing happens server-side via /api/admin/ai. The system prompt enforces the author's voice: philosophical, intentional, unplugged, measured, sometimes provocative.
How does build provenance work?
At build time, next.config.js runs git rev-parse --short HEAD and captures the ISO timestamp. These values are injected as NEXT_PUBLIC env vars and consumed by lib/build-info.ts. The footer, /docs, and HTML comments all read from this single source. Every deploy auto-updates — zero manual work.
ft3 • v2026.08 • last compiled 2026-08-28T15:55:15.134Z • frontier-built with next.js + vim
Social Dispatch
Last posted: x — 2026-08-28T20:03:17.092Z
Post: the-mind-pillars-how-they-got-to-your-head-before-you-did
Platform ID: 2093429229085995292