Documentation

How Kopi works.

An AI approval ops agent for SEA SMBs. Hand Mirror your policy doc; she builds a runnable approval flow in three minutes, with verbatim citations.

Why

Approvals leak at the doc-to-form handoff

Most SMB approval flows live as policy docs nobody reads, plus a Slack / Lark / email chain that re-derives the same rules every time. A vendor gets paid without an invoice. A reimbursement skips the cap. A leave request bypasses HR. The handoff between “what the policy says” and “what the form actually enforces” is where the leakage lives.

Kopi closes that loop. Mirror reads your existing docs, extracts the form + rules + routing, and runs the resulting spec against every submission. When a rule fires she cites the exact sentence from the source. No hallucinated rules, no “trust me, this is policy.”

Capabilities

What Kopi does today

Onboarding

Mirror turns docs into runnable forms

Drop policy PDFs, form screenshots, or FAQ docs. Five Claude stages — Fields, Rules, Routing, Currency & Compliance, Self-critique — generate a TemplateSpec in about three minutes. Every item carries a verbatim source quote.

Channels

Web · Email · Slack · Lark

A submission can come from anywhere. Reviewers see the same three-color verdict in HTML email, the /approvals/<id> audit page, Slack DMs, Lark cards, or chat with Mirror in /app. Web is the default; the rest are accelerators.

Runtime

Pure-code decisions in ~4ms

runTemplate(spec, request) → Decision is pure code. No LLM at decision time. Spec is data, runtime is deterministic. Decisions carry the full routing trace and rule-firing receipts for audit.

Workspace agent

Mirror is chat-first in /app

The right drawer is Mirror. The center panel renders whatever she most recently fetched — forms, submissions, settings, simulation results. She has 14 tools and reads your spec live.

Day one

Instant demo workspace

Click 'Show me a demo' on a fresh workspace and a Travel Reimbursement template + 3 sample submissions (green, yellow, red) land in 200ms — no extraction wait. Tagged as demo; one click to clear.

Memory

Full audit + learning rule library

Every submission keeps the exact payload, the decision Mirror computed, attachment OCR results, who acted on it and when, and a comments thread. Confirmed mappings sediment into the rule library for next time.

✦ The Mirror pipeline

Five stages, ~3 minutes, $0.30 per onboarding with prompt caching. Stages 2–4 run in parallel after Stage 1 finishes.

  1. Stage 1

    Fields

    Every input — label, type, required-ness, source quote

  2. Stage 2

    Rules

    IF-THEN business rules with severity (info / warn / block)

  3. Stage 3

    Routing

    Approver chains — fixed users, by-field, by-amount tiers

  4. Stage 4

    Currency + Compliance

    Base currency, GST/VAT/SST signals

  5. Stage 5

    Self-critique

    Reviews 1–4, surfaces clarifying questions

Get going

Quick start

  1. 1

    Sign up

    Visit hellokopi.com/signup — magic link or Google OAuth, no install.

  2. 2

    Meet Mirror

    Land on /app. Mirror greets you with three chips: Show me a demo / Drop my docs / I'll explore. Pick demo for an instant working workspace, or skip straight to your real docs.

  3. 3

    Drop a policy doc

    PDF, PNG, JPG, or WebP. Up to 5 files, ≤8MB each. Mirror runs Stage 1–5 and surfaces the draft in ~3 minutes.

  4. 4

    Review the draft

    Four tabs — Fields, Rules, Routing, Currency & Compliance. Every item has a verbatim quote and a confidence pip. Edit inline or ask Mirror in chat.

  5. 5

    Apply & go live

    You get a public form URL — hellokopi.com/forms/<workspace>/<slug>. Share with your team. Submissions auto-clear when they pass; flag yellow when a rule fires; block red on a hard cap.

Architecture

Source → Event → runTemplate → Surface

The conceptual model is four layers. Sources ingest external input (web form, email, Slack, Lark, API) into a durable ApprovalEvent. Surfaces render the event for an actor (HTML email, web review page, Slack DM, Lark card). The decision layer runTemplate between them is pure code, channel-agnostic.

   Source (Web · Email · Slack · Lark)
            │
            ▼
   ApprovalEvent (durable, channel-agnostic record)
            │
            ▼
   runTemplate(spec, request) → Decision      ← pure code, ~4ms, no LLM
            │
            ▼
   Surface (HTML email · /approvals · Slack card · Lark card)
  • Spec is data, not code. Mirror generates a TemplateSpec JSON per template; the runtime compiles it at request time. No per-tenant TypeScript.
  • Sources ingest, Surfaces render. Web / Email / Slack / Lark are interchangeable on both ends; the decision layer doesn’t care.
  • Citation contract is non-negotiable. Every field, rule, and routing approver carries a verbatim quote. No quote → drop the item.

Stack

What it’s built on

Frontend + API
Next.js 14 (App Router) on Vercel Fluid Compute
Database
Supabase (PostgreSQL)
AI
Claude Sonnet 4.6 via Anthropic API
Auth
Magic Link via Resend + Google OAuth
Email
Resend (transactional + inbound)
Storage
Supabase Storage
Analytics
Vercel Analytics + GA4
Channels
Slack OAuth, Lark webhooks, web forms, inbound email

Page map

Where things live

/

Landing, pricing, FAQ

/app

The workspace — Home · Submissions · Forms · People · Settings

/forms/<workspace>/<slug>

Public submission form

/approvals/<id>

Approver review page with full audit + comments

/login · /signup

Auth (magic link + Google OAuth)

/solutions/*

Solution-specific landing pages (expense, leave, procurement, …)

/blog

Articles on approval automation

/docs

This page

Status

Where we are

  • Phase 1–2

    In production

    Lark webhook + 5-dimension AI check + three-color cards + auto-learning rule library + admin dashboard. Live with a paying customer.

  • Phase 3

    Active (Q2 2026)

    Multi-channel platform + Mirror. Web + Email is the default; Slack and Lark are accelerators. v1 shipped on hellokopi.com — 5 tenants, 3 active templates, 70+ approval events.

  • Iterating

    Now

    Onboarding UX (demo workspace, first-run nudges, four-tab Settings), submission detail UI, Mirror extraction precision (currently 0.89 overall confidence on real customer docs).

Ready to try?

See it on your own policy.

Free during private beta. Drop a doc, see the spec in three minutes. No demo scheduling.