Build your first feature
Add a durable product capability from schema to UI without bypassing the architecture.
Use a new domain for durable product behavior. A feature is complete only when its data ownership, validation, server policy, browser states, and verification all agree.
A maintained path
Define the behavior
Specify the owner, lifecycle, limits, and failure states before choosing files or UI.
Make persistence explicit
Add a dbmate migration and shared Zod request/response schemas in packages/contracts.
Build the vertical slice
Create server route, service, and repository layers, then the typed web service and product module.
Prove it works
Cover authorization, validation, durable behavior, and relevant failure paths before release.
Add a domain end to end
A maintained optional implementation playbook.
Worked saved-links feature
Follow one bounded product decision from schema to browser proof.
Add a database migration
Evolve schema safely with dbmate.
Add a protected route
Use Better Auth session identity correctly.
Customize safely
Replace neutral product choices without losing boundaries.
Do not skip the boundaries
Do not place product SQL in routes, use client state as the authorization source, or gate paid access solely in the browser. These shortcuts are fast only until the first policy, billing, or data-loss edge case appears.
Golden paths are optional playbooks
Each guide provides a tested route, common change surfaces, ownership rules, acceptance criteria, and useful checks. You may use another implementation approach when it preserves the required invariants and proves the same product outcome.