sawera/sawera-boards
Sawera Boards - a team task board for the Dodil Boards Challenge. Boards, lists, cards, roles, activity log, MCP actions and AI extras. FastAPI + DataK3 + appid + Models + MCP.
A remix template · 0 remixes · Remix sawera/sawera-boards
schema.sql
-- Created once by the remix, in the bucket it makes. Natural keys only: DataK3 has no sequences.
CREATE TABLE IF NOT EXISTS boards (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
owner_email TEXT NOT NULL,
created_at TIMESTAMP
);
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 -- owner | member | viewer
);
CREATE TABLE IF NOT EXISTS lists (
id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
name TEXT NOT NULL,
position DOUBLE PRECISION NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS cards (
id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
list_id TEXT NOT NULL,
list_name TEXT, -- denormalized copy of the list name; older buckets
-- (remixed from the starter) require it NOT NULL and
-- DataK3 cannot drop that constraint, so it is always written
title TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
assignee TEXT,
due_date DATE,
labels TEXT NOT NULL DEFAULT '', -- comma-joined, cleaned by the domain
position DOUBLE PRECISION NOT NULL DEFAULT 0,
blocked_by TEXT NOT NULL DEFAULT '', -- comma-joined card ids, same board
embedding TEXT NOT NULL DEFAULT '', -- JSON {"h": text hash, "v": [floats]} for
-- semantic search; '' until first computed
updated_at TIMESTAMP
);
CREATE TABLE IF NOT EXISTS comments (
id TEXT PRIMARY KEY,
card_id TEXT NOT NULL,
author TEXT NOT NULL,
body TEXT NOT NULL,
event_at TIMESTAMP
);
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,
event_at TIMESTAMP
);