Inspiration

Most good work never gets posted as a job. It goes to someone a friend recommended, or to whoever reached out at the right moment. If you don't have that network (students, people switching careers, freelancers outside big cities) you mostly find out after it's gone.

Reaching out on your own works, but it's hard. You have to work out which companies might need you, why they'd need you now, and how to write something that doesn't read like spam. Then a stranger has to decide to trust you. Even when they say yes, you're often asked to do "a quick sample" for free and then never hear back.

We wanted to fix the whole chain, not just one piece of it. AI can help with finding the right companies and writing a good pitch. PayPal can handle the trust part: if the business pays up front and the money is only released when they approve the work, neither side has to take a leap of faith.

What it does

Cold Open turns a cold email into a cold offer.

  1. Profile. You add your portfolio, skills, the kind of work you want and your usual rates. It works for any field: motion design, makeup, bookkeeping, music, code.
  2. Scout. An agent searches the web for organisations that could use you right now: a café launching a new product, a studio announcing a game, a salon opening a second branch. Every claim links to the page it came from, and claims it can't verify against the source are dropped.
  3. Offer. Instead of "do you have openings?", the agent drafts a small paid trial with a clear scope, a delivery date and a fair price backed by real rate data. It warns you if you're undercharging. You edit it and send the email yourself; Cold Open never emails anyone.
  4. Fund. The business opens your pitch page and pays with PayPal. The money is held.
  5. Deliver and approve. You deliver. When the business approves (or after 3 days with no reply), the payout goes to your PayPal account. If you miss the deadline, they're refunded automatically.
  6. Record. Every approved trial builds a public record you can link to, so the next pitch is easier.

We also built in rules so it can't turn into a spam tool: a daily pitch limit, one pitch per organisation per person every 90 days, a cap of three pitches per organisation per month across all users, and a one-click "not right now" for businesses.

How we built it

The frontend is React with TypeScript, React Router (the landing and about pages are prerendered) and Tailwind. The backend is Python with FastAPI, using SQLite locally and Neon Postgres in production.

The agent runs on Google's Agent Development Kit with Gemini. It plans searches, reads results from Tavily, fetches each cited page, checks whether the page really supports the claim, ranks the matches and writes the offer. Money never moves because the agent decided to. Funding, payouts and refunds go through guarded code paths that check the pitch's state and a recorded approval first.

On the PayPal side, businesses pay with the JS SDK and Orders v2. Releases go out through Payouts, each with an idempotent batch ID so a retry can never pay twice. Missed deadlines go through Refunds, and Webhooks keep everything in sync. The agent also uses the PayPal Agent Toolkit MCP server to create and send invoice reminders when a business has said yes but hasn't paid.

We wrote the API contract first in OpenAPI and generated types for both sides from it, so the frontend and backend couldn't drift apart. The whole app also runs with a mock API, which let us build screens before the backend existed.

Challenges we ran into

  • Web search on the free tier. We planned to use Gemini's built-in Google Search, then found out it isn't available on the free tier for the newer models. We moved search to Tavily and kept Gemini for the reasoning, which turned out to be a cleaner design anyway.
  • Rate limits and busy models. Scouting makes a lot of model calls in a burst. We had to batch claim checking, respect per-minute limits, retry when the model was overloaded, and make sure none of those technical errors ever reached the screen.
  • Making the AI honest. It was easy to get confident-sounding matches and much harder to get true ones. Requiring every claim to be backed by a quote from a page the agent actually fetched made the biggest difference.
  • Balancing the anti-spam rules. Our first rule (one pitch per company every 90 days across all users) was far too strict, since the first person would lock everyone else out. We reworked it into per-person, per-organisation and per-skill limits.
  • Free hosting. The free server wipes local files when it sleeps, so we moved to a hosted Postgres database and added a "waking up" state for cold starts.
  • Small things that cost hours, like an invisible character at the start of an env file that silently switched the whole frontend back into mock mode.

Accomplishments that we're proud of

  • A complete money loop in the PayPal sandbox: a business pays, the worker delivers, the business approves, and the payout lands, with automatic refunds and invoice follow-ups.
  • Every match shows where its information came from, and the agent openly says how many claims it dropped.
  • Fairness built into the product rather than added afterwards: pitch limits, fair-price guidance and the rule that the user always sends the pitch themselves.
  • A fast, accessible frontend, with automated accessibility checks on every page and Lighthouse scores in the 90s to 100.

What we learned

We learned that the hard part of an AI agent isn't getting it to do something; it's deciding what it should never do on its own. Keeping humans in charge of anything that moves money or contacts people made the product both safer and easier to explain.

We also learned a lot about payments: why idempotency matters, why you can't rely on webhooks alone, and how holding funds changes the trust between two strangers. On the practical side, we learned to design around free-tier limits from day one instead of discovering them the night before.

What's next for Cold Open

  • PayPal's marketplace (multiparty) payments, so money goes straight to the worker instead of being held by the platform
  • Opportunities beyond paid trials: speaker slots, festival submissions and artist calls
  • Teams pitching together, with split payouts
  • An inbox for businesses to set what they're open to and compare pitches
  • Turning successful trials into longer contracts

Built With

Share this project:

Updates

Submission history