All projects
  • Co-founder
  • Full stack
  • AI search
  • 2026

scri8e

Answers from a team's Slack, Google Drive and Notion. Every source is cited, nobody sees a document they couldn't already open, and each answer says whether it's still true.

Live at scri8e.in with self-service sign-up and paid plans at $99 and $249 a month. Pre-revenue: no external customers yet.

Timeline
June 2026 to now
Role
Co-founder, lead engineer
Status
Live, pre-revenue
Stack
FastAPI, Next.js, Postgres, pgvector

0

permission leaks found

8 end-to-end suites against production

90%

of questions find the right source in the top 8, up from 80%

Measured on production text

16 / 16

contradictions caught, 0 false alarms in 20

On a tuned set, so optimistic

813

tests, 207 of them on real Postgres + pgvector

CI on every push

scri8e answering a question about paid leave, stamped Sources Disagree, with a Drive handbook and a Slack announcement cited
scri8e answer with citations on a phone

Who's allowed to see this?

Same question, different people. Pick who's asking and watch which sources unlock. Fictional workspace, canned data.

Loading the workspace…

The problem

Small teams keep what they know in Slack threads, Notion pages and Drive files. One person ends up answering "where is X" and "what did we decide" all day. Before writing code we ran more than ten discovery calls with software and design agencies. Generic AI search failed them three ways:

  • No sources. Nobody can check where an answer came from.
  • Leaks. Index everything into one store and a private channel or a restricted file can surface in a colleague's answer.
  • Stale confidence. A two-year-old policy page and last week's announcement sound equally sure, and when they disagree, nothing says so.

What I built

A knowledge layer for 10 to 50 person teams, read-only by design. It never posts, edits or deletes anything in a connected tool.

For everyone

Ask
Answers stream back with numbered citations, one card per source, a freshness verdict and the date of the newest source. Follow-ups like "who approved that?" carry the previous question.
Verified answers
Anyone can verify a good answer. A repeat question is then served without calling the model, but only to people who can see every source, and only while none of them has changed.
Connect your Drive
Each person connects their own Google Drive and picks which folders it reads. Deselect a folder and what was indexed from it goes at once.

For admins

Sources and scope
Slack and Notion are connected once, with a picker for channels, pages and databases. Daily re-sync plus a reconcile every six hours.
Governance
Uploads restricted to named people, an approval queue, "replaced by" links, a freshness page per source, and an append-only audit log.
Team and billing
Work-email sign-up, one workspace per company domain, join requests, seat limits per plan. Paid plans through a merchant of record, no free trial.

More of the product

Real screens with a fictional demo brand and made-up data.

scri8e knowledge sources page with Slack, Notion and Google Drive connected and their scope
scri8e knowledge freshness page listing sources and how current they are
scri8e answering how on-call rotation works, stamped Still True, citing a Notion runbook and two Slack messages
scri8e workspace admin with document counts, uploads restricted by access, and a pending approval queue
scri8e answer with citations on a phone

Architecture

Tap any part to see the decision behind it and what it cost.

Browser

API and workers, on a VPS

Data

Postgres + pgvector

Decision
Permissions enforced in one SQL block at query time. Semantic search, keyword search, table expansion, "latest" and verified answers all go through it.
Why
There is no second permission path to drift. Anything that matches no rule is invisible: it fails closed.
Trade-off accepted
Each source's sharing model has to be expressible in SQL. Notion's isn't, so Notion pages are visible to the whole workspace, and the product says so.

Outside services

Key decisions and trade-offs

  • Permissions checked at query time, in one SQL block

    Why: Every retrieval path shares one rule

    Cost: Notion can't be mirrored, so it's workspace-visible and disclosed

  • Fail closed

    Why: A missing identity link hides a document instead of exposing it

    Cost: Some legitimate documents stay hidden until their owner connects

  • Self-hosted embeddings, hosted answer model

    Why: Privacy for the corpus, speed for the answer

    Cost: A VPS to run, and a token budget per minute

  • Two embedding columns per chunk

    Why: Switching or rolling back an embedding version is a setting, not a re-embed

    Cost: Twice the vector storage

  • Read-only product

    Why: Trust: it never writes to a connected tool

    Cost: No Slack bot or write-back features, by choice

