←Pierre Sauvignonlobsterone.ai ↗
Case study · LobsterOne

LobsterOne Case Study

LobsterOne shows developers and teams how they actually use AI coding tools: tokens, cost, sessions, lines of code and quota, across Claude Code, Codex, Cursor and other assistants, with personal dashboards and team and global leaderboards. I designed, built and run the whole system solo, from the first commit in March 2026: a native Mac menu bar app, an AWS serverless ingest and analytics backend, the web dashboard, an admin backoffice and the marketing site.

The LobsterOne web dashboard with tokens, cost, quota and activity
The LobsterOne web dashboard: tokens, cost, quota, activity and leaderboard rank, as shown on lobsterone.ai

At a glance

RoleSole engineer and product owner
PeriodMarch 2026 to today, about 1,320 commits across 6 repositories
ProductmacOS menu bar app plus web dashboard, free for individuals, $4.90 per seat per month for teams
StackAWS serverless (Lambda, API Gateway, SQS FIFO, DynamoDB, Cognito, EventBridge), RDS PostgreSQL, Swift, Next.js 16, Astro
ProvidersClaude Code, Codex, Cursor, Mistral Vibe
AIClaude Opus 4.6 usage advisor, Claude Haiku 4.5 game characters
Scale32 Lambda functions, 5 CDK stacks, 98 SQL migrations, 8 queues, about 70 API routes

Traction

LobsterOne is an invite-led product with heavy users. Since March 2026 it has tracked 1.93 billion tokens of AI coding work, $166k of API-equivalent spend and 4 million AI-written lines of code for 15 developers across the US, Australia and Germany.

MetricValue
Registered accounts39
Accounts that sent usage data15
Active in the last 30 days11
Organizations with team dashboards2
Tokens tracked (input + output, cache excluded)1.93 billion
Cached input tokens read217 billion
API-equivalent cost tracked (Claude Code)$165,800
Claude Code sessions20,525
Lines of code added by AI tools3.98 million
Commits and pull requests made by AI tools13,761 and 1,957
Raw telemetry rows held (90-day window)about 176 million
Monthly tokens grew 59x from March to the August peakInput + output tokens tracked per month, cache excluded; active developers under each monthMar 2026: 10M tokens, 4 active developers10MMar4 devsApr 2026: 24M tokens, 3 active developers24MApr3 devsMay 2026: 65M tokens, 5 active developers65MMay5 devsJun 2026: 124M tokens, 5 active developers124MJun5 devsJul 2026: 541M tokens, 14 active developers541MJul14 devsAug 2026: 613M tokens, 14 active developers613MAug14 devsSep 2026: 347M tokens, 12 active developers347MSep12 devsOct 2026: 210M tokens, 10 active developers210MOct10 devsOctober to the 16th
LobsterOne production database (metrics_daily) · tokens and active developers by month, Mar to Oct 2026

Usage jumped in July 2026, when 17 new accounts signed up and active developers went from 5 to 14. Figures are from the production database on 16 October 2026; one internal admin account is included.

The product

A developer installs the Mac app and signs in with email or GitHub. The app configures Claude Code to send its OpenTelemetry metrics to LobsterOne and scans the local session files that Codex and Mistral Vibe write. From then on the menu bar shows today's tokens and how much of the plan's quota is used, for example 7.6M / 33%, with the real 5-hour and weekly limits read from Anthropic and OpenAI.

The web dashboard turns that stream into usage by day, model and session, cost, lines of code, commits and pull requests, and an estimate of the CO2 behind it. One Today / 7 days / 30 days switch drives every widget. A GitHub connection matches commits to AI-assisted sessions, and an advisor powered by Claude Opus reviews a user's habits and suggests changes.

The social layer is what brings people back: 14 leaderboards (global, organization, country, role, company size, efficiency and more), 113 achievements, XP, public profiles and challenges. Teams get a private leaderboard and team analytics, and anyone can opt out of public boards.

The hard part is the data, not the dashboard. Each tool reports usage its own way, some as running totals and some as increments, and users compare every number with what their terminal says. Getting those numbers right took more engineering than any screen.

Architecture

Every client goes through one gateway; telemetry is queued before PostgresMac menu bar appSwift, Sparkle updatesCodex + Vibe scannersAI coding CLIsClaude Code, CursorOpenTelemetry exportWeb dashboardNext.js 16S3 + CloudFrontBackofficeNext.js admin12 pagesAPI GatewayAPI-key authorizer on a DynamoDB cache, Cognito JWT across 2 user poolsIngest Lambdas/v1/metrics, /v1/logs,/v1/tracesSQS queuesmetrics FIFO per device,events, email, GitHub, DLQsAPI LambdaHono, about 190 handlersdashboard + Mac appScheduled jobsEventBridge, 8 schedules:snapshots, retention,key reconciler, GitHub syncIngest workerstotals to increments,vendor noise filtered,daily rollupsExternal servicesAnthropic API (advisor)GitHub, Postmark emailRDS Proxy, then PostgreSQL on one db.t4g.microraw tables partitioned by month, 90-day retention, daily rollups, leaderboard snapshots
Architecture · 4 clients, 1 gateway, 32 Lambdas, 8 queues, 1 Postgres

