Slate

Send it anything. Ask for the document later.

Capture a line, a photo or a voice note without filing it. Ask for a document and Slate writes it in your organisation’s format, citing every block to the material behind it.

Open the project site Source private — happy to walk through it
3surfaces, one backend
RLStenancy in Postgres
Citedevery block sourced
The inbox: everything captured, nothing filed until it can be cited.
§ 01

What it does

01

Capture never waits on a model and never asks where a thing belongs

02

Reads a document’s shape from last year’s copy, then fills it

03

Every block cites the material it came from; gaps become questions

04

Multi-tenant isolation enforced by Postgres row-level security

05

Telegram bot, React dashboard and Ratatui terminal over one backend

Stack
  • Rust
  • Python
  • Postgres RLS
  • Cloud Run
  • Vertex AI
  • React
The long version

Every organisation runs on documents with a fixed shape and moving content — a question paper, a ward handover, an incident report. Nobody writes those; they fill them. Every tool built to help asks which project a note belongs to at exactly the moment nobody has time to answer.

Slate splits keeping from filing. Anything sent to the Telegram bot, the dashboard or the terminal is stored at once, with no model in the path. When a document is asked for, a deterministic gateway routes the request, retrieves the material, and hands it to the drafting agents inline — so one drafting path serves a chat with no session token as well as a signed-in browser.

Each block of the draft names its sources, and a required section with nothing behind it parks the run and asks the person, on the surface they asked from. Tenancy is enforced by Postgres row-level security rather than by query discipline, so an agent cannot read another team’s documents even if it tries.