Gmail power layer inspired by Superhuman and Simplehuman.
Superbhuman is a Chrome extension that sits inside Gmail and adds:
- a command center
- faster keyboard-driven inbox navigation
- an
Important/Othersplit inbox - mass archive flows
- Gmail API-powered cleanup actions
The current product direction is:
- public Chrome extension first
- Gmail features work with no user-run backend
- Gmail auth stays fully inside the extension with
chrome.identity - read statuses are a separate hosted beta, not part of the default public build
See PUBLIC_LAUNCH_CHECKLIST.md for the remaining operational work needed for a public launch.
Working now:
- Gmail overlay UI and floating top bar
- command center and keyboard navigation shell
- split inbox filtering over visible Gmail thread rows
- Gmail auth and Gmail API actions directly from the extension
- bulk archive preview and command wiring
Phase 1 public-build constraints:
- Gmail API features only work after you configure a real Chrome Extension OAuth client and connect Gmail from settings
- read statuses are hidden unless the extension is built with the tracking beta flags
- the backend is no longer required for Gmail auth or Gmail actions
apps/extension: Chrome MV3 extension built with WXT + Reactapps/api: Node API for hosted read-status tracking betapackages/shared: shared types, commands, and pure domain logic
- Node.js 24+
pnpm- Chrome or Chromium
- Install dependencies.
pnpm install- Build the workspace.
pnpm build- Build the extension with a stable ID and your Chrome Extension OAuth client.
export WXT_EXTENSION_KEY='YOUR_EXTENSION_PUBLIC_KEY'
export WXT_GOOGLE_OAUTH_CLIENT_ID='YOUR_CLIENT_ID.apps.googleusercontent.com'
pnpm --filter @superbhuman/extension build- Load the Chrome extension.
- Open
chrome://extensions - Turn on Developer Mode
- Click
Load unpacked - Select
apps/extension/.output/chrome-mv3
If the file picker hides .output, use Cmd + Shift + . on macOS to show hidden folders.
-
Open the extension settings page from
chrome://extensions. -
In settings:
- click
Connect Gmail - approve the Gmail scopes
- once
Gmail AuthsaysReady, Gmail-powered features are usable
- Refresh Gmail after connecting or reloading the extension.
The default public build does not require the API at all.
The intended public install flow is:
- install extension
- connect Gmail
- use command center, split inbox, archive, and Gmail cleanup actions
Design rules for the public build:
- no local API required
- no user-provided tracking URL
- no Gmail access tokens sent to the Superbhuman backend
- backend outages must not block Gmail features
Use a stable extension ID and a Chrome Extension OAuth client that matches it.
- Create or choose a Google Cloud project.
- Enable the Gmail API.
- Configure Google Auth Platform branding.
- Set Audience to
External. - Add your test users while the app is still private.
- Add only these Gmail scopes:
https://www.googleapis.com/auth/gmail.modifyhttps://www.googleapis.com/auth/gmail.settings.basichttps://www.googleapis.com/auth/userinfo.email
- Create an OAuth client of type
Chrome Extension. - Paste the stable extension ID from
chrome://extensions.
Then rebuild:
export WXT_EXTENSION_KEY='YOUR_EXTENSION_PUBLIC_KEY'
export WXT_GOOGLE_OAUTH_CLIENT_ID='YOUR_CLIENT_ID.apps.googleusercontent.com'
pnpm --filter @superbhuman/extension buildReload the unpacked extension after every rebuild.
Read statuses are phase 2. They are not part of the normal public build.
Only beta builds should include them, using a fixed hosted backend defined at build time.
Required extension build flags:
export WXT_PUBLIC_ENABLE_TRACKING_BETA='true'
export WXT_PUBLIC_TRACKING_API_BASE_URL='https://track.superbhuman.example'When those flags are absent, the public extension:
- hides read-status controls
- does not ask users for a backend URL
- keeps all Gmail features usable with no backend dependency
The hosted read-status backend should stay narrow:
GET /healthzPOST /track/registerGET /track/status/:tokenGET /t/:token.gif
- open Gmail
- press
Cmd + Shift + Kon macOS orCtrl + Shift + Kon Windows - search for actions like
archive,reply,other,important, orget me to zero
- use the floating
ImportantandOthertabs - counts in the top bar show how many visible Gmail rows currently fall into each split
- use command center actions like
Move to ImportantorMove to Otheron a selected thread to tune the split
Only beta builds expose the read-status UI. In a beta build:
- open Gmail compose
- verify the compose toolbar shows
Read Status On - send an email
- open the
Read Statusesbutton in the floating bar - your tracked send should appear there with subject, recipients, sent time, and current open count
The read-status backend must be public HTTPS and continuously reachable while recipient opens are happening.
Public builds should not instruct users to run local tunnels or paste backend URLs.
Root:
pnpm build
pnpm test
pnpm typecheckExtension:
pnpm --filter @superbhuman/extension build
pnpm --filter @superbhuman/extension test
pnpm --filter @superbhuman/extension typecheckAPI:
pnpm --filter @superbhuman/api dev
pnpm --filter @superbhuman/api start
pnpm --filter @superbhuman/api test
pnpm --filter @superbhuman/api typecheck- this build does not have
WXT_GOOGLE_OAUTH_CLIENT_IDconfigured - set both
WXT_EXTENSION_KEYandWXT_GOOGLE_OAUTH_CLIENT_ID - rebuild and reload the extension
- make sure the Chrome Extension OAuth client was created with the exact current extension ID
- make sure the extension was built with the same
WXT_EXTENSION_KEY - rebuild and reload after updating the client ID
- add that account as a test user in Google Auth Platform
- wait for Google Cloud changes to propagate, then reconnect
- this is expected in the normal public build
- read statuses only appear when the extension is built with the beta tracking flags
- core Gmail features should still work
- verify the hosted backend responds to
/healthz - rebuild the extension with the correct
WXT_PUBLIC_TRACKING_API_BASE_URL
- the hosted backend must be public HTTPS
- the backend must still be up when the recipient opens the email
- Gmail often proxies images, so the pixel cannot point at localhost
- Phase 1 is Gmail features first.
- Read statuses are phase 2 and should stay behind a fixed-origin hosted beta until auth, durable storage, monitoring, and abuse controls are in place.
- The backend should not receive Gmail access tokens.