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