All work
Case Study · 01 Shipped 2024

ProWorkSpace.

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.

What it replaces 20-min per-proposal cost
Scope delivered Extension + site + Stripe + admin
Timeline 10 weeks, solo
Status Live & monetized
01 · The problem

Freelancers spend most of their week not earning.

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.

02 · The approach

Draft in the page. Ship in the page.

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:

  • A Chrome extension that injects an AI panel into the Upwork cover-letter modal, watches for the brief, and drafts a proposal styled to the freelancer's profile.
  • A marketing site with an activation flow that explains the value in 30 seconds and turns a skeptical first-time visitor into a trialed user.
  • A Stripe-backed billing layer that handles subscription conversion, plan tiers, and payment recovery without a finance team in the loop.
  • An admin panel that lets me gate features, monitor usage, and push prompt updates without shipping a new extension build.
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.
03 · Architecture

Four systems, one integrated product.

How the pieces fit together.

01 / Chrome Ext

Page-level AI panel

Manifest V3 content script, MutationObserver-based UI injection, idempotent, SPA-safe. Streams proposal tokens back from the API.

02 / API

Node + Anthropic

Edge-deployed inference proxy. Rate-limited per-user. Prompts versioned and remotely swappable without a new extension build.

03 / Billing

Stripe subscriptions

Checkout + customer portal + webhooks. Handles trial, upgrade, pause, dunning, and refund flows without manual intervention.

04 / Admin

Role-gated panel

Feature flags, prompt registry, usage observability. Gives me — and only me — a single place to operate the product.

04 · The work beneath the surface

The pieces that aren't obvious from the screenshots.

Most Chrome extensions fail on the same three invisible problems. Getting these right was half the battle.

  • SPA safety. Upwork re-renders chunks of its page without triggering a full navigation event. The naive "run on load" injection misses 80% of page states. The extension uses a MutationObserver gated by a dataset flag so it injects exactly once, per visible job posting, even as Upwork re-mounts the surrounding React tree.
  • Prompt versioning. The AI drafts are only as good as the latest prompt. Ship that prompt inside the extension and every iteration costs a new Chrome Web Store review. So the extension pulls the active prompt ID at runtime from the API, and the admin panel lets me swap prompts in seconds.
  • Deliverability of the marketing funnel. SaaS acquisition costs break the math for small-ticket products unless you control the full funnel. I built landing, Stripe, and admin as one coherent stack so the cost of iterating on any of them is minutes, not days.
05 · Stack

What it's built with.

Frontend & Extension

Chrome Extensions API (Manifest V3) · vanilla JS · DOM injection · MutationObserver · custom panel UI · streamed tokens

Backend & AI

Node.js · Anthropic API · prompt registry · per-user rate limiting · edge-deployed inference · webhooks

Payments

Stripe Checkout · subscription lifecycle · dunning & retry · customer portal · webhook-driven entitlement sync

Admin & Ops

Role-gated dashboard · feature flags · prompt versioning · usage monitoring · email / receipt flows

06 · The takeaway

Why this matters on a CV.

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.

Want something like this built for your company?

I'm currently available for select engagements.