DailyTM · v2.0.0
The team task manager, finished and handed over.
Boards, lists and a calendar. Configurable statuses, subtasks, labels, @mentions, notifications, attachments and Postgres full-text search — on multi-tenant authorization the architecture enforces, not the developer's memory.
Launch price · $299 after · One payment · Perpetual licence
Specification
- Framework
- Next.js 16 · App Router
- Language
- TypeScript 5, strict
- Database
- PostgreSQL 14+ · Prisma 7
- API
- tRPC 11
- Identity
- Better Auth 1.7
- Tests passing
- 512 / 517
- Lint errors
- 0
- Phases built
- 8 / 8
- Licence
- Perpetual
01 — Screens
Five surfaces, one workspace
The same tasks seen five ways — however the person looking at them happens to think.





02 — The difference
Most task managers leak between tenants. This one can't compile if it does.
A multi-tenant bug is not a bug you notice. It is one customer reading another's data, silently, until someone reports it — and by then it has been true for months.
So tenancy here is not a convention the next developer has to remember. Three of the four rules are enforced by the linter and the fourth gates every merge, which makes the failure mode a red build rather than a support ticket you cannot answer.
Everything else — the board, the calendar, the mentions, the search — is built on top of that rather than beside it.
03 — Build order
Eight phases, each with an acceptance gate
Not a weekend build dressed up. Each phase had a written plan and a gate it had to pass before the next one started.
Protect the product already being sold
Freeze v1, tag it, and prove a clean clone still installs before touching anything.
Foundation
Lint rules, CI, the four release gates, and the layer contract every later phase is held to.
Identity and organizations
Better Auth, invitations, four roles, 2FA and OAuth, and the application shell.
Projects and tasks
Board, list and calendar, fractional ranking, and per-project visibility.
Task modelling
Configurable statuses, subtasks, labels, and Postgres full-text search on generated tsvector columns.
Collaboration
Comments, @mentions resolved on the server, the inbox, email, and the audit timeline.
Attachments and entitlements
S3 uploads, avatars, plan limits, and Polar billing.
Release
Licence, documentation, seed data, and the public demo.
04 — Stack
Current, boring, deliberate
Nothing exotic. Nothing added that a few lines of code could do. If you write Next.js today, you can read this on day one.
- Next.js 16
- React 19
- TypeScript 5 strict
- tRPC 11
- TanStack Query 5
- Prisma 7
- PostgreSQL
- Better Auth 1.7
- Tailwind v4
- shadcn/ui
- TipTap 3
- Resend
- S3-compatible storage
- Polar
- Vitest
- Playwright
05 — Evidence
Claims you can check before you pay
No testimonials here yet. Numbers instead — every one of them verifiable in the repository on day one.
The four tenancy rules
Three are enforced by the linter. The fourth gates every merge. None of them rely on anyone remembering anything.
- Every file under src/server/ imports server-only — a database call that leaks into a client bundle becomes a build failure, not a shipped credential.
- findUnique is banned inside services. Use findFirst scoped by organizationId; a lookup by id alone returns another tenant's row — the single largest defect class in v1.
- Services never read the request; routers never touch the database. One direction of dependency, so there is exactly one place authorization can be checked.
- Every service ships an .authz.test.ts proving a member of organization B gets NOT_FOUND for an organization A resource — on read and on write. No service merges without one.
What runs on every push
lint, typecheck, test and build run against a Postgres service container — no account and no API key, so a fresh clone runs green on the first try. End-to-end tests boot their own dev server.
Every migration is committed, because db push cannot create the partial indexes, generated tsvector columns and check constraints this schema depends on.
- Five of the 517 tests need a live S3 bucket and skip without one. That is the whole gap between 512 and green.
06 — Before you buy
What this does not include
Better you read it here than find it on day three.
Not built
- Time tracking — planned for v2.1. Timers are a client-billing feature; that budget bought subtasks and labels.
- Analytics charts — planned for v2.1. The dashboard ships counts and an activity heatmap, not burndown.
- Project documents — planned for v2.2. Rich text still ships, on task descriptions and comments.
- A native mobile app. The interface is responsive down to 320px, but it is a web app.
You supply
The app boots on three variables: DATABASE_URL, BETTER_AUTH_SECRET and BETTER_AUTH_URL. Every other one is optional, and its absence hides a feature rather than breaking the app — a missing required variable fails at startup naming all of them at once.
- PostgreSQL 14+ — Neon, Supabase, RDS or a container. Required.
- Resend — optional. Without it, emails print to your console and sign-up still completes.
- Any S3-compatible bucket — optional. Without it, the Files tab is absent rather than broken.
- Polar — optional. Without it, every organization is unlimited and billing does not appear.
07 — Licence
One payment. Yours permanently.
Build and sell applications with this code. Don't sell the code itself. That is the whole licence in two sentences; the full text ships in the package.
Standard
$49.75$19975% off with 9JV8C1HE — first 100 buyers, ends soonOne organisation · unlimited deployments and users
- Every file, and every future v2.x release
- Modify, rebrand and deploy without limit
- Commercial use — keep everything you earn
- Perpetual. No renewal, no seat count
- Private repository access, one commit per release
Agency
Let's talkDeploying it for clients, each as a separate business
- Multiple client deployments under one grant
- OEM and redistribution rights
- Source escrow, or a licence for a second entity
- Priced per arrangement
The standard licence covers your organisation and its subsidiaries. It does not cover deploying on behalf of clients as a substitute for them buying their own — that is what the agency licence is for.
08 — Questions
Before you decide
v2.0.0 — available now
Start from a codebase that already passes its own tests.
Clone, set three environment variables, run the seed, and you are looking at a populated workspace on your own machine in about five minutes.