Work management for teams: tasks in projects with owners and dates, shown as lists, boards, timelines or calendars, with rules, forms and portfolio views on top.
Build me task management that replaces Asana — and know what makes it ALMOST rather than YES. Tasks in projects with dates and owners is a fortnight. What is not is **the layer above the task list**: portfolios that roll many projects into one view for people who never open a task, workload against real capacity, and the rules-and-forms machinery an operations team uses to run intake without asking a developer. That layer is the reason the subscription exists, and it is where most of your time will go. STACK - Node 20+ with Fastify, server-rendered HTML with a little vanilla JS - SQLite through better-sqlite3, WAL mode, with FTS5 - Caddy in front THE DATA MODEL - teams, projects: id, team_id, name, key, status, owner_id, start_on, due_on, is_archived - tasks: id, project_id, section_id, number, title, description_md, assignee_id, due_at, start_at, estimate_hours, priority, position, parent_id, completed_at, created_at - custom_fields and values, defined per project or globally, because the fields are how each team makes it theirs - dependencies: task_id, blocks_task_id - task_activity: id, task_id, field, old, new, actor_id, at — append-only, and the basis of every report - portfolios: id, name, project_ids_json, owner_id; goals: id, name, target, current, source_json, owner_id, cycle_id, parent_goal_id - capacity: user_id, hours_per_week, effective_from - rules: id, scope, trigger_json, conditions_json, actions_json, is_active; rule_runs, append-only - forms: id, project_id, definition_json — intake that creates a task with fields mapped THE LAYER ABOVE - A portfolio is a saved set of projects with a status per project, updated by its owner, plus a rolled-up progress computed from tasks. The status is written by a person; the progress is computed. Never mix them - Goals with a measurable target and a current value, optionally pulled from a query or an endpoint, with a check-in cadence and a confidence recorded separately from the number - Workload: assigned estimate hours per person per week against their capacity, with over-allocation visible before the week starts rather than reported after it. Without estimates this view is a task count, which is worthless — so make estimates required for anything in a workload view RULES AND FORMS - Triggers: a task created, a field changed, a due date approaching, a section change, a schedule - Actions: assign, set a field, move, add a follower, post a comment, call a webhook - Every run recorded with its result; a rule that silently does nothing is worse than none - Forms create tasks with fields mapped, public or internal, with a honeypot and a rate limit VIEWS - List, board, calendar, and a timeline with dependencies drawn - All from one query builder with five renderers, never five implementations - Filters saved as views, shareable by URL, with permissions checked inside the query THE REST - Comments with mentions, attachments stored by hash, followers, and notifications batched into a digest with mentions immediate - Search with FTS5 across titles, descriptions and comments - Recurring tasks with the two kinds — on a schedule, and N days after completion - Export everything as JSON and CSV in one command OPERATIONS - .env: DATABASE_PATH, STORAGE_PATH, BASE_URL, SESSION_SECRET, OIDC_*, SMTP_URL - Migrations on boot, each once; nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST The activity log and required estimates. Every report above the task list is derived from those two, and neither can be reconstructed later.
What you lose
- Portfolios and goals that roll many projects into one view for people who do not read task lists
- Workload across people, with capacity rather than counts
- Rules and forms that let operations teams change process without a developer
- Notifications tuned enough that people actually read them
- Mobile apps and offline behaviour that field teams rely on
If you would rather not build
- ClickUp — paid, broader, cheaper per seat
What it costs
read from their page 15 Aug 2026
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $13.49/mo | — | 15 Aug 2026 |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
Plane
$0Issues, cycles and roadmaps in a similar shape, self-hosted.
makeplane/planefree · open source
Vikunja
$0Task and project management with list, kanban and gantt views.
go-vikunja/vikunjafree · open source
Why this verdict
our own opinion · changed only by a person
46/100
Verdict kinda at 46: tasks, views and a small rule engine are a genuine weekend and cover what most teams touch. The reason companies keep paying is above the task list — portfolios, workload and the fact that everyone already has the app.
History
tracked since 9 Aug 2026 · nothing is ever overwritten
Questions about Asana
answered from the record above
Is Asana free?
No — the plan we track is $13.49 a month. Starter at $13.49 per user per month billed monthly, around $10.99 annually; Advanced roughly doubles it.
Can you replace Asana by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 46 out of 100, build time a weekend. Read what you lose before you decide.
How much does Asana cost?
$13.49 a month on Starter — $161.88 a year. Recorded 9 Aug 2026.
What do you lose by replacing Asana?
Portfolios and goals that roll many projects into one view for people who do not read task lists; Workload across people, with capacity rather than counts; Rules and forms that let operations teams change process without a developer; Notifications tuned enough that people actually read them; Mobile apps and offline behaviour that field teams rely on. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Asana?
Yes: Plane, Vikunja. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

