75% off the Personal and Commercial licences, first 100 buyers — code 9JV8C1HE, applied at checkout. Ends soon.Get the source
codewave.

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.

The DailyTM board: configurable status columns with draggable task cards, labels and subtask counts.
BoardColumns are per-project statuses you rename, recolour and reorder. Drag is optimistic, with a rollback toast when the server disagrees.
The DailyTM list view: a sortable, filterable table of tasks with status, assignee and due date.
ListSort, filter, search. Every filter lives in the URL, so any arrangement you reach is a link you can send.
The DailyTM task detail panel with a rich-text description, subtasks, labels and comments.
Task detailRich text, subtasks with a completed/total rollup, labels, assignee, and comments with @mentions.
The DailyTM calendar placing tasks on their due dates across the month.
CalendarDue dates in the shape people actually plan in, and a drag to move one.
The DailyTM my-tasks view, grouping everything assigned to you by due date.
My tasksEverything assigned to you across projects, grouped overdue, today, upcoming and undated.

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.

V1

Protect the product already being sold

Freeze v1, tag it, and prove a clean clone still installs before touching anything.

00

Foundation

Lint rules, CI, the four release gates, and the layer contract every later phase is held to.

01

Identity and organizations

Better Auth, invitations, four roles, 2FA and OAuth, and the application shell.

02

Projects and tasks

Board, list and calendar, fractional ranking, and per-project visibility.

2.5

Task modelling

Configurable statuses, subtasks, labels, and Postgres full-text search on generated tsvector columns.

03

Collaboration

Comments, @mentions resolved on the server, the inbox, email, and the audit timeline.

04

Attachments and entitlements

S3 uploads, avatars, plan limits, and Polar billing.

05

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.

512Tests passing
0Lint errors
18Services, each with an authz test
4Release gates, run in CI
8 / 8Phases built

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.

Launch price · $299 after

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
Get the source

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
Email about an agency licence

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.

Full licence terms

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.