Arkive

Config Files Explained

As of
Version1.0.0
Kindguidance
Length2,868 words, about 12 min
Tagsbuildwalkthroughphase-0turborepotypescripteslintprettier

A reference guide for every configuration file in the monorepo root. Each section explains what the file does, what each field means, and why it was configured that way.


pnpm-workspace.yaml

YAML
packages:
  - "apps/*"
  - "packages/*"

What this file does

This is pnpm's workspace configuration. It tells pnpm which folders contain workspace packages — packages that are part of this monorepo and should be linked to each other locally rather than downloaded from npm.

Field by field

packages A list of glob patterns pointing to workspace package locations.

  • "apps/*" — every direct subfolder of apps/ is a workspace package (apps/web, apps/cli)
  • "packages/*" — every direct subfolder of packages/ is a workspace package (packages/core, packages/ui, etc.)

The * matches one folder level only. It does not recurse into subdirectories. This is intentional — it means only top-level folders are packages, not nested ones.

What "linking" means in practice

When apps/web lists "@sidekick/core": "workspace:*" in its package.json dependencies, pnpm doesn't download @sidekick/core from npm. Instead it creates a symlink from apps/web/node_modules/@sidekick/core directly to packages/core on your machine. Changes to packages/core are immediately reflected in apps/web without any publish step.


turbo.json

JSON
{
  "$schema": "https://turbo.build/schema.json",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {
      "dependsOn": ["^lint"]
    },
    "typecheck": {
      "dependsOn": ["^typecheck"]
    }
  }
}

What this file does

This is Turborepo's pipeline configuration. It defines four tasks (build, dev, lint, typecheck) and tells Turbo how to run them across the monorepo — what order, what to cache, and how long they run.

Field by field

$schema A URL to the Turborepo JSON schema. This enables autocompletion and validation in editors like VS Code. It has no effect at runtime.

tasks A map of task names to their configuration. Each task name corresponds to a script that must exist in a package's package.json for Turbo to run it in that package.


build.dependsOn: ["^build"] The most important field in the file. The ^ prefix means "run this task in my upstream dependencies before running it in me."

Example: apps/web imports from packages/core. When you run pnpm turbo build:

  1. Turbo sees this dependency
  2. It runs build in packages/core first
  3. Only after packages/core finishes does it run build in apps/web

Without ^build, Turbo might try to build apps/web before packages/core has compiled, causing import errors.

build.outputs: ["dist/**", ".next/**"] Tells Turbo which files are the result of a build. Turbo hashes these folders to detect whether a cached result is still valid. If the source files haven't changed and these output folders already exist, Turbo skips the build entirely and restores from cache.

build.env: [...] Declares which environment variables affect the build output. Turbo includes these variable values in its cache hash alongside source files. If a listed variable changes, the cache is invalidated and the app rebuilds — even if no source files changed.

This is critical for correctness on Vercel. Without it, changing NEXT_PUBLIC_APP_URL in the Vercel dashboard would have no effect until a source file also changed, because Turbo would serve the stale cached build. Vercel warns loudly during deployment if environment variables are set in the dashboard but not declared here.


dev.cache: false Disables caching for the dev task. Dev servers are long-running and stateful — caching their "output" makes no sense. Without this, Turbo would try to cache the result of a server that never finishes.

dev.persistent: true Marks this as a long-running task that never exits on its own (a dev server). Turbo uses this to manage the task lifecycle correctly — it won't wait for dev to finish before considering the pipeline done.


lint.dependsOn: ["^lint"] Same ^ pattern as build — lint dependencies before linting dependents. This ensures that if packages/core has a lint error, you see it before linting apps/web.

typecheck.dependsOn: ["^typecheck"] Same pattern. Type-check shared packages before the apps that import them, so type errors in dependencies surface in context.


Root package.json

JSON
{
  "name": "sidekick",
  "private": true,
  "version": "0.0.0",
  "packageManager": "[email protected]+sha512.abc...",
  "scripts": {
    "build": "turbo build",
    "dev": "turbo dev",
    "lint": "turbo lint",
    "typecheck": "turbo typecheck"
  },
  "devDependencies": {
    "turbo": "^2.5.6"
  }
}

