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
);