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.
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.
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.
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.
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.
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.
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.
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.