About Tenon

Named after the oldest way to make two things act as one.

A tenon is the tongue cut into the end of one piece of wood so it fits precisely into a slot (the mortise) in another. No nails, no glue. Joinery that has held up temples and tables for three thousand years. We named the product after it because that's the feeling work should have: pieces that fit.

Why we built it

We had the same stack everyone has. A tracker for tickets. A wiki for specs. A chat app for the conversation about both. And then, in 2024, an AI assistant that could write beautifully about anything except our actual work, because it had never seen it.

The tools were individually excellent. Together they were a leak. The spec drifted from the ticket. The decision was somewhere in chat. New hires asked "where do I look?" and the honest answer was "everywhere". And every year, four vendors sent four renewals and four security questionnaires, and four times we wondered exactly where our roadmap and customer conversations were being stored.

So we built the joint. One app, one database, one permission model, one AI that reads all of it. And because the question "where is our data?" deserves a boring answer, you choose: run it on Tenon Cloud, or take the exact same software and host it yourself, for your own company, your departments, or your clients.

Principles

What we say yes and no to.

The database is the boundary

Tenant isolation lives in Postgres Row Level Security, not in application code. If a bug ships (and bugs ship), the database still says no.

Nothing hard-coded, nothing phoned home

No AI keys in the build. Self-hosted deployments send no telemetry to us. The only outbound call is the AI provider you chose, and it can be a model in your own rack.

Boring infrastructure

Static files plus Supabase. We would rather you spend your ops budget on your product than on learning our runtime.

Honest empty states

If AI isn't configured, we say so. We do not show a canned paragraph and call it an insight. The same goes for health scores, summaries and reports.

Multi-tenant from day one

Tenon Cloud runs thousands of organizations on the same architecture we hand to self-hosters. Agencies and IT teams get the same isolation we rely on ourselves: a first-week design decision, not a retrofit.

Say what we don't do

No video calls, no external shared channels, no marketplace of a thousand integrations. We would rather you know now than find out later.

How it's built

Modern, open, and deliberately unexotic.

Every layer is something your team has probably already used.

Frontend
React 18, Vite, TypeScript, Tailwind CSS, shadcn/ui, React Query, React Router
Editor
Tiptap v3 for rich text; a custom infinite canvas
Backend
Supabase: Postgres, Auth (GoTrue), Realtime, Storage, Edge Functions (Deno), pg_cron
AI
Configurable: Google Gemini or any OpenAI-compatible endpoint, via one shared abstraction
Hosting
Tenon Cloud (EU or US), or self-hosted: a static bundle on any web server + your own Supabase project
Made by
UTSL

Want to talk to the people who build it?

We answer our own email. Tell us what you're trying to do.