Build a ClickUp alternative

Build a ClickUp alternative as projects, tasks, assignees, due dates, and a board. Docs, chat, whiteboards, and automations stay on the skip row.

  • teardown
  • vibe-coding
  • scope

You can build a ClickUp alternative as projects, tasks, assignees, due dates, and a board. The catalog calls ClickUp that, not a work operating system.

You pay $7–$12 a person a month. The card says that price scales with the team. The verdict is “Delete ninety percent of it”.

Last time I wrote about building a Todoist alternative. That was a regular backlog post. This one is a teardown.

Build a ClickUp alternative as a board

The ClickUp page splits the work into three rows.

The first row is 3 days. Projects, tasks, assignees, due dates, a board. That is one workspace, a few lists, and two views of the same rows. You can vibe-code this.

The second row is 2 weeks and up. Comments, mentions, attachments, an activity log, saved filters. Still a tracker.

The third row is 3 months and up. Docs, chat, whiteboards, automations, custom fields. Skip that row.

If you tell an agent to “clone ClickUp”, it aims at the third row. The useful v1 is the first one.

Here is the shape of one task. Nothing else has to exist at 3 days.

const task = {
  id: 'tsk-1842',
  projectId: 'proj-launch',
  title: 'Write launch email',
  status: 'in_progress',
  assignee: 'lea',
  dueOn: '2026-11-04',
}

A workspace, a project, a task. Status is a string you picked. A due day is a calendar date, not midnight in UTC. Comments wait until the board has been the real list for a week.

The audience on the page is a small product team coordinating one active project. If that is you, one board is enough. If the company already lives in Spaces, Folders, Docs, and Automations, keep paying.

The same v1 also replaces monday.com and Basecamp if what you wanted was planned work and a board. Linear is the issue tracker at $10–$16 a person a month. I already wrote that teardown. Todoist is the personal list at $5–$8. Trello is columns and cards at $10–$17.50.

How does ClickUp work

ClickUp publishes the Hierarchy, the task API, views, ClickApps, and webhooks. I am summarizing those pages, not reconstructing today’s cloud cluster.

A Workspace is the org. The hierarchy article says one Workspace per organization. Under it sit Spaces, optional Folders and Subfolders, then Lists, then Tasks, then Subtasks. Nested subtasks are a ClickApp an admin turns on.

The public API still says Team when it means Workspace. That is their FAQ and the v2 and v3 terminology page, not a guess. team_id is the Workspace. group_id is a user group. Folders used to be called Projects. Those names stay in the URL.

A task lives in a List. The tasks docs give it a name, description, assignees, status, priority, start and due dates, tags, time estimates, points, a parent for subtasks, and links for dependencies. Priority is four fixed values. 1 is Urgent. 4 is Low. You cannot invent a fifth.

Custom fields are a second write path. Create Task can set them. Update Task cannot. You call Set Custom Field Value. Types include dropdown, labels, money, people, location, and automatic progress. A v1 does not need that table.

Views do not copy the tasks. The views help says the location of the view decides which tasks you see. A List view on one List shows that List. The same kind of view on a Space shows every List under it. List and Board exist by default. Only List is required. Board columns are statuses. Drag a card, change the status. Calendar shows tasks that already have a start or due date.

Statuses can be defined at Space, Folder, Subfolder, and List. The customizable features page groups them as Active, Done, and Closed. Not Started is optional. Templates exist for Kanban and Scrum. A v1 needs three statuses you wrote down.

Sharing has four permission levels on that same page: View only, Comment, Edit, Full edit. Private locations pick who sees them. Public links can leave the Workspace. A 3-day v1 has one Workspace and members. Skip guests.

ClickApps are the feature flags. Automations, Custom Fields, Multiple Assignees, Priority, Sprints, Time Tracking, Tags. Some apply to the whole Workspace. Some apply per Space. That is how the kitchen sink stays optional in their product and still ships with the same login.

Webhooks sit on the API. You subscribe to a location in the Hierarchy. Webhook events include taskCreated, taskStatusUpdated, and taskMoved. Each event can carry history_items with before and after. They tell you to use webhook_id plus history_item_id as the idempotency key. Events are signed with a shared secret. Treat “they fan those events out of a dedicated queue” as an educated guess. The public contract is the POST and the signature.

Automations are another product wearing a robot icon. A Call webhook action sends the trigger task to a URL you own. Triggers and conditions live next to it. That is the skip row.

I would not claim I know their database. A relational store for tasks plus a search index for the Everything view is an educated guess. The public picture is the Hierarchy and the views that query it.