Hardest problems

  1. Answers that never leak

    Problem
    One index over three tools, each with its own sharing model: public and private Slack channels and DMs, per-file Drive sharing, Notion with no readable sharing at all, plus restricted uploads.
    Approach
    Every document stores the shape of its source's permissions. One query decides visibility for the person asking: private channels only if their linked Slack id is a member, Drive only if they're on the file's list. For Drive, whoever owns a file decides its permissions; anyone else's sync indexes it hidden until the owner connects.
    Result
    Verified live with two real Drive accounts and private Slack channels. A production end-to-end run that created its own workspaces found no leak.
  2. A hole in the database's own API

    Problem
    A pre-launch audit found the database's browser roles held every privilege on every table. A signed-in user could have read past the permission rules, made themselves owner or switched off the paywall, skipping the backend entirely.
    Approach
    Revoked every table from the browser roles, so the browser uses Supabase for sign-in only, and added a test that fails if a grant comes back.
    Result
    Fixed and verified on production before any other team could sign up.
  3. Saying when an answer is out of date

    Problem
    A confident answer built on an old document is worse than no answer.
    Approach
    Judge the newest cited source against its type's half-life, add a caveat when the evidence is old or rests on one source, and flag "Sources Disagree" when cited sources contradict, naming the newer one. A sheet, its xlsx and its PDF count as one source.
    Result
    16 of 16 contradictions caught with 0 false alarms in 20 consistent pairs. The prompt was tuned on that set, so I treat those numbers as optimistic.
  4. Retrieval that finds the right document

    Problem
    Plain-language questions over chat messages, tables and long documents.
    Approach
    Hybrid search in one SQL statement, a cap of 3 chunks per document so one long file can't take every slot, Notion tables expanded into rows, and the newest chunks added for "latest" questions. Embedding prefixes were measured on production text before switching.
    Result
    The source document reached the top 8 for 90% of test questions, up from 80%.
  5. A model that ignores the citation format

    Problem
    About half the time the answer model wrote citations in its own bracket format instead of [3], even when told not to.
    Approach
    Normalise every marker form back to [n] on the server and while streaming in the browser, keep only sources actually cited, renumber them, and trim the prompt to a fixed budget before the call.
    Result
    Citations render the same every time, and long histories or big Notion tables no longer fail the request.

Outcomes

Shipped

  • Live in production at scri8e.in: Team at $99 a month for up to 15 people, Business at $249 for up to 50.
  • Self-service sign-up, onboarding with guided tours, and a paywall.
  • Pre-launch hardening: account and workspace deletion, the database grants fix, per-person rate limits, security headers, CI on every push.

Measured

  • New-customer end-to-end test against production: 8 suites, 24 findings fixed, no access-control leak.
  • 606 unit tests and 207 integration tests on real Postgres with pgvector.
  • 61 production bugs logged, each with its cause and fix.

Not used yet, and I'd rather say so

Pre-revenue, with no external customers yet. So far it has run on an internal test workspace and a new-customer test against production. The next step is the first teams, through founder-led outreach to agencies.

Stack

Frontend
Next.js 16, React 19, TypeScript, Tailwind 4, Vercel
Backend
Python, FastAPI, async SQLAlchemy, Redis queue, Docker Compose, Caddy
Data and AI
Postgres, pgvector (HNSW), full-text search, Ollama embeddings, Groq
Integrations
Slack, Google Drive, Notion, Nango, Dodo Payments
Testing
pytest, Playwright, GitHub Actions

My role

Co-founder and lead engineer. scri8e has two founders, and I built most of it.

  • My part: product and architecture, Slack and Notion ingest, retrieval and the answer pipeline, the freshness and conflict engine, permission mirroring including per-person Drive, role checks on every route, accounts, onboarding, billing, the pre-launch security pass, the end-to-end suites, and the current site and app design.
  • My co-founder's part: the first Drive integration and auto-sync, the embedding prefix switch and re-embed tooling, verified answers, admin upload management, the first billing integration, and the contact and refund pages.

Timeline

  1. Jun 2026

    First commit: landing page and brand

  2. Jul

    Slack, Notion and Drive connected; first freshness work

  3. Aug

    Per-document Drive permissions and per-person connections

  4. Sep

    Marketing site, verified answers, conflict detection

  5. Oct

    Billing, paywall, work-email accounts, pre-launch security pass

  6. Nov

    End-to-end test against production, 24 fixes, new site and app design

Want the longer version, or the parts I couldn't put on a page?

Ask me about it

More work

  • Contract
  • Solo
  • POS
  • 2026

A back office and a table-service POS for a multi-outlet cafe chain in India. Two Next.js apps on one Postgres database, built alone, with every rule that touches money enforced in the database.

6 in 5 daysoutlets live on the new POS

96%fewer serverless requests

  • Solo
  • AI
  • Launched in 2 days
  • 2026

Three AI hackathon judges who read your repo before the real ones do. Every README claim is traced to the file that would implement it, you answer three questions against a 30-second clock, and your odds move live. The model never sets a number.

0numbers set by the model

$0.006per full judging session

All projects

Got something worth building?