Wavelength: the Gmail extension, releases and team workflow of a live AI writing coach
Wavelength coaches people on how to write to specific teammates. I took over its Gmail extension, the release path and how the team ships.
- Client
- Wavelength
- Timeline
- Ongoing
- Stack
- Claude CodeCursorTypeScriptNext.jsNestJSSupabasePrismaChrome MV3JestVercelRailwayLoops
Sections
9 sections · 920 words · ~5 min
What I own.
- Gmail extension Manifest V3(My work)
- Web app Next.js(My work)
- API NestJS(My work)
- Public site metadata, 404(My work)
- Environments release path(My work)
- Team workflow branches, docs(My work)
- AI pipeline the product's(The product I work inside)
- Database and auth Supabase, Prisma(The product I work inside)
Making the Gmail extension safe to use.
0.2.2
Sessions last through Chrome restarts
The extension signed everyone out about once an hour. It now keeps a session of its own, so you stay signed in through Chrome restarts, and signing out of the website leaves Gmail alone.
0.2.3 to 0.2.5
The card and button left the email
The coaching card and its button had been placed inside the message itself, where a draft could save or send them. They now sit on the page, outside your email.
- The card opens toward the free space and shows one Applied banner
0.2.6 to 0.2.12
Drafts and replies get coached
A reopened draft got no coaching, or a false “Add a recipient” though the recipient was right there.
- Reopened drafts are coached as soon as they open
- Replies written at the bottom of a conversation find the recipient
- The card shows in full in a reply instead of a sliver
0.2.13 to 0.2.16
Use this keeps your signature and the thread, with Undo
Use this replaced the whole compose box, so your signature and the quoted thread went with it, and there was no undo. Now only your own words change, and Undo keeps ten steps per email.
0.2.17 to 0.2.31
A redesigned coaching card
The old card showed no recipient, two Applied banners and unlabelled icons.
- Buttons carry words, one Applied pill, and the recipient in the header
- One scroll area, and the card stays open after Use this
- When Use this cannot apply, the card says why instead of offering a button that did nothing
Tests and data
A test suite built from zero
The extension started with no test suite. The suite runs against captured Gmail markup, and every later fix added tests to it.
- 16 captured Gmail compose snapshots as fixtures, 149 tests by the end of the week
- Fictional people in all test data
API
New accounts get a real name
New accounts were named by their email address, so rewrites signed off with one. New accounts now get a real name, and in week 2 a backfill, run as a dry run first, fixed the existing ones.
First Store release, and the founder's headline.
0.2.35 · Chrome Web Store
Version 0.2.35 reaches every user
Version 0.2.35 went to the Chrome Web Store and was approved the same day. Chrome updates everyone within about a day.
- Use this works after you delete your signature, and on a message with no signature
Website
The homepage headline the founder asked for
The founder chose the line, and I put it live.
Owners get admin rights.
API
Organisation owners count as admins
Organisation owners would have been refused admin actions once organisations were switched on. They now count as admins.
A staging copy and one release path.
Architecture
Three environments
Before this, a fix could only be seen working once it was live. Extension changes are now checked with a test build before release, mostly against staging.
- Local, for building
- Staging: a branch preview of the web app and its own API service, on a separate staging database, with fictional seed data
- Production, for users
- Release path: staging, checked live, main by pull request, production, then the Chrome Web Store
Web app
The Coaching page shows who you are writing to
- Plain-language labels on the Coaching page
- The profile summary's backup model was a retired one; it now uses the current one
A ready public site, and every open email coached.
Public site
Public site metadata and a branded 404
- Favicon, home-screen icon and a share image
- Titles, descriptions and canonical links for every page
- Robots rules and a sitemap, indexing on production only
- A branded 404, and www redirects with no certificate warning
0.2.39
Every open email gets its own coach
Only the first open email got suggestions, and its floating button could drift over another email.
- A button in Gmail's Send row: orange for the email you are typing in, white for the others
- A red 1 when a suggestion is ready, a ! when something needs you, and a hover label that says which
- The card stays open while you edit
0.2.36 to 0.2.40
Rewrites that stay close to your words
A rewrite used to end with its own sign-off above the Gmail signature, so your name appeared twice.
- Regenerate always starts again from your own draft
- With a Gmail signature, the rewrite adds no second sign-off
- Adding or changing the recipient after writing coaches again
- Only the suggestion for your latest text is shown
Web app and API
Onboarding events and a working Edit Profile
The founder asked for onboarding emails, and the code side was live within a day. The founder owns the emails and their copy.
- Onboarding events sent to the onboarding email service
- Edit Profile opens Settings
Second Store release, and docs checked against the code.
0.2.40 · Chrome Web Store
Version 0.2.40 reaches every user
Version 0.2.40 went to the Chrome Web Store, with 243 extension tests green.
Docs
Every doc checked against the code
I cut the instruction file down to commands, rules and a docs map, and checked every committed doc against the current code.
Rules for a team, and who decides what.
- Branches.Feature branches open pull requests against staging, never straight to main.
- Docs.Docs move with every change, and a fix record is written for each notable fix to live code.
- One instruction file.Claude Code and Cursor read the same rules, with one home for each fact.
- One issue at a time.Side findings are logged for later instead of being folded into the fix in hand.
- The founder decides.Product decisions are the founder's. Problems reported from user testing go to the front of the queue.
- Blockers only.I ask about real blockers and settle the rest myself.
The work is ongoing. You can try Wavelength on the web, or install the extension from the Chrome Web Store.
What Wavelength runs on.
- Rule-based engine
- Scores each draft against the recipient's DISC and Big Five profile on five dimensions, and passes its flags to the model as hints.
- Scoring model
- Jev, from TypeSafe, scores the draft in a pilot.
- Writer model
- Writes the suggestions and the rewrite, using OpenAI and Claude.
- Evals
- A promptfoo eval suite and a 40-draft comparison picked the models and their token limits.