What this file does

This is the root package descriptor for the entire monorepo. It is not a publishable package — it's the orchestration layer that wires together pnpm, Turborepo, and the workspace scripts.

Field by field

name: "sidekick" The name of this package. At the root level this is mostly informational. Individual workspace packages use scoped names like @sidekick/core.

private: true Prevents this package from ever being accidentally published to npm. Every package in this monorepo that isn't intended for public distribution should have this set to true.

version: "0.0.0" The version of this root package. Since it's private and never published, the version is a placeholder. Individual packages will have meaningful versions when they're ready for release.

packageManager: "[email protected]+sha512.abc..." This field is read by Corepack — Node's built-in package manager manager. It enforces two things:

  1. Only pnpm can be used to install packages in this repo (not npm or yarn)
  2. Only exactly version 11.0.8 of pnpm can be used

The +sha512. suffix is a cryptographic hash of the pnpm binary. Corepack verifies this hash when downloading pnpm, preventing tampered binaries. This is the most secure form of the field.

scripts Four root-level scripts, each delegating to Turborepo:

  • build → runs turbo build across all packages in dependency order
  • dev → starts all dev servers (primarily apps/web)
  • lint → runs ESLint across all packages
  • typecheck → runs TypeScript type-checking across all packages

These scripts exist at the root so you can run pnpm build or pnpm dev from anywhere in the repo without cd-ing into individual packages.

devDependencies Only turbo lives here. Everything else (TypeScript, ESLint, Next.js, etc.) is a dependency of individual workspace packages, not the root. This keeps the root lean — it's a coordinator, not an application.


tsconfig.json (per package)

