Arkive

Synergy - Feature Specifications

As of
Version0.1.0
Kindprd, for everyone
Length3,259 words, about 14 min
Tagsprdspecsynergy

The build-facing spec for Synergy's Phase 3. The why, and the full detail of each rule, live in the PRD starting at Overview of Synergy. Decisions trace to the tickets on the map.

Problem Statement

Each Sidekick module holds a different kind of information, and the value comes from connecting them. Today nothing connects them. A War Room plan that relies on a Taxila note can't link to it in a way that survives: when the note is rewritten, deprecated or replaced, the plan keeps reading as well-founded and nobody is told. The only way to reuse a fact is to copy it, and copies drift apart. Nothing can say who relies on an entry before it is changed or deleted, and nothing finds entries across modules by title, type or tag. Bots, jobs and agents have no structured way to read or make these connections at all.

Solution

Synergy is a substrate in packages/core that every module builds on. Any entity in any module can link to any other through a stored relationship, with an optional label and type. Each reference remembers the target's version and revision when it was made and reports, when read, whether the target was edited, changed, deprecated, superseded, deleted or locked. A referenced entity can't be deleted, and reference cycles are refused. Tags (flat or key:value) apply to entities and relationships. A Rich Live Link component shows any relationship inline, as a card, as a live preview or as a minimal label, with the owning module supplying the content through a registered renderer. Search covers titles and metadata across modules, and every entity can list who references it. People, bots, jobs and agents all use the same guarded API.

Phase 3 proves all of this on two mock modules, notes and tasks, and a playground page where the owner can see real relationships, tags, fields and links rendered on mock entities.

User Stories

A prefix in brackets names the only actors a story applies to. A story without one applies to the user.

Entities

  1. Every entity in every module is linkable.
  2. Every field a user fills in is optional. A one-sentence note never needs more metadata than content.
  3. An entity without a title appears by a short name taken from its content.
  4. Mark a save as a new version when the change may invalidate what others built on it.
  5. Ordinary saves (typos, formatting, additions) count as revisions only.
  6. Add an optional one-line change note to a new version.
  7. Deprecate an entity. It stays readable.
  8. Supersede an entity with a newer one. Referencers are pointed at the replacement.
  9. Superseding first confirms how many entities reference the old one.
  10. Only content edits (title, body, blurb) bump the version or revision. Status, tags and metadata never do.

