Skip to main content
Journal
Suite11 min read

ClickUp is one app. We did not want one app.

ClickUp jams every job into one window. Notion jams every job into a page tree. Jira jams every job into an issue tracker. We built five apps and one organisation.

Painted constellation of Tides, TurtleTime, Kraken and Shelly panels around the ShellStack hex-and-terminal icon

Agencies outgrow ClickUp for a boring reason. You can configure anything. You still do not have a client, an invoice, or a wiki that knows the project — unless you build it out of custom fields and Zapier. Notion has the same trick with databases. Jira has the same trick with plugins. I got tired of tricks.

ShellStack compared with ClickUp, Jira, Notion
Topic
ShellStack
ClickUp
Jira
Notion
ShapeFive apps, one organisationOne productTracker gravityA page tree
TimerTurtleTimeA moduleA pluginA database, if you squint
BoardTidesTasksJiraLinked database
WikiKrakenDocsConfluencePages
AuthPortal token → product JWTOne ClickUp sessionAtlassian sessionOne Notion session
Clientscore.Client, flagged per productA custom field, usuallyA project, if you squintA database you invent
GlueShared ledger, launch tokens, ComposioInside the blobMarketplace + ForgeAPI and hope
  • Pick ShellStack if

    You already know the jobs are different, and you have been punished either by four vendors or by one vendor that flattened them.

  • Pick ClickUp if

    You need one tab this week and a checklist that covers whiteboards, chat and goals. Breadth is the product.

  • Pick Jira if

    The company already orbits Atlassian. Time and docs will arrive as plugins. That is a valid life.

  • Pick Notion if

    You want to invent internal tools out of databases. A wiki that can be a CRM is a superpower until it is a junk drawer.

A timer should not look like a wiki. An agent console should not look like a kanban column. ClickUp forbids that kind of drift by stuffing everything into one settings page. We allow the products to drift in craft. We forbid them to drift in organisation: one person, one seat, one client directory, one bill.

The seams that are not Zapier

  • Invite once in ShellStack. Tick Tides, TurtleTime, Kraken, Shelly. Workspace restrictions if a contractor should not see every client.
  • Home launches an app with a short-lived token. The product then uses its own JWT secret. Tokens are not interchangeable on purpose.
  • core.TimeEntry is the hour. Tides writes it. TurtleTime invoices it. Nobody syncs two timesheet tables.
  • core.Client is the customer. Product visibility flags (is_tides, is_turtletime) hide it where it should not appear.
  • Shelly’s write path is agent-inbox plus a Gate. Destructive tools wait for a human. Mattermost can show the card.
  • Kraken’s live editor talks to Y-Sweet. Permissions stay in Django. Attachments land on private Kraken R2, not the public CDN.
  • Composio connections are workspace-linked. A GitHub assignment can become a Tides task. A calendar end can draft time. The rule still has to pass product permissions.

How the five apps actually talk

They do not sync copies. They share records, and they borrow each other through the API.

  • Identity: one core.User. Five JWT secrets. Portal mints a launch token; the product issues its own pair. The app switcher jumps siblings without a fourth invite.
  • Directory: one core.Client, one Workspace. Tides boards, TurtleTime projects, Kraken pages and Shelly crews all point at the same ids. Visibility flags hide a client from an app that should not see it.
  • Time: one core.TimeEntry. Tides writes it with a tides_task. TurtleTime invoices it. Shelly can start/stop the timer with the same task id on the card.
  • Knowledge: Kraken keeps ACL. Tides and TurtleTime search linked documents through the API. Shelly search_docs / read_doc go through visible_documents(). Chunks only mirror into snail knowledge after that filter.
  • Agent: Shelly Hub is the runtime. The sidebar is the same teammate inside TurtleTime (page_context: app + path), with first-party tools for the board, the timer and the wiki. Writes land in Tides agent-inbox or wait on a Gate.
  • Outside world: one Composio connection, three uses — workspace rules, Shelly search/execute tools, Kraken Deep Search citations. Secrets stay in the API process.
  • Research: Kraken Ask and Shelly web search call CRW. SearXNG and Chrome are not on Django’s network.

The cost is real. Five URLs. A Home to launch from. ClickUp will win the demo where someone says “wait, docs are already here?” We will lose that demo. I am fine with it.

A suite is a decision about what is allowed to drift apart.

Use this shape when collapsing work into one surface is the actual risk.

Keep reading