Skip to content

Overview

You cloned a monorepo. One wizard brands it, keeps the modules you want, and connects Firebase when you are ready:

Four steps: create your extension, connect Firebase, connect Stripe, publish to the Chrome Web Store.1Createpnpm create extstart2Connect Firebasepnpm create extstart --firebase3Connect Stripepnpm seed:stripewebhook, deploy, doctor4Publishpnpm zip+ store uploadConsole steps (sign-in providers, Blaze plan, OAuth client) are deep-linked when a stage needs them.

Every part ships wired together and covered by the kit’s 400+ unit tests and 12 end-to-end specs.

Extension app

Popup, side panel, welcome tour, and on-page UI. WXT generates the per-browser manifests; React 19 and Tailwind 4 drive the surfaces.

Sign-in

Google and email sign-in built for MV3, with optional anonymous-first accounts that keep purchases when a guest signs up.

Billing

Stripe Checkout, customer portal, and webhooks. The server records who paid; the UI reads useEntitlement("paid").

Paywalls

A gate engine with store-policy-safe presets. Two message calls instrument a feature; the wall UI renders itself.

Backend

One Cloud Function (Hono) for checkout, webhooks, usage counters, and sign-out revocation. The extension holds no secrets.

Publishing

Store-ready zips for Chrome, Firefox, and Edge, a remote-code audit, and runbooks for each store’s review.

The ExtensionStart big picture: the create-extstart wizard configures your extension, your backend, and your website; the extension ships to the Chrome Web Store and the backend takes Stripe payments.Chrome Web StoreStripe paymentsYour extensionpopup · content UI · backgroundYour backendauth · entitlements · creditsone Cloud FunctionYour websitelanding · privacycreate-extstart wizard
  • The extension renders UI and reads state from chrome.storage.
  • The backend decides who paid. Stripe webhooks write entitlements server-side; the extension can display state but never grant it.
  • The website hosts your landing page plus the privacy and terms pages the Chrome Web Store requires.
  • Directoryapps/
    • Directoryextension/ WXT + React app: popup, sidepanel, background, content
    • Directorysite/ your product website (Astro): landing, privacy, terms
  • Directorypackages/
    • Directorycore-ext/ MV3 primitives: storage, messaging, alarms, migrations
    • Directorycore-auth/ sign-in strategies
    • Directorycore-billing/ entitlements and billing hooks
    • Directorygate/ paywall engine and wall UI
    • Directoryui/ Button, Card, Dialog, and the other primitives
  • Directorybackend/
    • Directoryfunctions/ one Hono API on Cloud Functions
  • Directorytooling/
    • Directorycreate/ the setup wizard and module pruner

The Repo tour walks each directory; the Tech stack page explains each choice.

The wizard asks how you want to charge and configures pricing UI, Stripe products, and paywall behavior to match. All four models ship ready to seed:

ModelYou sell
Subscription (default)Monthly and yearly plans, optional free trial
LifetimeOne payment, access forever
Subscription + creditsMonthly credit allowance plus top-up packs
Credit packsPrepaid credits, no subscription

Plans live in one config array, so any mix of recurring and one-time prices works later. See Payments and Credits.

Each step ends with something you can verify on screen:

  1. Setup: clone, run the wizard, load the extension in Chrome.

  2. Connect sign-in: point the kit at your Firebase project and sign in for real.

  3. Take payments: Stripe in test mode, ending with a checkout that flips your popup to premium.

  4. Build your feature: where your code goes, and the 2-file edit that makes it paid.

  5. Ship it: the Chrome Web Store submission runbook.

You know React and TypeScript. The kit builds on WXT, Firebase, and Stripe rather than teaching them; these docs cover how the kit uses them and link out for the rest. Extension-platform rules (service workers, permissions, store policy) are covered here, because they are where extensions differ from web apps.