Capabilities · Keystone

Every capability, on one page.

The dense version, by area. For the buyer who reads every spec sheet before booking the call.

CRM Core

Companies
List view, full-text search, inline-edit fields, custom fields, ownership-scoped RLS, domain-based dedup on import.
Contacts
Auto-linked to email and calendar via Microsoft 365 sync, EmailList with intent badges on every detail page.
Deals
Cross-pipeline table, inline-edit (amount, status, stage), AI score + risk flags written by background worker.
Custom fields
Per-tenant custom fields on companies, contacts, deals. Owner-only RLS by default.
Ownership / RLS
Supabase Row-Level Security, owner_id = auth.uid() pattern, SECURITY DEFINER admin helpers.
Search
Global Cmd+K palette with cross-entity search, 120ms debounce, arrow-key navigation.
Import
Zoho CSV importer at /import, drag-drop, auto-detect type from headers, batch insert 100/batch, idempotent upsert on domain.

Pipeline

Multi-pipeline
Tabs at /pipeline; per-pipeline kanban; 4 default pipelines seeded.
Drag-to-stage
@dnd-kit drag handles, optimistic update on drop, rollback on server error.
Stage cascade
New-deal form cascades stage options from chosen pipeline.
Status rollups
Open / Won / Lost total value, deal count, win-rate on /reports.
Pipeline-by-stage table
Open pipeline grouped by stage with brand badges, on /reports.

Activities

Types
Note, task, call, meeting, email — composable on every company / contact / deal detail page.
Due dates
Tasks accept due dates; overdue rows highlighted cinnabar; sorted-by-due-date list at /tasks.
Completion
Inline completion checkboxes; task state persists.
Timeline
ActivityTimeline embedded on every detail page; chronologically ordered.
Cross-entity
/tasks lists open tasks across every company, contact, and deal.

Inbox / Email

M365 sync
Worker pulls /me/messages and /me/calendarview since last_synced_at; upsert with onConflict to dedupe.
Auto-link emails to contacts
By from-address; cascades to linked deals via contact relationships.
Intent triage
Sonnet 4.6 tags every inbound email: intro / objection / buying_signal / scheduling / churn_risk / unrelated.
Draft replies
Auto-drafted for the four reply-worthy intents; lands in inbox as a suggestion card.
EmailList on contacts
Renders inbound threads on contact detail with cinnabar intent badges.
Manual + scheduled sync
Sync button in app shell + worker tick on 5-minute cadence.

AI

Record Chat
Sonnet 4.6 sidebar on every detail page; full record context cached (related rows, last 30 activities, last 20 emails).
Deal Scoring
Opus 4.7 background worker; scores up to 20 open deals per user per cycle; writes ai_score and ai_risk_flags.
Email Triage
Sonnet 4.6 in worker tick; 15 emails per tick; failed triage marked unrelated to avoid retry loops.
Suggestion cards
Pending AI suggestions at /inbox: draft_email and next_action types with Accept / Dismiss / Open actions.
Model transparency
Every AI surface labels its model; locked selection (no model routing).
Data handling
Anthropic-only; records never train models; ephemeral prompt cache only.

Suite Integration

Suite 360 tab
Per-company URL-driven tab (?tab=360) with 4 product cards (Forge, Cadence, Meridian, Beacon).
Suite adapters
SuiteAdapter interface with concrete adapters for Forge, Calibrate, Cadence, Meridian, Beacon.
customer_view materialized view
Aggregated rollups (open_deals_count, last_activity_at) refreshed via RPC after every suite sync.
Manual link
Calibrate-specific manual link (intentional, per design).
Source labeling
Every payload tagged with source product and swap-when marker for future UI.

Admin

Microsoft 365 SSO
Azure AD app, OIDC, primary auth path.
OTP fallback
6-digit OTP via SendGrid SMTP; browser-agnostic, survives Safe Links.
Role management
Admin / member roles; super-admin bootstrap via SECURITY DEFINER helper.
Audit log
actor_via tag on mutations; copilot-driven actions explicitly flagged.

Security

RLS
Supabase Row-Level Security on every table; owner_id = auth.uid() default policy.
SECURITY DEFINER helpers
For admin lookups that cross RLS boundaries; explicit grants only.
Encrypted at rest
Supabase Postgres default encryption.
TLS in transit
HSTS preload, max-age=63072000.
Token rotation
OAuth refresh-on-demand when expires_at < 5 min.

API

JWT-authed
Supabase auth JWT; RLS evaluates on every request.
Server actions
Next.js server actions in apps/web/lib/actions/ for typed mutations.
Webhook in/out
Inbound webhook endpoints for suite adapters; outbound webhook for Trinity Identity revocation.
OpenAPI
Spec to be published with Trinity Product Integration Contract v1.

Read every row and still curious? Let's talk.

Book a Keystone walk-through