arrow_backAll work

Tasks

A no-nonsense task tool for personal lists and small teams, organised in nested topics.

Context
Internal tool · The Branding Club
Year
2026
Role
Design & development
Stack
Cloudflare WorkersSupabase (Postgres)Row Level SecurityPostgRESTVanilla JS

scienceAdd a task in the quick-add bar, tick one off and undo it, drag cards on the board or onto a topic in the sidebar, and switch between the team and your personal list in the top right. Everything in this demo is dummy data.

open_in_fullFull screen
locktasks.demo

Tasks is the task tool I built for colleagues at The Branding Club: a private personal list plus shared team workspaces, organised in topics of any depth, with a list and a board view. It replaced a mix of notes apps, chat threads and a spreadsheet nobody kept up to date.

The problem

Follow-ups were scattered: some in a personal notes app, some in chat, some in a shared sheet. People wanted one place for their own to-dos and a shared list per team, without the weight and per-seat cost of a full project management suite, and with the same login as the rest of our internal tools.

The approach

The front-end talks straight to PostgREST with the user's own token; there is no data API in the Worker at all. Row Level Security does the separation: a row without a team belongs to its creator, a row with a team is visible to that team's members, so picking the wrong workspace can at worst show an empty list, never someone else's tasks. The only server route is the invite: it creates an unguessable token, refuses addresses that could never sign in, and mails the link; accepting it runs a security-definer function. The UI is plain JavaScript with optimistic updates, debounced autosave, undo on complete and a topic tree of any depth.

Highlights

  • checkPersonal list and team workspaces, separated by Row Level Security rather than app code
  • checkTopics nested to any depth; deleting one moves its tasks to the Inbox
  • checkOptimistic updates with debounced autosave and undo on complete
  • checkBoard view with drag and drop between statuses
  • checkTeam invites with unguessable tokens, limited to addresses that can actually sign in
  • checkStakeholder field that remembers names per workspace