Relationships

  1. Link one entity to another. The connection is stored, never copied.
  2. Give a link an optional label that says what the target answers ("Why?").
  3. Give a link an optional type from the starter vocabulary.
  4. An untyped link counts as a reference.
  5. Associations (related-to, inspired-by, next, contradicts) never go stale and never block anything.
  6. Backlinks show each type by its inverse name ("explains", "source of").
  7. Link the same pair more than once, in the same direction, with different labels.
  8. Make a list link: several ordered targets under one label ("Why? guilt, new ideas, perfectionism").
  9. Reorder the members of a list link.
  10. Tag a relationship.
  11. Delete a link at any time.
  12. The link picker greys out entries that would close a reference loop ("would create a loop") and offers to mention the existing link instead.
  13. (bot, agent) A request that would close a reference loop is refused with the chain named.
  14. Mention one link from both of its entities, as often as needed. It stays one relationship.
  15. (target's author) Mentions of a link its source removed show "No longer linked" until dismissed or relinked.
  16. Undoing an unlink restores the same link. Linking the pair again later creates a new one, and old mentions can be relinked to it.
  17. Linking into a module the account doesn't have is refused.

Tags

  1. Tag any entity with flat or key:value tags.
  2. Tags are lowercased automatically. Anything else is rejected with a hint.
  3. Autocomplete suggests the keys already in use and the keys Sidekick ships.
  4. Rename a tag once; it changes everywhere.
  5. Merge one tag into another. The old name then suggests and applies the merged tag.
  6. Deprecate a tag or a relation type. Existing uses stay; new ones are refused.
  7. (agent) Suggest tags. They wait for approval unless the user turns on auto-accept.

Keeping links true

  1. A link whose target was edited since it was made shows a standard-colour dot.
  2. A link whose target has a new version shows a red dot, and the change note where there's room.
  3. A link shows its target's single status: active, deprecated, superseded or deleted.
  4. A deleted target keeps its name as plain, unclickable text.
  5. A link into a module the account no longer has shows name, type and status, and no content.
  6. (source's author) Mark a changed link "still holds" to clear its dot.
  7. (source's author) Point a link at the entry that superseded its target.
  8. (source's author) Unlink a stale link.
  9. Deleting an entity that others reference is refused with the referencer count. Deprecate or supersede it instead.
  10. Deleting a source removes its outgoing links, which can free its targets.
  11. Restore brings back exactly what a delete removed and never touches the version.
  12. Permanent erasure overrides the delete block and leaves referencers a "permanently removed" placeholder.
  13. Links into a disabled module stay as they are until it is re-enabled or the link is removed.

Anchored links

  1. Select a word, sentence or paragraph and link it.
  2. Point a link at a passage of its target: a paragraph, sentence or word.
  3. The editor marks passages that others reference.
  4. Deleting a referenced passage offers keep, save as a new version, or supersede.
  5. Editing a referenced passage asks whether it is a new version.
  6. A link whose passage was removed in a new version shows the red dot and "passage removed" until its author re-anchors it, widens it to the whole entity, or unlinks.
  7. Removing a link from an entry counts as a revision of that entry.

Rich Live Link

  1. Choose per link: inline, card or live preview.
  2. Inline reads {title} ({type}) - [{status}], followed by any dot.
  3. A labeled or text-anchored link shows only its label, with a red dot when the target needs attention.
  4. A card shows the title, an excerpt and module fields.
  5. A live preview shows the whole current target in place.
  6. Links inside a live preview render inline. Previews never nest.
  7. (developer) Register a renderer for an entity type. The component calls it wherever that type is linked.
  8. Renderers are async and batched: one call per module per page.
  9. Loading, error and empty states look the same for every module.
  10. Links are real links in focus order. The dots have text equivalents and differ in shape as well as colour.
  11. Long lists of links or backlinks load more as the reader scrolls.
  12. (third-party app) Show a Sidekick link as a card or live preview through the public API.
  13. (developer) Add a new linkable type (a Twitter thread, a news article) by registering its resolver and renderer, without changing core.

Search and backlinks

  1. Search every module by title, type, module, status and tag.
  2. Search tolerates typos and partial words: "dep wor" finds "deep work".
  3. See everything that references an entry, with labels and types.
  4. Backlinks and search results page.

Machines

  1. (bot, job, agent) Use the same guarded API that Sidekick's own screens use.
  2. (bot, agent) Get each resolved link as structured data: relationship, target fields, state and marks.
  3. (bot, agent) Retry a create safely with an idempotency key.
  4. (bot, agent) Get stable error codes: delete_blocked with the referencer count, passage_referenced, cycle, locked, and stale-revision conflicts.
  5. Every write records who made it (a person, the system, an agent or an API key) and why.
  6. A save from a stale copy is refused, whether it comes from a second tab or, later, a second person.

Playground (Phase 3 only)

  1. A playground page lists mock notes and tasks.
  2. Create, edit, version, deprecate, supersede and delete mock entities.
  3. Add relationships of every type, with labels, list links and tags.
  4. Each mock entity shows its fields, tags, outgoing links and backlinks.
  5. The same link shows in all four display types side by side.
  6. Switch the mock modules' entitlement off and on to watch links lock and come back.
  7. The playground and mock modules sit behind a sandbox entitlement that real users never hold.

Implementation Decisions

Modules

  • packages/core gains the Synergy store: entity index, version log, relationships (single and list in one table), relation-type vocabulary, tags and tag applications, an outbox, and a repository that is the only access path. It also gains the resolver and renderer registries and the render cache interface. It takes feature keys as data and never imports the feature registry (see research 05).
  • A Rich Live Link component in the shared UI package, owning the frame and the states. Renderers supply content. It is host-agnostic: data and the caller's credentials come in as inputs, with no app-wide context, so third parties can use it later.
  • Guarded API routes in the web app for entities' Synergy fields, relationships, tags, search, backlinks and link resolution, all through withApiGuard.
  • Mock note and task modules in packages/ops, behind a sandbox entitlement granted with the existing ops script. Each registers an entity type, a resolver and a renderer. They retire with ops; their renderers stay as test fixtures.
  • A playground page in the web app, behind the same sandbox entitlement, built only on the public API and the Rich Live Link component. Plain, unstyled HTML: forms, textareas, lists, buttons and the raw API response beside each result. No rich-text editor, modals, hovers or styling; just enough to test the responses and check readiness against the PRD.

Schema

  • Entity index: id (client UUID), owner, module (feature key), type, display name, optional title, status (active, deprecated, superseded, deleted), version, revision, created, updated, deleted.
  • Version log: entity, version, optional change note, actor, time.
  • Relationships: id, owner, from, to (empty on a list header), parent (list members), position, optional label, optional type, version and revision snapshot, from_anchor, to_anchor, actor, timestamps, soft delete with actor and reason (a tombstone, so mentions can explain why a link is gone and undo can restore it).
  • Relation types: name, inverse name, kind (reference or association), status (active or deprecated), system flag. Seeded with the starter vocabulary: derived-from/source-of, cites/cited-by, supported-by/evidence-for, explained-by/explains, inspired-by/inspiration-for, next/previous, related-to, contradicts, supersedes/superseded-by.
  • Tags: id, owner, name (one optional key: prefix), description, status, alias-of. A check constraint enforces lowercase ASCII letters, digits, dashes and at most one colon. Tag applications link a tag to an entity or a relationship.
  • Outbox: event type (entity changed, version bumped, status changed, relationship created or deleted), subject, actor, time, payload. Written in the same transaction as the change. Nothing consumes it in Phase 3.
  • Every table: client-generated UUIDs, updated_at, soft delete, actor on writes, and RLS comparing the uuid column directly to nullif(current_setting('app.current_user_id', true), '')::uuid. Phase 3 also rewrites the existing policies in migrations 0002 and 0007, which cast the column to text.
  • Indexes on to (backlinks), (to, to_anchor) for the passage check, from, (parent, position), tag applications by tag, index rows by owner and status, and a trigram index on display names.

Rules

  • Staleness is computed on read by comparing the relationship's snapshot with the index row. Nothing is written to referencers when a target changes.
  • A red dot when the version moved; otherwise a standard-colour dot when the revision moved. Dots follow the status, differ in shape as well as colour, and carry text equivalents. Minimal links show the red dot for changed, deprecated, superseded or deleted, and nothing for edited.
  • Only title, body and blurb bump counters. Tags, metadata and status never do. Removing an association because its target passage was deleted bumps the source's revision with a system actor and reason.
  • Delete is refused while any reference points at the entity. Associations don't count. Erasure overrides and leaves a placeholder.
  • A reference may not close a cycle. The server checks reachability under a per-user lock in the same transaction as the insert. A recursive query is the starting point; the closure table or depth cap waits for measurements.
  • Creating supersedes marks the target superseded after a confirmation step that reports the referencer count.
  • Locked, redacted and deleted are decided on the server, before any resolver runs, using the same entitlement check as withApiGuard.
  • A mention is a mark in an entity's content carrying one relationship id. A relationship may have any number of mentions, in its source and in its target; mentions in the target read with the inverse name. Staleness, the delete block and the cycle check follow the stored direction only. Unlinking, or removing the source's last mention, soft-deletes the relationship; removing the target's mentions never does. How modules report mentions to core is for system design.
  • Mentions of a soft-deleted relationship resolve to the state "No longer linked": the text stays, the link is disabled, and the copy is neutral about why. Core never edits the target's content or counters; its author dismisses (plain text stays) or relinks. Undo restores the same relationship id. Linking the pair again later creates a new relationship, and old mentions can be relinked to it.
  • A save that removes a passage with incoming references is refused with passage_referenced unless it is a new version. The check looks up only the anchors the save removed, against an index of references by target and anchor, so it costs the size of the change. Associations don't protect passages; they are removed with them.
  • Updates carry the revision they started from, and stale writes get a conflict error. The check is per entity, not per user, so it already covers two people saving in parallel or one after another; merging instead of refusing waits for collaboration.

Contracts

  • Linkable types, resolvers and renderers are registered by packages and never listed in core, so a new type (a Twitter thread, a news article) is a new package.
  • Resolver and renderer contracts take lists and are async: one call per module per page, and render(links) => Promise<ReactNode>. Inline and minimal need no renderer call.
  • The resolved link sent to every consumer carries the relationship (id, label, type, kind, snapshot), the target's index fields, its state, its mark, and render data when card or preview asked for it. The display type is a field consumers may ignore.

The prototype's resolved-link shape, trimmed (from the throwaway prototype in ticket 08):

JSON
{
   "relationship": {
      "id": "rel_7Hq2",
      "label": null,
      "kind": "reference",
      "linkedAt": { "version": 1, "revision": 2 }
   },
   "display": "card",
   "target": {
      "id": "tx.datum.07",
      "type": "datum",
      "module": "taxila",
      "title": "Am I lying to myself?",
      "status": "active",
      "version": 2,
      "revision": 5,
      "dirty": "changed",
      "changeNote": "Reframed: the fear is of the test itself, not of the timing."
   },
   "render": { "excerpt": "…" }
}
  • Stable error codes: delete_blocked (with the referencer count), passage_referenced (with the links), cycle (with the chain), locked, stale_revision, invalid_tag, deprecated_vocabulary.
  • Every create accepts an idempotency key.
  • Every list (backlinks, search, tags, version log, list-link members) pages by cursor.
  • The render cache is keyed by entity, revision and display type, sits behind a plain get/set interface with in-process storage, and responses carry the revision as an ETag.

Search

  • Postgres full-text search plus pg_trgm over display name, and exact matches on type, module, status and tags. No body text. Filters and cursors on every query.

Testing Decisions

  • A good test checks what a consumer can observe, never how it is done. It sends a request and asserts on the response and on what a second request then returns. It never asserts on table layout, SQL or internal function calls, so the store can be reshaped without rewriting tests.
  • Main seam: the guarded HTTP API. Integration tests call the real route handlers wrapped in withApiGuard with a Request, against a database built from the migrations, with only the signed-in caller mocked. Prior art: the integration guard and entitlement tests in packages/core, which already run this way inside the test-database script, with random per-file user ids so files run in parallel.
  • The exit criteria run at this seam, through the public API only:
    • a link carries a label and a type
    • a version bump with a change note shows the red dot
    • deprecate and supersede work, including the referencer count on supersede
    • deleting a referenced target is refused with delete_blocked
    • a reference cycle is refused with cycle
    • key:value tags work, and invalid tags are refused
    • search finds entities by title and metadata
    • turning a module's entitlement off makes its links locked, with no content in the response
    • another user's entities never appear in any response
  • Further cases at the same seam: list links keep their order, restore brings back what delete removed, erasure leaves a placeholder, removing a referenced passage is refused with passage_referenced unless the save is a new version (then the reference shows the red dot and "passage removed"), deleting a passage removes associations into it and bumps the source's revision, a stale-revision update is refused, a retried create with the same idempotency key links once, backlinks page correctly, a relationship mentioned from both ends stays one relationship and creates no cycle, removing the source's last mention leaves the target's mentions "No longer linked", and undoing an unlink restores the same relationship id.
  • Second seam: the Rich Live Link component. Component tests render it with a fake renderer registry and stubbed resolved links, and assert what a reader perceives (text, link roles, text equivalents of the marks) for each display type and state. Sidekick has no component tests yet. Choosing the tool (Storybook or an alternative) is a system-design decision.
  • The playground is for eyes, not assertions. It lets the owner check the outcome by hand and doubles as the natural target for end-to-end or visual regression tests later.
  • Each bug fixed later gets a regression test at the seam where it showed up.

Out of Scope

  • Any real module's entities, editor or renderer (Taxila, War Room, Zinsser, Alter Ego). They arrive in their own phases, each shipping a renderer.
  • Source and target anchors in a real editor, and word and sentence anchors. Phase 3 stores the anchor fields and enforces the referenced-passage rule on save.
  • Styling: type icons, status pills, hover or click detail cards.
  • Notifications and digests, readers reporting broken sources, diffs and "as linked" views.
  • Body-text search, search providers and embeddings.
  • User-defined relation types, links to links, and nested tags.
  • References between users and redaction across users.
  • Bulk link and tag endpoints.
  • Judging intent with AI, AI advice on version bumps, and drift detection.
  • External renderers (Slack and similar) and publishing links on public posts.
  • Third-party integrations of Rich Live Links (Slack unfurls, Notion embeds, oEmbed). The component is host-agnostic from the start.
  • AI tag-merge suggestions (the user approves each merge).

Further Notes

  • Phase 3 splits into 3a (store and rules) and 3b (render and find). See Scope and phases.
  • For system design: how word and sentence anchors survive edits (operation-based anchors are the bar to beat), how the referenced-passage check stays proportional to the change, how the cycle check scales, whether search uses a provider model, and which tool tests modules and components in isolation.
  • A throwaway prototype of the display types and states is linked from ticket 08.
  • Watch whether metadata on micronotes outweighs their content, and study how other tools handle it.
Arkive

Index

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

Tags (149)

View

259 entries.

As ofTitleKind
2026-10-28Synergy - Feature SpecificationsReadingprd spec synergyprd
2026-10-27Cycles between linksprd synergy wayfinderplan
2026-10-27Entities and the Entity Indexprd feature synergyprd
2026-10-27Foundationsprd feature synergyprd
2026-10-27Individual Firstprinciple productguidance
2026-10-27Keeping Links Trueprd feature synergyprd
2026-10-27One Interfaceprinciple api cliguidance
2026-10-27One interface for every consumerdecision technical architecture-decision api clidecision
2026-10-27Overview of Synergyprd feature synergyprd
2026-10-27Relationshipsprd feature synergyprd
2026-10-27Rich Live Linkprd feature synergyprd
2026-10-27Scope and Phasesprd feature synergyprd
2026-10-27Search and Backlinksprd feature synergyprd
2026-10-27Tagsprd feature synergyprd
2026-10-25Links anchored to part of an entityprd synergy wayfinderplan
2026-10-25Links into a module you can't useprd synergy wayfinderplan
2026-10-25Rich Live Link draftprd synergy wayfinderplan
2026-10-25Scope and phasesprd synergy wayfinderplan
2026-10-25Search across modulesprd synergy wayfinderplan
2026-10-25Synergy: wayfinder mapprd synergy global-tagging-and-linking wayfinderplan
2026-10-25The starter relation vocabularyprd synergy wayfinderplan
2026-10-25What counts as a changeprd synergy wayfinderplan
2026-10-25What happens when a target is deletedprd synergy wayfinderplan
2026-10-25What makes two tags the sameprd synergy wayfinderplan
2026-10-25What Phase 3 can prove on its ownprd synergy wayfinderplan
2026-10-25Where the resolver contract livesprd synergy wayfinderplan
2026-10-24Lesson 8: Phase 2 close-outplan phase-2 task guidanceplan
2026-10-24Phase 2 lesson 7 walkthrough: the ops package and entitlements grantbuild walkthrough phase-2 feature-system database postgresql cliguidance
2026-10-24Phase 2 walkthroughbuild walkthrough phase-2 api-guard feature-system rls authenticationguidance
2026-10-24Phase 2 lesson 3 walkthrough: entitlementsbuild walkthrough phase-2 feature-system database drizzle rls postgresql testingguidance
2026-10-24Phase 2 lesson 4 walkthrough: withApiGuardbuild walkthrough phase-2 api-guard rls api authentication testingguidance
2026-10-24Phase 2 lesson 5 walkthrough: request and auth-failure loggingbuild walkthrough phase-2 api-guard observability eslint testingguidance
2026-10-24Phase 2 lesson 6 walkthrough: /api/health and guard verificationbuild walkthrough phase-2 api-guard api nextjs testingguidance
2026-10-24Phase 2 lesson 2 walkthrough: resolveApiCallerbuild walkthrough phase-2 api-guard authentication supabase testingguidance
2026-10-24Lesson 7 (task 2.10): dev entitlement seed scriptplan phase-2 task feature-system database postgresqlplan
2026-10-24Phase 2 build rules and target designplan phase-2 api-guard rls api authentication typescript guidanceplan
2026-10-24Phase 2 lesson 1 walkthrough: feature registrybuild walkthrough phase-2 feature-system typescript monorepo testingguidance
2026-10-24Pre-2 walkthroughbuild walkthrough pre-2 rls supabase drizzle postgresql testing eslintguidance
2026-10-24Agent guideai-coding agent gateway agent-guidance rls supabase drizzle api react prettierguidance
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-24Living implementation planplan living-plan taxila zinsser alter-ego war-room factory parrot core-driveplan
2026-10-24Phase 2 core infrastructure API guard feature system completeplan living-plan phase-2 api-guard rls api authentication feature-systemplan
2026-10-24Phase 3 graph store metadata serviceplan living-plan phase-3 api-guard rls postgresql api offline graphplan
2026-10-24Phase 9 API keys CLIplan 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-23Lesson 3 (tasks 2.8, 2.9): entitlements table and getEnabledFeaturesplan phase-2 task feature-system database drizzle rls postgresql testingplan
2026-10-23Lesson 4 (tasks 2.2, 2.3): withApiGuard with withRLSplan phase-2 task api-guard rls api security testingplan
2026-10-23Lesson 5 (tasks 2.4, 2.5): request and auth-failure loggingplan phase-2 task api-guard observability eslintplan
2026-10-23Lesson 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-23Phase 1.1 DB RLS enforcementplan phase-1.1 rls database supabase drizzle postgresql api typescriptguidance
2026-10-23Checkpoint B walkthroughbuild walkthrough phase-0 checkpointguidance
2026-10-20Lesson 2 (task 2.1): resolveApiCallerplan phase-2 task api-guard authentication supabase nextjsplan
2026-10-18Lesson 1 (tasks 2.6, 2.7): FeatureManifest and ALL_FEATURESplan phase-2 task feature-system typescript monorepoplan
2026-10-18Dependency flowsystem-design monorepo clispec
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-16Best practice rulessystem-design code-quality-check eslintspec
2026-10-16ESLint best practice rulesdecision technical architecture-decision eslint typescript nextjsdecision
2026-10-16Stay on ESLint revisit oxlintdecision technical architecture-decision eslint typescriptdecision
2026-10-16Pre 2 foundation hardening completeplan pre-2 foundation security database testingplan
2026-10-16ESLint plugin boundariessystem-design code-quality-check eslintspec
2026-10-16Portable documentation vaultopportunity documentation agentic-coding portability severity-mediumopportunity
2026-10-16Prettier at repo levelsystem-design code-quality-check prettierspec
2026-10-16Server actionssystem-design nextjs rls api authenticationspec
2026-10-15Pooler client configurationopportunity phase-2 database supabase drizzle severity-mediumopportunity
2026-10-14Vitestdecision technical architecture-decision testing vitest monorepodecision
2026-10-14App runtime role for Drizzledecision technical architecture-decision rls supabase drizzledecision
2026-10-14Profile creation Postgres triggersystem-design security postgresql 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-13Model Routingprd vercel ai embedding routingprd
2026-10-13Overview of Core Drivesystem-design prd feature core-drive factory ai alter-egoprd
2026-10-13Phase 0 — Foundation and Toolingplan phase-0 api nextjs typescript eslint turborepo pnpmplan
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-10-02Coding Agent HeuristicsRetiredWhich AI model or coding agent to use for which kind of session based on the type of task, teaching value, and complexitysidekick project technical ai heuristicnote
2026-09-19A graph pattern not a graph databasesystem-design global-tagging-and-linking postgresql graphspec
2026-09-19Actual stateglossary terminologyglossary
2026-09-19Algorithm of lifeglossary terminology nextjsglossary
2026-09-19Alter egosystem-design prd feature taxila alter-ego factory aiprd
2026-09-19API firstsystem-design api clispec
2026-09-19API route fail openopportunity phase-2 api security eslint severity-lowopportunity
2026-09-19API versioningsystem-design apispec
2026-09-19App runtime for Drizzlesystem-design database drizzle postgresqlspec
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-19Best practicesai-coding-harness agent-guidance drizzle api react pnpm css offline embedding soft-deleteguidance
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-19Centralized copydecision technical architecture-decision authentication typescript clidecision
2026-09-19Centralized copysystem-design contentspec
2026-09-19Checkpoint aplan phase-0 checkpoint nextjs typescript turborepo pnpm cliplan
2026-09-19Checkpoint bplan phase-0 checkpoint eslint prettier turborepo pnpmplan
2026-09-19Checkpoint cplan phase-0 checkpoint nextjs pnpmplan
2026-09-19Checkpoint dplan phase-0 checkpoint api-guard rls supabase drizzle api authenticationplan
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-19Corepacksystem-design monorepo pnpmspec
2026-09-19CSS modulessystem-design css eslint mantinespec
2026-09-19DB access chokepointopportunity phase-2 database rls architecture severity-highopportunity
2026-09-19Design constraintssystem-design global-tagging-and-linking rls offline soft-deletespec
2026-09-19dotenv CLIdecision technical architecture-decision clidecision
2026-09-19dotenv CLIsystem-design config clispec
2026-09-19Driving forces and key featuressystem-design api offlinespec
2026-09-19Edge runtimedecision technical architecture-decision supabase api nextjsdecision
2026-09-19Edge runtimesystem-design security supabasespec
2026-09-19Embedding status fieldsystem-design rag embedding typescriptspec
2026-09-19Enforced conventionssystem-designspec
2026-09-19Env vars in turbo JSONdecision technical architecture-decision turborepo verceldecision
2026-09-19Env vars in turbo JSONsystem-design monorepo turborepo vercelspec
2026-09-19Environment contract driftopportunity phase-2 config security developer-experience severity-mediumopportunity
2026-09-19ESLint rules to use tsupdecision technical architecture-decision nextjs eslintdecision
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-19Flat configdecision technical architecture-decision typescript eslintdecision
2026-09-19Flat configsystem-design code-quality-check eslintspec
2026-09-19Force dynamicdecision technical architecture-decision supabase authentication nextjsdecision
2026-09-19Force dynamicsystem-design nextjs supabasespec
2026-09-19Global tags and metadatasystem-design global-tagging-and-linking taxila zinsser alter-ego war-room factory core-drivespec
2026-09-19GraphQL and Relaysystem-design api graphql relayspec
2026-09-19GraphQL Relaydecision technical architecture-decision api-guard rls supabase drizzle api authentication nextjsdecision
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-19Installation at workspace levelsystem-design code-quality-check typescript pnpmspec
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-19Module resolution bundlerdecision technical architecture-decision nextjs typescriptdecision
2026-09-19Module resolution bundlersystem-design code-quality-check typescriptspec
2026-09-19Never mutate outside API layersystem-design apispec
2026-09-19No API versioningdecision technical architecture-decision api-guard api nextjs clidecision
2026-09-19No utility stylesdecision technical architecture-decision eslint mantine cssdecision
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-19Package boundary enforcementopportunity phase-2 monorepo eslint architecture severity-mediumopportunity
2026-09-19Parrotsystem-design prd feature parrotprd
2026-09-19Phase 0 foundation tooling completeplan living-plan phase-0 nextjs typescript eslint prettier turborepo pnpmplan
2026-09-19Phase 1 Supabase and auth shellplan phase-1 rls supabase drizzle postgresql authentication nextjsguidance
2026-09-19Phase 1 Supabase auth shell completeplan living-plan phase-1 api-guard rls supabase drizzle postgresql apiplan
2026-09-19Phase 1.1 DB level RLS soft delete enforcement completeplan living-plan phase-1.1 rls supabase drizzle postgresql pnpm soft-deleteplan
2026-09-19Phase 10 observability hardeningplan living-plan phase-10 api-guard rls api authentication nextjs offlineplan
2026-09-19Phase 11 dogfooding friends family access optionalplan living-plan phase-11plan
2026-09-19Phase 12 billing SaaS readiness optional pathplan living-plan phase-12 api offlineplan
2026-09-19Phase 4 Taxila v1 knowledge managementplan living-plan phase-4 taxila api-guard rls drizzle api authenticationplan
2026-09-19Phase 5 Zinsser v1 writing editor firstplan living-plan phase-5 taxila zinsser api mantine ai embeddingplan
2026-09-19Phase 6 core drive AI layer alter egoplan living-plan phase-6 taxila zinsser alter-ego war-room factory core-driveplan
2026-09-19Phase 7 war room factory v1plan living-plan phase-7 war-room factory core-drive rls api offlineplan
2026-09-19Phase 8 PWA iOS shellplan living-plan phase-8 taxila alter-ego nextjs vercel pwa mobileplan
2026-09-19Post mvp factory extensions bots agentsplan living-plan backlog factory parrot api-guard rls supabase drizzleplan
2026-09-19Prd.features.core drive and Taxilasystem-design prd feature taxila core-driveprd
2026-09-19Prefer JSON configsystem-design monorepospec
2026-09-19Present stateglossary terminologyglossary
2026-09-19Productivity Modulesystem-design prd feature war-roomprd
2026-09-19Profile trigger and referential integrityopportunity phase-2 database authentication integrity severity-highopportunity
2026-09-19Public API onlysystem-design api rls authentication clispec
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-19Runtime database URL driftopportunity phase-2 security rls config severity-highopportunity
2026-09-19Runtime role reproducibilityopportunity phase-2 database security severity-criticalopportunity
2026-09-19Runtime validationsdecision technical architecture-decision api-guard supabase api typescript clidecision
2026-09-19Runtime validationssystem-design typescriptspec
2026-09-19Security proof and ciopportunity phase-2 testing ci security severity-highopportunity
2026-09-19Shared tsconfigdecision technical architecture-decision nextjs clidecision
2026-09-19Shared tsconfigsystem-design code-quality-check typescriptspec
2026-09-19Signup confirmation flowopportunity authentication ux severity-lowopportunity
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-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-19Task 1.1plan phase-1 task supabase postgresql api authentication nextjsplan
2026-09-19Task 1.10plan phase-1 task rls supabase drizzle postgresql authentication typescriptplan
2026-09-19Task 1.11plan phase-1 task api-guard rls supabase api authentication nextjsplan
2026-09-19Task 1.12and1.13plan phase-1 task supabase api authentication nextjs react typescriptplan
2026-09-19Task 1.14plan phase-1 task react pnpm mantine cssplan
2026-09-19Task 1.15and1.16plan phase-1 task supabase authentication nextjs react mantineplan
2026-09-19Task 1.17plan phase-1 task supabase authenticationplan
2026-09-19Task 1.18plan phase-1 task api-guard rls supabase drizzle postgresql authenticationplan
2026-09-19Task 1.2plan phase-1 task supabase drizzle postgresql authentication nextjs pnpmplan
2026-09-19Task 1.3plan phase-1 task supabase nextjs typescriptplan
2026-09-19Task 1.4plan phase-1 task supabase authentication nextjs react typescriptplan
2026-09-19Task 1.5plan phase-1 task rls supabase authentication typescriptplan
2026-09-19Task 1.6plan phase-1 task rls supabase drizzle authentication typescript offlineplan
2026-09-19Task 1.7plan phase-1 task drizzle postgresql typescriptplan
2026-09-19Task 1.8plan phase-1 task turborepo pnpmplan
2026-09-19Task 1.9plan phase-1 task rls supabase drizzle postgresql 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-19tsupsystem-design code-quality-check eslintspec
2026-09-19Turboreposystem-design monorepo turborepo pnpmspec
2026-09-19TypeScript hoistingdecision technical architecture-decision nextjs typescript pnpmdecision
2026-09-19Use corepackdecision technical architecture-decision pnpm verceldecision
2026-09-19Use navigation hooksystem-design nextjsspec
2026-09-19User profile creation by DB triggerdecision technical architecture-decision supabase api authenticationdecision
2026-09-19Verceldecision technical architecture-decision nextjs turborepo pnpm verceldecision
2026-09-19Vercelsystem-design monorepo turborepo pnpm vercelspec
2026-09-19Why Prettier at repo level?decision technical architecture-decision prettier turborepo graphdecision
2026-09-19Why Turborepodecision technical architecture-decision turborepo pnpmdecision
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-29Checkpoint A walkthroughbuild walkthrough phase-0 checkpointguidance
2026-05-29Checkpoint C walkthroughbuild walkthrough phase-0 checkpointguidance
2026-05-29Checkpoint D walkthroughbuild walkthrough phase-0 checkpointguidance
2026-05-29Config files explainedbuild walkthrough phase-0 turborepo typescript eslint prettierguidance
2026-05-29Phase 1 walkthroughbuild walkthrough phase-1 supabase drizzle authenticationguidance