Arkive

Internationalization

As of
Version1.1.0
Kindspec
Length1,697 words, about 7 min
Tagssystem-designcontenti18n

D240 decision #i18n: Sidekick ships in English only but stays i18n-ready: adding a language means adding catalogs and an entry in the locale config, with no other code change.

Sidekick has one locale today and no plan for a second. Being ready costs little now and a lot later: a sentence glued together from pieces, a hand-written thousands separator or a padding-left has to be found and rewritten in every screen once a second language arrives. So the App and the site are built as if more languages were coming, and the i18n lessons prove it with a mock locale (Pratik, 2026-11-05). This page replaces Centralized Copy once lesson I1 lands.

Library

D241 decision #i18n: The App translates and formats with next-intl; a public face built to last uses use-intl, the library next-intl is built on, so both read the same ICU catalogs through the same t() and formatter API. derived-from D240

next-intl is use-intl plus the Next.js wiring: server helpers, request config and optional routing. Astro has no Next.js, so a lasting public face would use use-intl's createTranslator and createFormatter at build time and ship no client JS for it. Today's site, apps/www, is temporary (D256): it stays English with lang and dir on <html>, and has no catalogs, no no-literal-string and no logical-CSS lint (Pratik, 2026-11-06). Rejected: react-intl (the reference ICU implementation, but server components, locale detection and routing are left to us), i18next (App Router wiring by hand, ICU only through a plugin), Paraglide (needs --webpack or a separate compile task on Next 16) and Lingui (its SWC plugin is tied to Next versions). The catalogs are plain ICU, so a later switch keeps them.

Where the locale comes from

D242 decision #i18n: The App takes the locale from the device (Accept-Language, en until a second language ships) in one place, i18n/request.ts, and keeps locales out of URLs; the site sets lang and dir from config and adds locale routes, English unprefixed, only when translated content exists. derived-from D240

URL locales pay off for pages search engines index in more than one language. The App is signed in and never indexed, so /dashboard stays /dashboard in every language, as in most signed-in apps; i18n/request.ts returns en until a second language ships, then reads Accept-Language.

D253 decision #i18n: The App shows dates in the device's time zone, which the browser writes to a tz cookie that i18n/request.ts passes to next-intl as timeZone, with UTC only before the cookie exists; a stored locale or time zone is optional, added only when something with no browser needs one. derived-from D245 derived-from D1

The server renders in UTC (Vercel). Without an explicit timeZone, a note saved at 11:30 pm shows "Nov 6" from the server and "Nov 5" after the browser re-renders, a hydration mismatch. The browser knows the zone (Intl.DateTimeFormat().resolvedOptions().timeZone) but sends it in no header, so the root layout's client provider compares it with the tz cookie on every load and, when they differ (first visit, or the device moved to another zone), rewrites the cookie and calls router.refresh(), so the server renders that page again in the new zone. The locale needs no cookie: Accept-Language comes with every request.

No profile columns yet (Pratik, 2026-11-06): the device already knows both. A stored setting arrives only for a job that runs with no browser (a reminder, a digest, a bot posting "due today") or for a person who wants to override the device, and it is optional (D1). The order then becomes: stored setting, else the device, else UTC, still in i18n/request.ts. The site is indexed, but its entries are English Markdown: a second language there is a content decision, and when it comes Astro's i18n routing adds /xx/ without moving an English URL.

Catalogs

D243 rule #i18n #copy: Every user-visible string lives in a JSON catalog next to the package that uses it, under one namespace named for that package; @sidekick/i18n alone owns the common namespace, and a string moves there once a second package needs it. supersedes D36