Six repositories on one AWS account, deployed by CDK from GitHub Actions on every push to main, with migrations run before each deploy. Everything is a Lambda except the database: uploads are accepted fast and queued, and slow work (delta conversion, rollups, snapshots, email) happens behind the queues. One small Postgres instance behind RDS Proxy holds everything, because the load is many tiny writes, not heavy compute.

The ingest pipeline

Uploads are queued, checked and rolled up before any dashboard reads themMac app scannersCodex and Mistral Vibe session filesincrements computed on the MacClaude Code, CursorOpenTelemetry metrics and eventssent straight from the CLIPOST /v1/metricsPOST /v1/logsMetrics FIFO queuein order per device, dead-letter queue + alarmEvents queuedead-letter queue + alarmMetrics workerrunning total or increment, checked per payloada lower total is a reset, not negative usageupserts the daily rollupEvents workerdrops vendor tracing noise by name prefixkeeps per-request tokens and costPostgreSQLraw metrics and events partitioned by month and dropped after 90 days; daily rollups keptLive Today viewraw rows from each user's local midnightDaily snapshot job7 and 30 day leaderboards from the rollups
Ingest pipeline · 2 inbound paths, 2 queues, 1 rollup, 2 read paths

The upload Lambdas only authorize and enqueue, so a burst of uploads never touches the database directly. The metrics queue is FIFO with one group per device, because converting running totals into increments only works if each device's points arrive in order. Dashboards read the daily rollup for 7 and 30 days; only the Today view reads raw rows, so it can start at each user's local midnight.

One model for every AI tool

Every provider maps its own metric names onto one canonical set (tokens, cost, sessions, lines of code), so dashboards and leaderboards never name a vendor. Adding a tool is a registry entry plus, when it has no telemetry, a scanner in the Mac app.

ProviderHow usage arrivesWhat it took
Claude CodeOpenTelemetry metrics and events, sent straight from the CLIDetecting delta or cumulative temporality per payload; cost and tokens per request from events
CodexMac app scans ~/.codex session logs and sends deltasSplitting cached from fresh input; lines of code rebuilt from apply_patch diffs; real rate limits from the logs
CursorOpenTelemetry, same path as Claude CodeRegistry entry only
Mistral VibeMac app reads per-session totals in ~/.vibe/sessionsTurning per-session running totals into increments on the device

What tracking several AI tools taught me:

Making it reliable

Users notice a wrong number faster than a slow page, so most work after launch went into correctness and recovery. Each fix below came from production.

ProblemFix
A flood of Codex tracing spans (85% of rows) filled the 100 GiB databaseA provider prefix filter at ingest, gp3 storage with headroom, and written rules for replaying the dead-letter queue without double counting
An API key whose cache entry was lost got a 403 on every upload, foreverA reconciler re-syncs the key cache with the database every 5 minutes, and the Mac app re-mints its own key on repeated 401 or 403
GitHub sign-in worked exactly once per user, because the original user pool froze the email attributeA second Cognito pool with a mutable email, lazy migration that keeps passwords, and an authorizer that accepts both pools
Australian users saw an empty "today" every morning when the UTC day rolled over"Today" is computed live from raw data at each user's local midnight; 7 and 30 days read precomputed snapshots
Deadlocks during an ingest burst sent about 830 events to the dead-letter queue752 replayed with no errors; every dead-letter queue now alarms on its first message
A session restart resets a running total, which naive subtraction reads as negative usageA lower value is treated as a reset, and metrics are processed in order per device through a FIFO queue

The pattern: raw data is kept as received for 90 days, rollups can be rebuilt from it, and every queue has a dead-letter queue with an alarm behind it.

Cost, pricing and growth

Running cost. The whole platform runs for $70 to $85 a month on AWS, before tax. In June 2026 I cut the bill from $114 to $73: VPC endpoints pinned to one availability zone and the read replica deleted. I kept the RDS Proxy, because with the replica gone it is what protects the small database from connection spikes when queues burst.

Pricing. Individuals use LobsterOne free. Teams are priced at $4.90 per seat per month for a private leaderboard, team analytics and admin controls.

Acquisition. An Astro marketing site at lobsterone.ai with 68 articles on AI coding costs and habits, invite and referral codes, and shareable LinkedIn cards. Postmark sends the lifecycle emails: an onboarding sequence, a Sunday weekly recap and a nudge when the Mac app is out of date. The Mac app ships itself: every push to main is archived, notarized and delivered through Sparkle auto-update.

Outcomes

Working alone for seven months, I took LobsterOne from a CLI prototype to a multi-provider analytics platform. It has tracked 1.93 billion tokens and $166k of AI spend, for about $80 a month in infrastructure.

My lessons for teams building analytics on AI tools:

  1. The numbers are the product. Users check them against their terminal, so each convention (cache, temporality, time zone) has to be chosen on purpose and explained.
  2. Treat every vendor's telemetry as unstable. Tools add, rename and flood metrics between releases; filter at ingest and never let one provider's shape leak into shared queries.
  3. Size infrastructure to real load. A micro database behind a proxy carries 176 million rows of telemetry; the risks were storage and connection spikes, not CPU.

Contact

Hiring a hands-on product or engineering lead in Toulouse? Let's talk.

pierre.sauvignon at gmail dot com

Message on XLinkedInGitHub