Inspiration

Freelancers on Upwork, Fiverr and Freelancer spend hours a week scrolling listings that don't fit and rewriting nearly the same proposal. Auto-apply bots are banned and spammy. We wanted a co-pilot: do the finding and the first draft; leave judgment and Submit to the human.

What it does

Skills, rate floor, niches, excluded keywords → Chrome extension Scan (only on user action) → 0–100 fit score with reasons → Pro drafts cover letter + 3 milestones + client questions + a "what you still must do" checklist. Daily digest with links to submit. Extension prefills only — it never presses Submit. Studio: 5 seats + work bench.

How we built it

TypeScript monorepo: Next.js 16 + Hono API, Drizzle/Postgres (Neon), Better Auth, Stripe Checkout + signed webhooks, Resend, MV3 Chrome extension. Deterministic fit-v1 scorer (no LLM on Free). Drafts via Anthropic/OpenAI-compatible with template fallback. License keys are signed HMAC tokens (rotatable, revocable). 37 API + 26 core + 14 extension tests; production build verified.

Governance

Scan only on click; no marketplace credentials stored; never submits; listing text is untrusted input (fenced prompts, zod JSON, portfolio-only links); export/delete in product. Details in docs/COMPLIANCE.md.

Honest scope

Real-marketplace parsers are best-effort; fixture board is the supported demo. Stripe is test mode — no customers or revenue yet.

Monetization

Free $0 (5 scored matches/wk) · Pro $29/mo (drafts + digest) · Studio $99/mo (5 seats + work bench). Paywall sits on the hours saved. Unit economics are illustrative assumptions.

Built with

TypeScript, Next.js, React, Tailwind, Hono, Drizzle, PostgreSQL, Better Auth, Stripe, Resend, Anthropic API, Chrome MV3, Vitest

Product details (profile floors)

Hourly rate floor and minimum fixed budget are separate settings. Example: hourly floor $55/hr and min fixed budget $100 — pay-per-job gigs under $100 are flagged, hourly under $55/hr is flagged. Sample-board practice listings are badge-tagged SAMPLE BOARD and hidden by default so they never masquerade as live marketplace hits.

Built With

Share this project:

Updates

Submission history