The Republic

The House · IV

Colophon & Authorship

A plain-English audit of which design decisions on The Republic are authored, and which came from the underlying template and platform. For readers, examiners, and reviewers who need to see the seam.

Authored — the design decisions that are mine

These are the decisions a reviewer should attribute to the author of the archive. Each entry names the decision, describes what it does, and identifies the code that implements it.

A1.Information architecture

Six-domain civic taxonomy (Law · Money · Power · Places · People · The House)

The archive is organised as six standing domains rather than as a chronological feed or a topic cloud. Each domain names a category of civic knowledge with its own primary sources: Law (Constitution + Acts + commissions), Money (budgets, looted funds, oil-boom spending), Power (heads of state, cabinets, agencies, armed forces), Places (36 States + FCT + kingdoms + diplomatic ties), People (heroes, first ladies, scholars, honours recipients), and The House (about, methodology, colophon, legal). This mapping is mine — no template offered it, and it drives every route, every navigation group in the header, and every schema decision in the data layer.

Authored

A2.Reading-plan UX

Reading Mode with per-page metadata, swipe navigation and citation-on-copy

Long-form entries open into a distraction-free Reading Mode that paginates by act/section, exposes per-page metadata (act number, source count, reading minutes), supports left/right keyboard and touch-swipe navigation between pages, and attaches a full citation to the clipboard whenever a reader copies text. The citation-on-copy behaviour is enforced by a CitationGuard component that intercepts the copy event globally; the pagination model is act-first (not word-first) so that a reader who cites 'Act III, §2' points to the same block another reader saw. All of this is authored — the template ships no reading mode, no citation guard, no pagination primitives.

Authored

A3.Groups & reflections model

Stories → Series → Acts, with cross-domain reflections back into Law, Money and Power

The narrative layer uses a three-level model: individual Stories are grouped into Series (Banking, Oil, Railways, Cars, Phones, Electronics, Northern Power, Land Use, Breakthroughs, etc.), and each Story is broken into numbered Acts. Every Act can carry sourced reflections — inline links that pull the reader back into the primary-source domains (a mention of the 1979 Constitution jumps to that Alteration Act; a mention of a commission jumps to its report). This is the load-bearing decision behind the whole archive: it lets a lay reader follow a story and a researcher follow the sources without either audience feeling second-class. Model, schema, TypeScript types, loaders and the inline-link resolver are all authored.

Authored

A4.Visual direction

Archival green + heritage cream + oxblood, Cardo/Lora/IBM Plex Mono

The palette is a deliberate rejection of the standard SaaS defaults: a deep archival green (#0c322c) on a warm heritage cream (#fdfcf9), with oxblood (#6b1410) reserved for civic emphasis and a muted gold accent (#a68966) for editorial punctuation. Typography pairs Cardo (a scholarly serif with proper old-style figures) for display, Lora for body, and IBM Plex Mono for the small-caps eyebrows and citation lines. The intent is that the site should feel closer to a government gazette or a university press than to a startup landing page. Every colour token, every font choice and every layout rhythm (the entry-row rule, the small-caps eyebrows, the numbered entries) is authored.

Authored

A5.Editorial rules encoded in UI

No email addresses, contact-form-only, citation-on-copy, corrections public

Standing editorial rules — no email address anywhere on the site, contact via form only, every long-form copy carries a citation, every correction is dated and public — are enforced by code, not by policy: the ContactDialog component is the only contact surface, the CitationGuard listens on every route, and the correction workflow is wired into the same form endpoint. This is authored infrastructure that exists because the editorial standard exists.

Authored

A6.Interactive visualisations

Coups Gantt, States Evolution Map, Budget Breakdown, Agency Charts, Speech Overlays

The bespoke visual components — the coups timeline, the 1963→1996 states-evolution map, federal budget breakdowns, agency org-charts, and the Spotify-style speech player with waveform overlays — are all designed and implemented for this archive against its own data schemas. None are template widgets.

Authored

A7.Data model

TypeScript-first data layer (36 State files, story loaders, era registry)

The archive's content is stored as strongly-typed TypeScript modules — one file per State, one per Story, one per Speech, one per Alteration Act — with shared types (RulerStool, ConsortEntry, StoryAct, SourceCite) enforcing citation and provenance on every entry. Loaders assemble the graph at build time so that page counts, story counts, hero counts and cross-references are always live. This schema and its enforcement are authored.

Authored

Inherited — template, framework and platform defaults

These are the pieces of the stack that were not invented for The Republic. They are named honestly so that authored work above is not credited with things it did not do.

T1.Framework

TanStack Start v1 on Vite 7, React 19

The runtime, file-based routing convention (src/routes/*.tsx), createServerFn RPC pattern, SSR entry, and the routeTree.gen.ts generator are all TanStack Start template defaults. Nothing about the framework choice or the route-file naming scheme was invented for this project.

Template

T2.Styling toolchain

Tailwind CSS v4 + shadcn/ui primitives

Tailwind v4's @theme system and the shadcn 'new-york' component set (Button, Dialog, Input, Sheet, etc.) are inherited from the starter. The design tokens themselves (the archival-green palette, the Cardo/Lora pairing) are authored; the mechanism that turns those tokens into utility classes is not.

Template

T3.Backend

Lovable Cloud (managed Supabase) — Postgres, Auth, Storage, Edge Functions

The backend is Lovable Cloud's managed Supabase stack. RLS policies, the email_subscribers schema, the tts-cache bucket, security-definer functions and the migration workflow are authored against that stack; the stack itself is provided.

Provided

T4.Utility libraries

lucide-react icons, framer-motion, react-hook-form, zod, TanStack Query

Standard ecosystem libraries used throughout the archive. Individual usage (which icons, which validations, which animations) is authored; the libraries are conventional choices from the template.

Template

T5.Auth scaffolding

Supabase auth client, middleware, and auth-attacher

The generated files under src/integrations/supabase/ (client.ts, auth-middleware.ts, auth-attacher.ts, types.ts) are managed by the Lovable/Supabase integration and were not authored by hand. Any use of these files in server functions is authored; the files themselves are template output.

Generated

T6.Third-party integrations

Resend (email), Lovable AI Gateway (TTS + summaries), Spotify embeds

The transactional email pipeline uses Resend on the extrafemi.com domain; the audio-narration pipeline uses Lovable AI Gateway's text-to-speech and stores results in the tts-cache bucket; the speech-player UI wraps Spotify embeds. The integrations are conventional; the editorial and UI layer around each of them is authored.

Provided

How to read the seam

The short version: the template gave the archive a runtime, a routing convention, a styling toolchain, a component primitive library, a managed database and a transactional email service. It did not give the archive a taxonomy, a reading model, a citation discipline, a visual language, or a single line of the content that appears on any page.

A useful test when auditing any given page is to ask three questions. First, would this page exist if the archive were a generic starter? (No — every route in src/routes/ was authored for this archive.) Second, would this page look like this if the visual tokens were the template defaults? (No — the palette, typography and entry-row rhythm are authored.) Third, would this page carry a citation on copy and a form-only contact surface if the editorial rules were not encoded? (No — those behaviours are authored infrastructure.)

Where a decision is genuinely shared — for example, the shadcn Dialog component that the ContactDialog is built on — the authored layer is the wrapper, the rules and the copy; the inherited layer is the primitive. This page is meant to make that seam legible.