ghpsolutions/quadro
Quadro: team boards with roles, history and an MCP endpoint for Claude and ChatGPT
A remix template · 0 remixes · Remix ghpsolutions/quadro
schema.sql
-- Quadro schema. Created by the remix in the new bucket, and re-applied (IF NOT EXISTS) at start.
-- DataK3 has no sequences: every key is natural or generated by the app. Card ids are
-- "<board id>-<number>", claimed with a plain INSERT so two people cannot get the same number.
-- Times are ISO-8601 UTC text and dates are YYYY-MM-DD text, which sort correctly as text.
CREATE TABLE IF NOT EXISTS boards (
id TEXT PRIMARY KEY,
board_key TEXT NOT NULL,
title TEXT NOT NULL,
owner_email TEXT NOT NULL,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS memberships (
id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
email TEXT NOT NULL,
role TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS board_lists (
id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
name TEXT NOT NULL,
sort_order DOUBLE PRECISION NOT NULL,
is_done BOOLEAN NOT NULL
);
CREATE TABLE IF NOT EXISTS cards (
id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
card_number INTEGER NOT NULL,
list_id TEXT NOT NULL,
title TEXT NOT NULL,
description TEXT NOT NULL,
assignee TEXT,
due_date TEXT,
labels TEXT NOT NULL,
blocked_by TEXT NOT NULL,
sort_order DOUBLE PRECISION NOT NULL,
row_version INTEGER NOT NULL,
archived BOOLEAN NOT NULL,
created_by TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS comments (
id TEXT PRIMARY KEY,
card_id TEXT NOT NULL,
board_id TEXT NOT NULL,
author TEXT NOT NULL,
body TEXT NOT NULL,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS activity (
id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
card_id TEXT,
card_ref TEXT,
actor TEXT NOT NULL,
action TEXT NOT NULL,
changes TEXT NOT NULL,
note TEXT NOT NULL,
happened_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS card_embeddings (
card_id TEXT PRIMARY KEY,
board_id TEXT NOT NULL,
digest TEXT NOT NULL,
embedding TEXT NOT NULL
);