mobiledev/taskflow

TaskFlow, a team task board you run from the web or from Claude and ChatGPT. FastAPI + DataK3 + appid + Models + MCP.

A remix template · 0 remixes · Remix mobiledev/taskflow

schema.sql

-- Created once by the remix, in the bucket it makes. Natural keys only: DataK3 has no sequences.
-- Small lists (board lists, labels, dependencies, checklists) are JSON text.
CREATE TABLE IF NOT EXISTS boards (
  id TEXT PRIMARY KEY,
  title TEXT NOT NULL,
  owner_email TEXT NOT NULL,
  lists TEXT NOT NULL,            -- ["To do", "Doing", "Done"]; the list called Done means done
  card_seq INTEGER NOT NULL       -- highest card number claimed (#1, #2, ...)
);
CREATE TABLE IF NOT EXISTS memberships (
  id TEXT PRIMARY KEY,            -- board_id + ':' + email
  board_id TEXT NOT NULL,
  email TEXT NOT NULL,
  role TEXT NOT NULL              -- member | viewer (the owner lives on boards)
);
CREATE TABLE IF NOT EXISTS cards (
  id TEXT PRIMARY KEY,
  board_id TEXT NOT NULL,
  number INTEGER NOT NULL,        -- #12 on its board
  title TEXT NOT NULL,
  list_name TEXT NOT NULL,
  position DOUBLE PRECISION NOT NULL,
  description TEXT,
  assignee TEXT,
  due_date DATE,
  labels TEXT,                    -- ["billing", "urgent"]
  blocked_by TEXT,                -- [card ids on the same board]
  checklist TEXT,                 -- [{"text": "...", "done": false}]
  updated_at TIMESTAMP
);
CREATE TABLE IF NOT EXISTS card_numbers (
  id TEXT PRIMARY KEY,            -- board_id + ':' + number; claimed by a plain INSERT
  board_id TEXT NOT NULL,
  number INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS activity (
  id TEXT PRIMARY KEY,
  board_id TEXT NOT NULL,
  card_id TEXT,
  actor TEXT NOT NULL,
  action TEXT NOT NULL,           -- "moved #12 from To do to Done"
  changes TEXT,                   -- {"list_name": ["To do", "Done"]}
  event_at TIMESTAMP
);