D244 rule #i18n: A message is a whole sentence in ICU syntax, with plurals and selects inside it; code never builds a sentence by joining messages or changing their case. derived-from D240

  • @sidekick/i18n holds what every app shares: the common catalog (the app name, generic errors, words like Sign in once two packages use them), the locale config (supported locales, the default, each locale's direction, and which are mock), the named formats, the AppConfig types that make t('auth.signIn') type-checked, and mergeCatalogs, which throws on a duplicate namespace.
  • Each package ships messages/<locale>.json with one top-level key, its namespace (synergy, app, www). There is no defineMessages: catalogs are data, not code (Pratik, 2026-11-05).
  • Each app assembles its catalogs for the locale, the way the feature registry collects manifests: the App in i18n/request.ts, the site in its translator helper.
  • Why colocate: a feature's words change with the feature, and deleting a feature deletes its words. The common catalog keeps shared words from drifting apart, which is what D36 was for.

D249 rule #i18n #ui: @sidekick/ui holds no words and imports no i18n library; every word in a primitive is a required string prop named <purpose>Label (closeLabel, loadingLabel), which the caller fills from its own catalog. derived-from D243

A primitive renders in server components, client components, the site's static build, tests and third-party pages. React's server build has no createContext or useContext, so a ui that read words through a provider would turn every worded primitive into a client component and need a provider in every host. Plain string props work everywhere (Q3 of the Phase 3 additions handover, Pratik, 2026-11-06; research in the project's i18n-ui/ui-words-evaluation.md).

  • The App fills the props with t() in server and client components alike; a wrapper (AppDialog) can save the repetition, because the App may import both.
  • Props are strings, never functions: a server component cannot pass a function to a client one.
  • no-restricted-imports bans use-intl, next-intl and @sidekick/i18n inside packages/foundation/ui.
  • Later, if a trigger arrives (a host with no catalogs renders ui directly, Storybook, or more than about ten built-in words): ui may bundle its own catalogs behind a React context whose default is en, and the props become optional. That change only adds, so no caller breaks. The reverse would break every caller, which is why props come first.
  • Rejected: ui importing @sidekick/i18n (an exception to the flat foundation rule, and a provider everywhere), and ui calling useTranslations on its own catalog (client-only, provider everywhere).

@sidekick/i18n lives in packages/foundation/i18n, next to core and ui, and no foundation package imports another.

Today's validationCopies.invalidInput(labelCopies.email.toLocaleLowerCase()) breaks D244: German capitalises nouns and Hindi puts the verb last, so each field gets its own whole sentence.

Formatting

D245 rule #i18n: Numbers, currencies, dates, relative times and lists are formatted only through the locale's formatter and the shared named formats; an amount is always stored with its ISO 4217 currency code, and a date is shown in the person's time zone. derived-from D240

No hand-written separators and no bare toLocaleString(). The currency rule is also a database convention: every table with an amount stores its currency code beside it (syncable tables). A named format (short date, compact number) means every screen formats a value the same way, and a new locale changes only the separators, digits and order, which come from Intl.

Direction

D246 rule #i18n #css: Layout is direction-agnostic: CSS uses logical properties and values (padding-inline-end, margin-inline-start, text-align: start), <html> gets lang and dir from the locale, and code that maps keys or icons to a direction reads dir. derived-from D240

In right-to-left text ArrowLeft means next, a "back" arrow points right, and inset-inline-start is the right edge. Styling lives in CSS modules and a short list of global files (D47, sidekick/no-inline-styles), so Stylelint sees all of it. Mantine leaves the App in lesson M1, before I1, so no direction provider is needed (D255).

Proving it

D247 rule #i18n: Arabic (ar) is a mock locale for the test pages only: marked mock in the locale config, never offered to people, and required only of the catalogs the test pages read. derived-from D240

Each app has one dev-only test page (the App's /dev/i18n returns 404 in production) that renders the same sample twice, side by side, in English and in Arabic: a form with validation messages, a count that needs plurals, a price, a date, a relative time and a list. Arabic exercises everything at once: right-to-left, Arabic-Indic digits, its own separators, currency placement and six plural forms. Its text is machine-written; the English column is how it is checked.

D248 rule #i18n: Lint keeps the catalogs and direction honest: eslint-plugin-i18next's no-literal-string on user-facing code, stylelint-use-logical on CSS, sidekick/catalog-namespace on catalogs, and a catalog check that fails on the same English text in two catalogs or a missing catalog for a supported locale. derived-from D243 derived-from D246

  • no-literal-string (open source, works with any library despite its name) flags hardcoded strings in JSX and code, in mode: "jsx-only": the default, jsx-text-only, does not check attributes, so aria-label="Close" would pass. Tests, packages/ops and apps/www (D256) are exempt. If it does not support ESLint 10 yet, lesson I2 writes the equivalent in eslint-plugin-sidekick.
  • stylelint-use-logical (csstools) reports and fixes physical properties.
  • TypeScript rejects unknown keys through AppConfig, so keys need no lint rule.
  • sidekick/catalog-namespace (ours, on JSON through @eslint/json): a catalog has one top-level key, its package's namespace, and only @sidekick/i18n may use common.
  • The catalog check (ours, a script, since ESLint reads one file at a time) is the drift guard: the same English text in two catalogs fails with "move it to common".

Known gaps

  • Other consumers of keys. The API returns keys and MessageRefs (D201, D250), so apps/cli, bots and third parties need the catalogs to show words: Synergy's catalog is exported from the package, and a catalog endpoint can come later. Nothing in Phase 3 needs it.

Decision History

  • 2026-11-05 · accepted · English only, i18n-ready, with next-intl and use-intl; replaces Centralized Copy (D36) when lesson I1 lands
  • 2026-11-06 · accepted · ui holds no words (D249); locale and time zone from the device (D242 revised, D253); the temporary site leaves i18n out (D241 revised); no-literal-string in jsx-only mode
Arkive

Index

Notes, decisions, and progress on my journey as I build Project Sidekick — built in the open; written as it happens.

Tags (145)

View

241 entries.

As ofTitleKind
2026-11-06Design Tokenssystem-design css design-systemspec
2026-11-06Hosting and Domainssystem-design deployment vercel cloudflare domainspec
2026-11-06Native UIsystem-design css design-system mantinespec
2026-11-06Public Site: System Designsystem-design site one-repospec
2026-11-06InternationalizationReadingsystem-design content i18nspec
2026-11-06Synergy Lesson 0: One Repoplan phase-3 task monorepo one-repo git cloudflareplan
2026-11-06Decisions Logdecisionlog
2026-11-06Synergy Lesson 1: Layer Folders and Lintplan phase-3 task monorepo eslintplan
2026-11-06Synergy: System Designsystem-design synergyspec
2026-11-06Agent Guideai-coding agent gateway agent-guidance rls supabase drizzle api react prettierguidance
2026-11-06CSS Modulessystem-design css eslint stylelintspec
2026-11-06Dependency Flowsystem-design monorepo clispec
2026-11-06ESLint Plugin Boundariessystem-design code-quality-check eslintspec
2026-11-06Non-Syncable Tablessystem-design database offlinespec
2026-11-06Prettier at Repo Levelsystem-design code-quality-check prettierspec
2026-11-06Runtime Validationssystem-design typescriptspec
2026-11-06Shared tsconfigsystem-design code-quality-check typescriptspec
2026-11-06Syncable Tablessystem-design database offline soft-deletespec
2026-11-06Synergyplan living-plan phase-3 synergy rls postgresql api graphplan
2026-11-06Technology Stacksystem-design supabase drizzle postgresql nextjs typescript turborepo pnpm vercelspec
2026-11-05One Repoprd feature synergy one-repoprd
2026-11-05Synergy Checkpoint 3a: Prove the Store, Plan 3bplan phase-3 checkpoint guidanceplan
2026-11-05Synergy - Feature Specificationsprd spec synergyprd
2026-11-05Overview of Synergyprd feature synergyprd
2026-11-05Approve Buildssystem-design monorepo nextjs pnpmspec
2026-11-05Centralized Copysystem-design contentspec
2026-11-03Commands and Environmentai-coding command environment agent-guidance prettier pnpm cliguidance
2026-11-01Synergy Lesson 10: Save Call, Anchorsplan phase-3 task synergy apiplan
2026-11-01Synergy Lesson 11: Delete and Restoreplan phase-3 task synergy databaseplan
2026-11-01Synergy Lesson 12: Tagsplan phase-3 task synergy apiplan
2026-11-01Synergy Lesson 13: Race Testsplan phase-3 task synergy testing postgresqlplan
2026-11-01Synergy Lesson 2: Per-Package Migrationsplan phase-3 task database drizzle testingplan
2026-11-01Synergy Lesson 3: Entity Index and Version Logplan phase-3 task synergy database rls postgresqlplan
2026-11-01Synergy Lesson 4: Sandbox Providers and the First Routesplan phase-3 task synergy feature-system apiplan
2026-11-01Synergy Lesson 5: Outbox, Status and Versionsplan phase-3 task synergy database postgresqlplan
2026-11-01Synergy Lesson 6: Links, Relation Types and Cyclesplan phase-3 task synergy graph postgresql apiplan
2026-11-01Synergy Lesson 7: Staleness Dots and the Roll-Upplan phase-3 task synergy apiplan
2026-11-01Synergy Lesson 8: Lists and Supersedeplan phase-3 task synergy graph postgresqlplan
2026-11-01Synergy Lesson 9: Save Call, Mentionsplan phase-3 task synergy apiplan
2026-11-01Violations and Exceptionssystem-design synergyspec
2026-11-01Content Sequencesystem-design synergyspec
2026-11-01Tombstone Visibilitysystem-design synergy rlsspec
2026-11-01Anchors in Contentsystem-design synergy anchorsspec
2026-11-01Capture External Contentsystem-design synergy taxilaspec
2026-11-01Lexicon Highlightingsystem-design synergy taxilaspec
2026-11-01Mentions and Link Lifetimesystem-design synergyspec
2026-11-01Synergy Store Choicessystem-design synergy postgresqlspec
2026-11-01Testing Layerssystem-design testing vitest playwrightspec
2026-11-01Relationshipsprd feature synergyprd
2026-11-01Scope and Phasesprd feature synergyprd
2026-11-01Best Practice Rulessystem-design code-quality-check eslintspec
2026-11-01Stay on ESLint, Revisit Oxlintsystem-design eslint typescriptspec
2026-11-01API Versioningsystem-design apispec
2026-11-01App Runtime for Drizzlesystem-design database drizzle postgresqlspec
2026-11-01Best Practicesai-coding-harness agent-guidance drizzle api react pnpm css offline embedding soft-deleteguidance
2026-11-01Corepacksystem-design monorepo pnpmspec
2026-11-01dotenv CLIsystem-design config clispec
2026-11-01Edge Runtimesystem-design security supabasespec
2026-11-01Env Vars in Turbo JSONsystem-design monorepo turborepo vercelspec
2026-11-01Flat Configsystem-design code-quality-check eslintspec
2026-11-01Force Dynamicsystem-design nextjs supabasespec
2026-11-01GraphQL and Relaysystem-design api graphql relayspec
2026-11-01Installation at Workspace Levelsystem-design code-quality-check typescript pnpmspec
2026-11-01Living Implementation Planplan living-plan taxila zinsser alter-ego war-room factory parrot core-driveplan
2026-11-01Module Resolution: Bundlersystem-design code-quality-check typescriptspec
2026-11-01Profile Creation Postgres Triggersystem-design security postgresql api authenticationspec
2026-11-01Public API Onlysystem-design api rls authentication clispec
2026-11-01tsupsystem-design code-quality-check eslintspec
2026-11-01Turboreposystem-design monorepo turborepo pnpmspec
2026-11-01Architectural OverviewSidekick's architectural overview — an API-first platform tuned for solo developerssidekick project technical architecturedocument
2026-10-31Build mind palaceprd value-proposition specificationprd
2026-10-31Exponential Evolutionprd value-proposition specificationprd
2026-10-31Remember everythingprd value-proposition specificationprd
2026-10-31Entities and the Entity Indexprd feature synergyprd
2026-10-31Foundationsprd feature synergyprd
2026-10-31Keeping Links Trueprd feature synergyprd
2026-10-31Sneak Peek Linkprd feature synergyprd
2026-10-30Search and Backlinksprd feature synergyprd
2026-10-30Tagsprd feature synergyprd
2026-10-29Cost to Add Laterprinciple product engineeringguidance
2026-10-27Individual Firstprinciple productguidance
2026-10-27One Interfaceprinciple api cliguidance
2026-10-24Gatekeeper Lesson 7 Walkthrough: The Ops Package and Entitlements Grantbuild walkthrough phase-2 feature-system database postgresql cliguidance
2026-10-24Gatekeeper Lesson 8: Close-Outplan phase-2 task guidanceplan
2026-10-24Gatekeeper Walkthroughbuild walkthrough phase-2 api-guard feature-system rls authenticationguidance
2026-10-24Gatekeeper Lesson 3 Walkthrough: Entitlementsbuild walkthrough phase-2 feature-system database drizzle rls postgresql testingguidance
2026-10-24Gatekeeper Lesson 4 Walkthrough: withApiGuardbuild walkthrough phase-2 api-guard rls api authentication testingguidance
2026-10-24Gatekeeper Lesson 5 Walkthrough: Request and Auth-Failure Loggingbuild walkthrough phase-2 api-guard observability eslint testingguidance
2026-10-24Gatekeeper Lesson 6 Walkthrough: /api/health and Guard Verificationbuild walkthrough phase-2 api-guard api nextjs testingguidance
2026-10-24Gatekeeper Lesson 2 Walkthrough: resolveApiCallerbuild walkthrough phase-2 api-guard authentication supabase testingguidance
2026-10-24Gatekeeper Build Rules and Target Designplan phase-2 api-guard rls api authentication typescript guidanceplan
2026-10-24Gatekeeper Lesson 1 Walkthrough: Feature Registrybuild walkthrough phase-2 feature-system typescript monorepo testingguidance
2026-10-24Gatekeeper Lesson 7 (Task 2.10): Dev Entitlement Seed Scriptplan phase-2 task feature-system database postgresqlplan
2026-10-24Front Door: Hardening Walkthroughbuild walkthrough pre-2 rls supabase drizzle postgresql testing eslintguidance
2026-10-24Backlogged / Unplannedplan living-plan backlog feature-system taxila zinsser alter-ego parrot rls supabaseplan
2026-10-24Gatekeeperplan living-plan phase-2 api-guard rls api authentication feature-systemplan
2026-10-24Terminalplan living-plan phase-9 taxila api-guard rls api authentication cliplan
2026-10-24With API Guardsystem-design security api-guard rls api authentication typescriptspec
2026-10-23Gatekeeper Lesson 3 (Tasks 2.8, 2.9): Entitlements Table and getEnabledFeaturesplan phase-2 task feature-system database drizzle rls postgresql testingplan
2026-10-23Gatekeeper Lesson 4 (Tasks 2.2, 2.3): withApiGuard With withRLSplan phase-2 task api-guard rls api security testingplan
2026-10-23Gatekeeper Lesson 5 (Tasks 2.4, 2.5): Request and Auth-Failure Loggingplan phase-2 task api-guard observability eslintplan
2026-10-23Gatekeeper Lesson 6 (Tasks 2.11, 2.12): /api/health and Guard Verificationplan phase-2 task api-guard api nextjs testingplan
2026-10-23Centralizedsystem-design observability api authenticationspec
2026-10-23Database and Securityai-coding database security agent-guidance api-guard rls drizzle api react repository-patternguidance
2026-10-23Error Handlingsystem-design observability api-guard rls supabase api nextjs react aispec
2026-10-23Front Door: Row-Level Security Walkthroughplan phase-1.1 rls database supabase drizzle postgresql api typescriptguidance
2026-10-23Groundwork Checkpoint B Walkthroughbuild walkthrough phase-0 checkpointguidance
2026-10-20Gatekeeper Lesson 2 (Task 2.1): resolveApiCallerplan phase-2 task api-guard authentication supabase nextjsplan
2026-10-18Gatekeeper Lesson 1 (Tasks 2.6, 2.7): FeatureManifest and ALL_FEATURESplan phase-2 task feature-system typescript monorepoplan
2026-10-18Registrysystem-design feature-systemspec
2026-10-17Core Drive to Be Practical and Grounded in Realitysystem-design feature core-drive prdprd
2026-10-17MVP Scopeprd mvp specification core-drive taxila war-room factory alter-ego zinsser parrot api cli native-appprd
2026-10-17An AI Writing Coach and an Appsystem-design prd feature zinsser aiprd
2026-10-17Overview of Taxilasystem-design prd feature taxila ragprd
2026-10-16Front Door: Hardeningplan pre-2 foundation security database testingplan
2026-10-16Server Actionssystem-design nextjs rls api authenticationspec
2026-10-14Profiles Schemasystem-design security rls authenticationspec
2026-10-14Tag Taxonomyai-coding agent-guidance taxonomy discoveryguidance
2026-10-13Anatomy of a Core Drive Entrysystem-design prd feature core-driveprd
2026-10-13Core Drive Stores Personal and Sensitive Informationsystem-design prd feature core-drive taxila graphprd
2026-10-13Core Drive Stores Values Onlysystem-design prd feature core-drive war-room factoryprd
2026-10-13Core Drive to Foster Reflections and Learningssystem-design prd feature core-driveprd
2026-10-13Groundwork: Checkpointsplan phase-0 api nextjs typescript eslint turborepo pnpmplan
2026-10-13Model Routingprd vercel ai embedding routingprd
2026-10-13Overview of Core Drivesystem-design prd feature core-drive factory ai alter-egoprd
2026-10-13Source Attributionprd feature alter-ego aiprd
2026-10-12Command Paletteprd ux specificationprd
2026-10-12MVP Design Objectiveprd ux specificationprd
2026-10-12Be the Best Version of Yourselfprd value-proposition specificationprd
2026-10-12Make the Right Behavior Easierprd value-proposition specificationprd
2026-10-11Solve Problems and Build Thingsmotivation creativityjournal
2026-10-11A Personal Discoverymotivation discipline bucket-list ambition entrepreneurship sidekickjournal
2026-10-11Commercialize Sidekickmotivation finance freedomjournal
2026-10-10Realityprinciple reality pragmatism survivalguidance
2026-10-10Seek Closureprinciple productivity happiness purposeguidance
2026-10-08No Do-Oversprinciple core-drive execution productivityguidance
2026-10-08Pragmatismprinciple practical pragmaticguidance
2026-10-04Protect Your Mind and Your Timeprinciple productivity automation minimalismguidance
2026-10-03Focus Funnelprinciple core-drive productivityguidance
2026-10-02Fuel Career Growthmotivation career ambitionjournal
2026-10-02Learnmotivation learning ai ragjournal
2026-09-19Actual Stateglossary terminologyglossary
2026-09-19Algorithm of Lifeglossary terminology nextjsglossary
2026-09-19Alter Egoplan living-plan phase-6 taxila zinsser alter-ego war-room factory core-driveplan
2026-09-19Alter Egosystem-design prd feature taxila alter-ego factory aiprd
2026-09-19API Firstsystem-design api clispec
2026-09-19Architectural Driverssystem-design offlinespec
2026-09-19Architecture Invariantsai-coding architecture invariant agent-guidance api nextjsguidance
2026-09-19Asynchronoussystem-design rag embeddingspec
2026-09-19Atomicsystem-design rag embeddingspec
2026-09-19Authenticationsystem-design security taxila api authentication pwa mobile clispec
2026-09-19Background Jobssystem-design vercel background-jobspec
2026-09-19Build for Today, Designed for Futuresystem-design offlinespec
2026-09-19Bundle Everythingsystem-design monorepospec
2026-09-19Capacitorsystem-design native-app nextjs mobile offlinespec
2026-09-19Centralizedsystem-design feature-systemspec
2026-09-19Centralized and Client-Agnosticsystem-design security rls api authentication clispec
2026-09-19CLIsystem-design cli apispec
2026-09-19Context Assemblersystem-design ai war-room factory api-guardspec
2026-09-19Coresystem-design feature-systemspec
2026-09-19Core Drive and Taxilasystem-design prd feature taxila core-driveprd
2026-09-19Driving Forces and Key Featuressystem-design api offlinespec
2026-09-19Embedding Status Fieldsystem-design rag embedding typescriptspec
2026-09-19Enforced Conventionssystem-designspec
2026-09-19Essential and Ideal Stateglossary terminologyglossary
2026-09-19Evolvabilitysystem-design rls offlinespec
2026-09-19Factorysystem-design prd feature factoryprd
2026-09-19Feature Package Workai-coding feature monorepo agent-guidance feature-systemguidance
2026-09-19Front Doorplan living-plan phase-1 api-guard rls supabase drizzle postgresql apiplan
2026-09-19Front Door Task 1.1plan phase-1 task supabase postgresql api authentication nextjsplan
2026-09-19Front Door Task 1.10plan phase-1 task rls supabase drizzle postgresql authentication typescriptplan
2026-09-19Front Door Task 1.11plan phase-1 task api-guard rls supabase api authentication nextjsplan
2026-09-19Front Door Task 1.14plan phase-1 task react pnpm mantine cssplan
2026-09-19Front Door Task 1.17plan phase-1 task supabase authenticationplan
2026-09-19Front Door Task 1.18plan phase-1 task api-guard rls supabase drizzle postgresql authenticationplan
2026-09-19Front Door Task 1.2plan phase-1 task supabase drizzle postgresql authentication nextjs pnpmplan
2026-09-19Front Door Task 1.3plan phase-1 task supabase nextjs typescriptplan
2026-09-19Front Door Task 1.4plan phase-1 task supabase authentication nextjs react typescriptplan
2026-09-19Front Door Task 1.5plan phase-1 task rls supabase authentication typescriptplan
2026-09-19Front Door Task 1.6plan phase-1 task rls supabase drizzle authentication typescript offlineplan
2026-09-19Front Door Task 1.7plan phase-1 task drizzle postgresql typescriptplan
2026-09-19Front Door Task 1.8plan phase-1 task turborepo pnpmplan
2026-09-19Front Door Task 1.9plan phase-1 task rls supabase drizzle postgresql authenticationplan
2026-09-19Front Door Tasks 1.12 and 1.13plan phase-1 task supabase api authentication nextjs react typescriptplan
2026-09-19Front Door Tasks 1.15 and 1.16plan phase-1 task supabase authentication nextjs react mantineplan
2026-09-19Front Door: Original Planplan phase-1 rls supabase drizzle postgresql authentication nextjsguidance
2026-09-19Front Door: Row-Level Securityplan living-plan phase-1.1 rls supabase drizzle postgresql pnpm soft-deleteplan
2026-09-19Groundworkplan living-plan phase-0 nextjs typescript eslint prettier turborepo pnpmplan
2026-09-19Groundwork Checkpoint Aplan phase-0 checkpoint nextjs typescript turborepo pnpm cliplan
2026-09-19Groundwork Checkpoint Bplan phase-0 checkpoint eslint prettier turborepo pnpmplan
2026-09-19Groundwork Checkpoint Cplan phase-0 checkpoint nextjs pnpmplan
2026-09-19Groundwork Checkpoint Dplan phase-0 checkpoint api-guard rls supabase drizzle api authenticationplan
2026-09-19Historic Stateglossary terminologyglossary
2026-09-19Idempotent APIsystem-design api idempotencyspec
2026-09-19Independent Deploymentssystem-design feature-systemspec
2026-09-19Informationglossary terminologyglossary
2026-09-19Instrumentationsystem-design observability vercel embeddingspec
2026-09-19Isolationsystem-design feature-systemspec
2026-09-19Lifecycle and Traceabilityprd governance planningguidance
2026-09-19Many Clients and Many Consumerssystem-design api pwa ai rag clispec
2026-09-19May Become Part of Taxilasystem-design core-drive taxilaspec
2026-09-19Middlewaresystem-design security api authenticationspec
2026-09-19Migrationsystem-design database drizzle pnpmspec
2026-09-19Model Router Contractsystem-design ai model-routing provider-agnostic embeddingspec
2026-09-19Never Mutate Outside API Layersystem-design apispec
2026-09-19Notesai-coding-harness agent-guidance nextjs eslint pnpm cssguidance
2026-09-19Observabilitysystem-design api-guard api authentication vercel observabilityspec
2026-09-19Observablesystem-design rag embedding observabilityspec
2026-09-19Offline Readysystem-design api pwa offline soft-delete idempotencyspec
2026-09-19Open Houseplan living-plan phase-11plan
2026-09-19Parrotsystem-design prd feature parrotprd
2026-09-19Pocketplan living-plan phase-8 taxila alter-ego nextjs vercel pwa mobileplan
2026-09-19Prefer JSON Configsystem-design monorepospec
2026-09-19Present Stateglossary terminologyglossary
2026-09-19Productivity Modulesystem-design prd feature war-roomprd
2026-09-19PWAsystem-design pwa offlinespec
2026-09-19RAGsystem-design rag ai embeddingspec
2026-09-19Repository Clientsystem-design database rls supabase drizzle api repository-patternspec
2026-09-19Request Flowsystem-design monorepo api offlinespec
2026-09-19Retryablesystem-design rag embeddingspec
2026-09-19Row-Level Securitysystem-design security rls drizzle offlinespec
2026-09-19Soft-Delete Supportsystem-design database soft-deletespec
2026-09-19Start Todayprinciple core-drive execution consistencyguidance
2026-09-19State Representationsystem-design api aispec
2026-09-19Storefrontplan living-plan phase-12 api offlineplan
2026-09-19Structured Response Attributionsystem-design ai structured-streaming source-attribution citationspec
2026-09-19System Overview Diagramsystem-designspec
2026-09-19Taxilaplan living-plan phase-4 taxila api-guard rls drizzle api authenticationplan
2026-09-19Tiered Context Modelsystem-design core-drive domain situation war-room factory ai embeddingspec
2026-09-19Tiptap Requirementsystem-design rag embeddingspec
2026-09-19Use Navigation Hooksystem-design nextjsspec
2026-09-19War Roomplan living-plan phase-7 war-room factory core-drive rls api offlineplan
2026-09-19Watchtowerplan living-plan phase-10 api-guard rls api authentication nextjs offlineplan
2026-09-19Zinsserplan living-plan phase-5 taxila zinsser api mantine ai embeddingplan
2026-07-19Project Sidekick - A Bird’s Eye ViewAn introduction to Project Sidekick. What is it? What problem does it solve? Why am I building it?sidekick project essaydocument
2026-07-10Building in the Margins of RealityProject kick-off post and a confessional essay about my past attempts and their failures. Why start now? What do I hope to achieve?sidekick project essayjournal
2026-05-29Config Files Explainedbuild walkthrough phase-0 turborepo typescript eslint prettierguidance
2026-05-29Front Door: Original Walkthroughbuild walkthrough phase-1 supabase drizzle authenticationguidance
2026-05-29Groundwork Checkpoint A Walkthroughbuild walkthrough phase-0 checkpointguidance
2026-05-29Groundwork Checkpoint C Walkthroughbuild walkthrough phase-0 checkpointguidance
2026-05-29Groundwork Checkpoint D Walkthroughbuild walkthrough phase-0 checkpointguidance