Getting started

Overview & core flows

Taskflow trades feature sprawl for one clear loop: plan today, ship it, reflect. Here's the full surface area in one page.

What it is

Taskflow is a real-time task manager for teams of two to five people. There's no password screen, no onboarding wizard, no feature list of due dates and sub-tasks and labels and Gantt charts. You enter an email, click a link, and you're in your workspace. Changes appear for everyone else as you type.

The design is deliberately minimal: three task states, two flags, one notes field per project. The interesting surface is elsewhere — the realtime plumbing, the gamification that nudges daily use, and Copilot that knows your workspace.

Core concepts

Workspace
A shared container. Holds members, projects, tasks, feed, standups. One UUID.
Member
A person with an email, a name, and an avatar color. Belongs to exactly one workspace row.
Project
A named bucket of work with an emoji. Tasks live inside projects. One auto-saving notes field each.
Task
Has a status (today / backlog / done) and two flags: is_important, is_blocked.
Feed
Workspace-level activity stream: posts, completed tasks, standup summaries.
Standup
Daily yesterday / today / blockers upsert, optionally posted to the feed.

Getting started

  1. 1

    Open /start and enter your email

    Supabase sends a one-time magic link. There is no password field anywhere in the app — the link itself is the credential.
  2. 2

    Create or pick a workspace

    If your email has never been seen, you'll be prompted to name a workspace. If you've been invited to one or more, you'll see a picker. Either way, your identity is cached in localStorage so future visits skip the email step entirely.
  3. 3

    Share the URL with your team

    From the Settings page, add teammate emails. They follow the same flow — magic link, pick the workspace, done. There is no separate invitation email; the workspace simply appears in their picker when they authenticate.
Note
Want to skip all this? The demo workspace is open with no auth. Mutations work but are shared with anyone else poking around.

Task lifecycle

Every task has exactly one status. The check-box moves it to Done; a drag or a context menu moves it to Backlog. Two orthogonal flags ride along — importance (pins to top, bonus XP on completion) and blocked (fires a notification to the assignee, surfaces in standup blockers).

State diagram: Backlog ↔ Today → Done, with flags is_important and is_blocked.
Three states. Transitions are symmetric except Done → Today, which is an 'uncheck' and clears completed_at.

The five views

One sidebar, five destinations. Each is a different lens on the same data — they never hold any state the database doesn't.

Today view showing active tasks grouped by project.
Today — active tasks grouped by project. The starting point every morning.
Project view showing today, backlog, and done columns with a notes panel.
Project — all tasks in one project split into today / backlog / done, plus a markdown notes panel that auto-saves.
Week view showing tasks planned by target_date across seven days.
Week — tasks placed on days via target_date. Drag across columns to replan.
Pulse view showing project health indicators and activity pulse.
Pulse — project health at a glance. Green/yellow/red based on momentum signals.
Activity feed with posts, task completions, and standup entries.
Feed — workspace-level activity. Posts, auto-logged task completions, standup summaries.

Project notes

Each project has one free-form markdown field. Edits debounce for about 500 ms then write content and updated_at. Remote edits merge via last-write-wins — if two people type simultaneously, whoever saves last wins the race, but you'll see each other's keystrokes within a few hundred milliseconds via the realtime channel.

No history
Notes are a single row, not a document with revisions. Treat them as a scratchpad, not a wiki. We deliberately avoided a versioning system to keep the data model boring.

Keep going

Now that you've seen the shape of the app, the next page explains how the sync actually works.

Architecture & real-time →