Skip to content

Tech stack

ExtensionStart makes opinionated choices so you do not have to. Each one is replaceable, but together they are a stack that ships to the stores today and stays maintainable after launch.

TechnologyRoleWhy
WXTExtension frameworkGenerates per-browser MV3 manifests from one config, HMR dev builds, store-ready zips. The most actively maintained extension framework.
React 19UIPopup, side panel, welcome tour, and content-script UI share one component model and one hooks layer.
Tailwind CSS 4StylingToken-scale design system (neutral/accent/success/warning/danger); raw palettes are lint-banned so every surface stays consistent.
TypeScript (strict)Everywhereany is a lint error. The typed messaging protocol makes background/UI contracts compile-time safe.
TechnologyRoleWhy
Firebase AuthSign-inThe firebase/auth/web-extension entry point plus a web-auth-flow strategy is the combination that actually works in MV3 service workers.
Cloud Functions v2 + HonoAPIOne function, one router: checkout, webhooks, portal, usage. Free tier covers development and early production.
FirestoreDataEntitlements and usage counters, with security rules that deny client writes to anything purchasable.
StripePaymentsCheckout, customer portal, webhooks. Prices resolve by lookup key server-side; the client never sends an amount.
TechnologyRoleWhy
AstroLanding page template (apps/site)Static output, zero client JS by default, strict CSP. Rebranded from one config file.
StarlightDocs templateSearch, sidebar, dark mode, and llms.txt generation out of the box.
TechnologyRoleWhy
pnpm + TurborepoMonorepoFast installs, cached builds, one pnpm build for everything.
VitestUnit tests400+ tests across the core packages and backend.
PlaywrightE2E12 specs run against the real built extension in Chromium, including service-worker kill/revive.
GitHub ActionsCI and releasesLint, typecheck, tests, remote-code audit on every push; a version tag builds and submits store zips.

Want to swap something? The cores are framework-free and port-based, so the seams are explicit. Start with the module system to see what is optional.