Each package has its own tsconfig.json. The packages/* and apps/cli packages share this shape:

JSON
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022",
    "moduleResolution": "bundler",
    "strict": true,
    "skipLibCheck": true,
    "outDir": "dist"
  },
  "include": ["src"]
}

Field by field

target: "ES2022" The JavaScript version TypeScript compiles output to. ES2022 is supported by all modern browsers released in the last 3 years (Chrome, Firefox, Safari, Edge). It excludes Internet Explorer and legacy mobile browsers entirely — intentionally.

Choosing ES2022 over the older default (ES5 or ES2017) means TypeScript doesn't need to generate compatibility shims for modern syntax like class fields, Object.hasOwn(), or top-level await. The output is closer to what you wrote, smaller, and more readable.

module: "ES2022" Controls the module format of the compiled output. ES2022 preserves import/export syntax in the output rather than converting it to require() (CommonJS). Modern bundlers like Next.js and Vite expect ES module syntax and can tree-shake it more effectively.

moduleResolution: "bundler" Tells TypeScript how to resolve import paths. The "bundler" strategy matches how modern bundlers actually work:

  • You can import without file extensions (import { foo } from './foo' instead of './foo.js')
  • It supports the exports field in package.json (used by many modern packages to provide different entry points for different environments)

Use "bundler" whenever your code runs through a bundler (Next.js, Vite, etc.) rather than directly in Node.js.

strict: true Enables the full set of TypeScript's strict type checks in one flag. The two most impactful ones it enables:

  • strictNullChecks — null and undefined are not automatically assignable to every type. You must explicitly handle them. This prevents the most common class of runtime crashes: Cannot read properties of null/undefined.
  • noImplicitAny — TypeScript won't silently infer the any type. Every value must have a known type. This forces you to be explicit and prevents type information from silently escaping.

This should always be true in a production codebase. The cost is a small amount of upfront discipline. The payoff is catching entire categories of bugs before they reach production.

skipLibCheck: true Skips type-checking inside node_modules. Third-party packages sometimes ship with imperfect or incompatible type definitions. Without this flag, their type errors would block your own build. Since you can't fix type errors in third-party packages, skipping them is the right call.

outDir: "dist" Where TypeScript writes compiled .js files when running tsc (the build script). Each package compiles into its own dist/ folder. Other packages that depend on this package import from dist/ at runtime.

include: ["src"] Only compile files inside the src/ folder. Without this, TypeScript would scan the entire package directory including node_modules, dist, test artifacts, and config files — causing errors and dramatically slower builds.


apps/web/tsconfig.json

apps/web has a different shape because Next.js manages compilation itself (via SWC, its built-in compiler). TypeScript's role in apps/web is type-checking only, not compilation.

JSON
{
  "compilerOptions": {
    "target": "ES2017",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "react-jsx",
    "incremental": true,
    "plugins": [{ "name": "next" }],
    "paths": { "@/*": ["./src/*"] }
  }
}

Fields unique to apps/web:

lib: ["dom", "dom.iterable", "esnext"] Declares which built-in APIs are available in this environment. dom provides browser globals like document, window, fetch. dom.iterable adds iteration support for DOM collections like NodeList. esnext provides the latest JavaScript standard library types. Without these, TypeScript wouldn't know what document.querySelector() or fetch() are.

noEmit: true TypeScript will never write any output files from apps/web. Next.js (via SWC) handles all compilation. TypeScript is purely a type-checker here. This is why apps/web has no outDir field.

esModuleInterop: true Allows writing import React from 'react' instead of import * as React from 'react'. This smooths over the difference between CommonJS packages (which use module.exports) and ES modules (which use export default). Effectively required for any project using React and most npm packages.

resolveJsonModule: true Allows importing .json files directly: import config from './config.json'. TypeScript infers the type from the JSON structure automatically.

isolatedModules: true Requires every file to be a standalone ES module (must have at least one import or export). This is required by SWC and other single-file transpilers that compile each file independently without full program awareness. It prevents certain TypeScript patterns (like const enum) that require cross-file analysis to work correctly.

jsx: "react-jsx" Controls how JSX syntax (<Component />) is transformed. "react-jsx" uses the modern React 17+ JSX transform, which means you no longer need to write import React from 'react' at the top of every file that uses JSX. React is automatically in scope for JSX transformation.

incremental: true Saves a type-check cache to a .tsbuildinfo file. On subsequent runs, TypeScript only re-checks files that have changed, making typecheck significantly faster in large projects.

plugins: [{ "name": "next" }] Loads the official Next.js TypeScript language service plugin. This provides enhanced IDE features specific to Next.js: warnings when you use server-only APIs in Client Components, better autocomplete for Next.js exports like metadata and generateStaticParams, and hints about the App Router conventions.

paths: { "@/*": ["./src/*"] } Creates an import alias. import { Button } from '@/components/Button' resolves to ./src/components/Button. This avoids long relative paths like ../../../components/Button when importing from deeply nested files. The @/ prefix is the Next.js convention and is understood by the framework automatically.


tsconfig.base.json

JSON
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022",
    "moduleResolution": "bundler",
    "strict": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "resolveJsonModule": true
  }
}

What this file does

This is the shared TypeScript configuration that every package in the monorepo extends. Rather than repeating the same compiler options in every tsconfig.json, packages extend this base and only declare what's unique to them.

Why it lives at the root

All packages are two levels deep (apps/web, packages/core, etc.). Each one references the base via "extends": "../../tsconfig.base.json". Placing it at the root makes this path consistent across all packages.

What goes in the base vs. individual packages

The base contains settings that are identical everywhere:

  • target, module, moduleResolution — the JS output format
  • strict — always on across the whole codebase
  • skipLibCheck — always skip third-party type errors
  • esModuleInterop, resolveJsonModule — universally useful helpers

Individual packages only declare what differs:

  • packages/* and apps/cli add outDir: "dist" (they compile to JS)
  • apps/web adds Next.js-specific options (noEmit, jsx, plugins, paths, etc.)

.prettierrc.json

JSON
{
  "semi": false,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 100,
  "arrowParens": "always",
  "quoteProps": "consistent"
}

What this file does

Prettier is a code formatter — it rewrites your code to follow consistent style rules automatically. This config defines those rules for the entire monorepo.

Field by field

semi: false No semicolons at the end of statements. Modern JavaScript doesn't require them and their absence reduces visual noise.

singleQuote: true Use 'single quotes' for strings instead of "double quotes". Consistent with most modern JS/TS codebases.

tabWidth: 2 Indent with 2 spaces. The standard for JavaScript/TypeScript.

trailingComma: "all" Add trailing commas after the last item in objects, arrays, and function parameters. This makes git diffs cleaner — adding a new item only shows one changed line instead of two (the new item plus a comma added to the previous last item).

printWidth: 100 Wrap lines at 100 characters. The default 80 is too narrow for modern monitors and leads to excessive line breaks in TypeScript with long type signatures.

arrowParens: "always" Always wrap arrow function parameters in parentheses: (x) => x instead of x => x. This is consistent — when you add a second parameter, the style doesn't change.

quoteProps: "consistent" If any key in an object literal needs quotes, quote all of them. Prevents the mixed style { foo: 1, "bar-baz": 2 }.

How to use it

  • pnpm format — rewrites all files to match the rules (run before committing)
  • pnpm format:check — checks without rewriting (used in CI to fail unformatted code)

eslint.config.js

JavaScript
import boundaries from "eslint-plugin-boundaries"
import { defineConfig } from 'eslint/config'
import tseslint from "typescript-eslint"
import js from "@eslint/js"

export default defineConfig(
  js.configs.recommended,
  ...tseslint.configs.recommended,
  {
    plugins: { boundaries },
    settings: {
      "boundaries/elements": [
        { type: "app-elements", pattern: "apps/*" },
        { type: "package-elements", pattern: "packages/*" },
      ],
    },
    rules: {
      'boundaries/no-unknown': 'error',
      'boundaries/element-types': [
        'error',
        {
          default: 'disallow',
          rules: [
            { from: 'app-elements', allow: ['app-elements', 'package-elements'] },
            { from: 'package-elements', allow: ['package-elements'] },
          ],
        },
      ],
    },
  },
  {
    ignores: ['**/node_modules/**', '**/dist/**', '**/.next/**', '**/.turbo/**'],
  },
)

What this file does

This is the ESLint configuration for the entire monorepo. ESLint is a linter — it analyzes code for potential errors, style violations, and architectural rule breaches without running the code.

Why .js and not .json

ESLint 9 uses a new "flat config" format that requires a JavaScript file. There is no JSON alternative. This is the one exception to the project's preference for JSON config files.

Structure breakdown

defineConfig(...) ESLint 9's canonical function for composing a flat config. Takes any number of config objects and merges them correctly.

js.configs.recommended Standard JavaScript lint rules from ESLint itself — catches things like unused variables, unreachable code, and no-undef.

...tseslint.configs.recommended TypeScript-aware lint rules — catches TypeScript-specific issues like unsafe any usage, missing return types where inferred types would be too broad, and incorrect generic usage.

boundaries/elements Defines the two "element types" that exist in this repo:

  • "app-elements" — any folder matching apps/*
  • "package-elements" — any folder matching packages/*

boundaries/element-types The critical architectural rule. With default: 'disallow', all cross-element imports are blocked unless explicitly allowed:

  • app-elements can import from app-elements or package-elements ✅
  • package-elements can only import from package-elements ✅
  • package-elements importing from app-elements → ESLint error ❌

This enforces the dependency direction rule at the tooling level, not just by convention.

ignores Tells ESLint which paths to skip entirely — generated files, build outputs, and caches that don't need linting.


apps/web/next.config.ts

TypeScript
import type { NextConfig } from "next"
import path from "node:path"

const nextConfig: NextConfig = {
  turbopack: {
    root: path.resolve(__dirname, "../.."),
  },
}

export default nextConfig

What this file does

This is the Next.js application configuration. It's evaluated by Next.js at build time and dev server startup.

Field by field

turbopack.root Tells Next.js/Turbopack where the monorepo root is. Without this, Next.js guesses by scanning for lockfiles up the directory tree — which can produce incorrect results if there are stray lockfiles in parent directories.

path.resolve(__dirname, "../..") resolves to an absolute path: apps/web → apps → monorepo root. This is deterministic regardless of where the build runs.

Why node:path instead of path The node: prefix is the explicit Node.js built-in module prefix. It's unambiguous — it can never be shadowed by an npm package named path. A best practice in modern Node.js code.


.env.example

Shell
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
DATABASE_URL=
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
NEXT_PUBLIC_APP_URL=

What this file does

Documents every environment variable the application needs. It contains no real values — only variable names and comments. It is committed to git and serves as living documentation.

.env.local vs .env.example

FileCommitted?Contains
.env.exampleYesVariable names + documentation, no values
.env.localNo (gitignored)Real values for local development

NEXT_PUBLIC_ prefix

Variables prefixed with NEXT_PUBLIC_ are embedded into the browser JavaScript bundle at build time. They are visible to anyone who inspects the page source. Never put secrets in NEXT_PUBLIC_ variables.

Variables without this prefix are server-only — they exist in the Node.js process and are never sent to the browser. API keys, database URLs, and service role keys must never have the NEXT_PUBLIC_ prefix.

Arkive

Index

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

Tags (137)

View

233 entries.

As ofTitleKind
2026-11-01Decisions Logdecisionlog
2026-11-01Synergy Checkpoint 3a: Prove the Store, Plan 3bplan phase-3 checkpoint guidanceplan
2026-11-01Synergy Lesson 1: Layer Folders and Lintplan phase-3 task monorepo eslintplan
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-01Synergy: System Designsystem-design synergyspec
2026-11-01Testing Layerssystem-design testing vitest playwrightspec
2026-11-01Synergy - Feature Specificationsprd spec synergyprd
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-01Agent Guideai-coding agent gateway agent-guidance rls supabase drizzle api react prettierguidance
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-01Centralized Copysystem-design contentspec
2026-11-01Corepacksystem-design monorepo pnpmspec
2026-11-01CSS Modulessystem-design css eslint mantinespec
2026-11-01Dependency Flowsystem-design monorepo clispec
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-01ESLint Plugin Boundariessystem-design code-quality-check eslintspec
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-01Module Resolution: Bundlersystem-design code-quality-check typescriptspec
2026-11-01Prettier at Repo Levelsystem-design code-quality-check prettierspec
2026-11-01Profile Creation Postgres Triggersystem-design security postgresql api authenticationspec
2026-11-01Public API Onlysystem-design api rls authentication clispec
2026-11-01Runtime Validationssystem-design typescriptspec
2026-11-01Shared tsconfigsystem-design code-quality-check typescriptspec
2026-11-01Synergyplan living-plan phase-3 synergy rls postgresql api graphplan
2026-11-01tsupsystem-design code-quality-check eslintspec
2026-11-01Turboreposystem-design monorepo turborepo pnpmspec
2026-11-01Vercelsystem-design monorepo turborepo pnpm vercelspec
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-27Overview of Synergyprd feature synergyprd
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-24Commands and Environmentai-coding command environment agent-guidance prettier pnpm cliguidance
2026-10-24Gatekeeperplan living-plan phase-2 api-guard rls api authentication feature-systemplan
2026-10-24Living Implementation Planplan living-plan taxila zinsser alter-ego war-room factory parrot core-driveplan
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-19Approve Buildssystem-design monorepo nextjs pnpmspec
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-19Mantinesystem-design css mantinespec
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-19Non-Syncable Tablessystem-design database offlinespec
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-19Syncable Tablessystem-design database offline soft-deletespec
2026-09-19System Overview Diagramsystem-designspec
2026-09-19Taxilaplan living-plan phase-4 taxila api-guard rls drizzle api authenticationplan
2026-09-19Technology Stacksystem-design supabase drizzle postgresql nextjs typescript turborepo pnpm vercelspec
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-08-24Architectural OverviewSidekick's architectural overview — an API-first platform tuned for solo developerssidekick project technical architecturedocument
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 ExplainedReadingbuild 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