Ask me about him. I'll answer and take you there.

Ask your own question
← Back to the page

The full story · Oct 2026 to now · solo · 210 commits

Teamora

A real-time workspace for documents, sheets, slides, whiteboards, tasks, chat and meetings, on a cluster I built.

Watch the demo ▸
5services, plus workers for email, jobs, indexing and speech
273automated tests, and 10 full browser flows
17architecture decisions written down
15 sor less to restore in recovery drills

The hard parts

"Saved" has to mean saved

Problem
In a shared editor, an edit can be lost between your screen and the server without anyone noticing.
What I did
"Saved" appears only once the server has committed your edit. Until then the draft waits in the browser, and it survives reloads and dropped connections.

One place decides who can see what

Problem
When every route checks permissions its own way, they drift apart and something leaks.
What I did
A single permission service answers for everyone. If it cannot answer in time, access is denied, and people outside a workspace cannot tell it exists.

An assistant that cannot bluff

Problem
An AI that invents answers or acts alone is dangerous inside a team's documents.
What I did
It answers only from quotes it can cite, and says "not known" otherwise. Actions pause for your approval, which re-checks your permission. A 55-case test set guards it.

A "database outage" with a healthy database

Problem
Creating an assigned task returned "service unavailable", yet every service and the database were healthy.
What I did
The ORM was trying to save a half-built task during a lookup. I reproduced it in a real-database test and fixed the order: build the task first, save it last.

Also in it

  • Four editors: documents, spreadsheets, presentations and whiteboards
  • Import and export for DOCX, PPTX, XLSX, CSV, Markdown and PDF
  • Tasks, calendar, chat, reminders and notifications
  • Meetings with live captions, searchable transcripts and cited summaries
  • Google sign-in with rotating, revocable sessions
  • An MCP server, so coding agents can use the same tools
  • Used by people besides me to co-edit documents
  • Releases through GitHub Actions with no stored AWS keys

Built with

GitTypeScriptHTML and CSSAutomated testingReactRESTAWSDockerLLM APIsPythonSQLMicroservicesDocker ComposeArchitecture decision recordsKubernetesRedisGitHub ActionsOIDC federationTool callingHuman-in-the-loopSSETransactional outboxRate limitingPostgreSQLKafkaIndexedDBNginxGrounded answersPrompt-injection defenceSpeech (STT / TTS)OAuth 2.0 / OIDCJWTPlaywrightpytestTestcontainersVitestGrafanaFastAPIgRPCWebSocketspgvectorRabbitMQCeleryRAGLangGraphLangChainMCPLLM evaluationWebRTC (LiveKit)OpenTelemetry

How it runs

Browser
IdentityWorkspaceContentRealtimeAssistant
PostgreSQLRedisRabbitMQRedpanda
Kubernetes on AWS, started on demand, rollback by moving one pointer

More screens

Honest gaps

Sustained load testing and a voice for the assistant.