Page-level AI panel
Manifest V3 content script, MutationObserver-based UI injection, idempotent, SPA-safe. Streams proposal tokens back from the API.
A live, monetized Chrome-extension SaaS — replacing a 20-minute manual task with 20 seconds inside the UI the user already has open.
Problem: a good Upwork proposal takes ~20 minutes. Forty of them takes a day. A freelancer charging $50/hour is losing the margin before the first invoice is sent. Product: a Chrome extension that injects an AI drafting panel directly into Upwork's cover-letter modal — reads the brief, generates a tailored proposal, streams it back in seconds. Scope: I designed, coded, shipped, and monetized the entire stack — extension, marketing site, Stripe subscription layer, and a role-gated admin panel — as a solo operator over ten weeks.
Upwork's economics punish volume. A freelancer with a $50 hourly rate who takes two hours per proposal and converts at 5% is losing their margin before the first invoice. The best proposals are researched, tailored, and concise — three properties that don't scale with copy-paste templates or generic AI wrappers.
I'd watched this for years while helping freelancers rank their profiles on Google. The ranking got them traffic. The proposal wall killed the conversion. So I built ProWorkSpace — a Chrome extension that lives on the Upwork job page, reads the brief, and drafts a proposal the freelancer can approve or edit in seconds.
Every competing tool I tried was an external app — open a tab, paste the brief, copy the output, paste it back. That loop kills the time saving. I wanted the AI to live inside the Upwork UI so the friction was zero.
So ProWorkSpace ships as four things, each one responsible for a different friction point in the freelancer's day:
The whole thing had to look, move, and behave like it was built by a ten-person team. Shipping it solo meant every decision had to compound.
How the pieces fit together.
Manifest V3 content script, MutationObserver-based UI injection, idempotent, SPA-safe. Streams proposal tokens back from the API.
Edge-deployed inference proxy. Rate-limited per-user. Prompts versioned and remotely swappable without a new extension build.
Checkout + customer portal + webhooks. Handles trial, upgrade, pause, dunning, and refund flows without manual intervention.
Feature flags, prompt registry, usage observability. Gives me — and only me — a single place to operate the product.
Most Chrome extensions fail on the same three invisible problems. Getting these right was half the battle.
Chrome Extensions API (Manifest V3) · vanilla JS · DOM injection · MutationObserver · custom panel UI · streamed tokens
Node.js · Anthropic API · prompt registry · per-user rate limiting · edge-deployed inference · webhooks
Stripe Checkout · subscription lifecycle · dunning & retry · customer portal · webhook-driven entitlement sync
Role-gated dashboard · feature flags · prompt versioning · usage monitoring · email / receipt flows
Most freelance marketers can talk about what a good funnel looks like. Most extension developers can ship a Chrome extension. What's unusual is building both, gluing them together with payments, and operating the result as a live product for real paying customers — as a single person, in a few months.
ProWorkSpace is the proof case for my positioning: one operator replaces the three-vendor stack. The SEO lead, the developer, the billing engineer — one brain, coordinated delivery, no handoffs, no communication tax.
I'm currently available for select engagements.