YOUR BROWSER List, board, task Same rows, two views ASTRO APP ON THE REQUEST Auth, create, assign, move Workspace membership first D1 HOLDS THE ROWS Workspace, Project, Task Activity is append-only LIST AND BOARD READ IT Filter by project and status No second copy of the task SKIP THIS HALF Spaces, Folders, custom fields Docs, chat, whiteboards Automations and signed webhooks The Everything search view
The browser talks to the app. Both views read the same task rows. Docs and automations sit on the skip row.

A v1 can skip Spaces and Folders. One Workspace, a handful of Projects (their Lists), and Tasks. The card’s stack is Astro, HTMX, and D1. Company OAuth is the login.

Screens of a ClickUp alternative

Three surfaces for v1. If the agent starts a Doc or a Whiteboard, send it back.

The list is home. Project name, statuses as groups, a row per task. Title, assignee, due date. Add a task at the bottom of a group.

WIREFRAME · LIST Launch TO DO Write launch email Lea · 4 Nov IN PROGRESS Design hero Marco · no date DONE Buy domain · Ada
Home is one project. Statuses group the same rows the board will show.

The board is those rows as cards. Columns are statuses. A card is a title and a due date. Moving a card writes the status. No second table.

WIREFRAME · BOARD TO DO Launch email Lea · 4 Nov DOING Design hero Marco DONE Buy domain Ada
Three columns. One card per task. A move is a status write.

The task is the detail. Title, status, assignee, due date, a short description. The 2-week row adds comments and an activity list. The guardrail on the card is the useful sentence: authorize every workspace query, sanitize comments and filenames, and record important task changes in an append-only activity stream.

WIREFRAME · TASK Write launch email Status · to do Assignee · Lea Due · 4 Nov Draft for the bootcamp list Comments wait a week
One task. Four fields. Comments stay off the 3-day row.

How a ClickUp alternative board works

The loop is create a task, assign it, move it to done.

Lea opens Launch. She adds “Write launch email” under To do. The app checks she belongs to the workspace, inserts the task, and appends an activity row. The list and the board both read that row.

Marco opens the board. He assigns himself and sets 4 Nov. That is two writes and two activity rows. He drags the card to In progress. The status update succeeds. A second tab that still shows To do refreshes and loses. There is one status.

When the email goes out, he moves it to Done. Overdue and due-today queries skip done rows.

CREATE THE TASK Membership check, then insert ASSIGN AND DATE IT Two writes, two activity rows MOVE THE CARD Status write, one winner MARK IT DONE Open queries drop the row BOTH VIEWS AGREE List and board read one row Activity only appends
The 3-day v1 is create, assign, move, done. Both screens stay honest because they share the row.

Email notifications wait if you only have two people in the same room. Add them on the 2-week row. Mentions and attachments wait with them.

The hard half of a ClickUp alternative

The skip row starts when the tracker grows a second product.

The Hierarchy is the first tax. Workspace, Space, Folder, Subfolder, List, Task, nested Subtask. Private vs shared at each level. Permissions at each level. Views that inherit the location. An Everything view across the org. A 3-day v1 has one Workspace and a list of projects.

Custom fields are a typed schema per location, inherited down the tree, with a separate write API and types like money and location. Formulas and automatic progress sit on that same ClickApp. Once you have those, you are building a second Airtable.

Automations are a rule engine on every status change. Then outbound webhooks, then an inbound “webhook received” trigger. Make is $10–$29 a month if the rent is a visible pipeline. I already wrote the Zapier teardown.

Docs, Chat, and Whiteboards are page views next to the tasks. That is a notes app, a chat, and a workshop canvas, hanging off the same Hierarchy. I already wrote the Slack and Miro teardowns.

Treat live cursors on a board of 80 people as an educated guess for how they keep columns honest. The public docs describe the drag. They do not publish the sync engine.

3-DAY V1 Projects, tasks, a board Assignee and a due day One workspace, three statuses SKIP THIS HALF Hierarchy and custom fields Automations and webhooks Docs, chat, whiteboards
Ship the board. Leave the Hierarchy, the field engine, and the three extra products on the skip row.

I would rebuild ClickUp for one launch and six people. Projects. A board. Due dates.

I would not turn on Docs. I would not invent custom fields so marketing can track a campaign type.

Host it next to the product, on Node.js and Astro, with HTMX on the three pages, because that is the stack on the card. Use TanStack Start if React is your weekday language. The hosting post already covers D1. Persist workspace, projects, tasks, and activity in D1. Attachments wait for R2 on the 2-week row.

If the rent is a personal today list, that is Todoist, 8 hours. If it is issues and a cycle, that is Linear, 12 hours. If it is only columns, that is Trello, 3 hours.

Start with the first row

Go to Build your own ClickUp. Copy the Astro prompt, or TanStack Start if that is what you write.

Tell the agent the first estimate only: projects, tasks, assignees, due dates, board. Three days.

If forty coworkers already live in Spaces, Docs, and Automations, keep paying.

Keep reading

Read all articles →