I shipped an MVP with AI + a freelancer.
It works. Kind of.
What I don’t have:
So I’m hiring… into fog.
If that’s you too: I’m testing something small.
Repo Rescue Brief — send the GitHub repo (or zip). In 48 hours you get a hire-ready handoff pack:
£99 early slot scope (tight on purpose):
Early-bird £99 this week (limited slots), then £149–£249.
If you’ve got an undocumented MVP and a hire (or a raise) coming up — I’ll put you on the list.
Comment RESCUE or DM me for an early slot.
The scope is clear, but the real test seems to be willingness to pay for certainty. Have any founders actually paid for the brief yet?
As promised — here’s a redacted sample of what’s in the £99 Repo Rescue Brief pack (runbook, architecture map, env/secrets inventory, deploy notes, risk register, fix-vs-rebuild call, and a Day-1 checklist). Fictional project data so I can show the shape without a real client repo:
# Repo Rescue Brief — SAMPLE / REDACTED
SAMPLE / REDACTED — fictional client for illustration. Not a real engagement.
| Field | Value |
| --- | --- |
| Project | PlantPal (habit + plant-care SaaS MVP) |
| Stack | Next.js 14 (App Router), Supabase (Auth + Postgres), Vercel |
| Size | ~2.4k LOC TypeScript/TSX, single service |
| Client contact | founder@example.com |
| Brief date | 2026-03-12 |
| Scope | £99 Repo Rescue Brief (written pack + Loom note) |
A 10–15 min Loom walkthrough would accompany a real delivery. It is not included in this written sample.
---
## 1. Runbook README
### Prerequisites
corepack enablethencorepack prepare pnpm@9 --activate)### Setup
### How to verify it works
/— marketing landing loads; “Start free” →/signup./dashboardlists plants; “Add plant” posts to/api/plants./dashboard/[plantId]— row appears incare_logs.pnpm buildcompletes with zero TypeScript errors (as of brief date).### Top 3 setup gotchas
NEXT_PUBLIC_SUPABASE_URLmust match the project that owns the anon key. Mixing staging URL with production anon key yields opaque 401s on/auth/callback.plantsandcare_logs. Queries without a user session return empty arrays, not errors — easy to misread as “DB is empty”.pnpm db:typesneedsSUPABASE_SERVICE_ROLE_KEY. Running it with only the anon key fails silently and leaves stale types; CI does not regenerate types.---
## 2. Architecture + directory map
Plain English: PlantPal is a single Next.js app. Browser talks to Supabase Auth and Postgres via the Supabase JS client. Server routes under
app/api/*use the service role only for webhook-style jobs (none live yet). No separate backend, queue, or worker.Data model (simplified):
profiles←1:N→plants←1:N→care_logs. Auth user id =profiles.id.---
## 3. Env / secrets / third-party inventory
| Name | Where used | Secret? | Notes |
| --- | --- | --- | --- |
|
NEXT_PUBLIC_SUPABASE_URL| client + server | No | e.g.https://plantpal-demo.supabase.co||
NEXT_PUBLIC_SUPABASE_ANON_KEY| client + server | Public by design | JWT; safe in browser with RLS ||
SUPABASE_SERVICE_ROLE_KEY|pnpm db:types, future admin routes | Yes |sk_test_EXAMPLE_service_role_not_real— must never ship to client ||
NEXT_PUBLIC_APP_URL| auth redirect URLs | No |http://localhost:3000locally; Vercel prod URL in prod ||
RESEND_API_KEY| referenced in.env.exampleonly | Yes |re_EXAMPLE_not_wired— not used in code yet || Vercel project | Hosting | Account-level | Linked to GitHub
plantpal-demo|| Supabase project | Auth + DB | Account-level | Region: eu-west-1 (fake for sample) |
Finding:
RESEND_API_KEYand a stublib/email.tssuggest planned transactional email; nothing calls it. Safe to ignore for Day-1 run, but do not commit a real Resend key “just in case”.---
## 4. Deploy & ops notes
main→ Vercel production. Preview deploys on PRs. No staging project.supabase/migrations/exists but is not wired into CI. Risk of drift between repo SQL and live schema.plantpal-demo.vercel.apponly in this sample; custom domain unset.---
## 5. Risk register
| ID | Priority | Area | Issue | Impact |
| --- | --- | --- | --- | --- |
| R-01 | P1 | Secrets |
SUPABASE_SERVICE_ROLE_KEYpresent in a developer’s laptop.env.localonly (good), but also pasted once into a Vercel “Preview” env shared across forks of a template — confirm Preview env is scoped | Full DB bypass if leaked || R-02 | P1 | Auth |
/api/plantsPOST checks session cookie but does not re-validateuser.idagainstplants.owner_idon PATCH in one code path (app/api/plants/[id]/route.ts) — relies on RLS as backstop | Cross-user edit if RLS misconfigured || R-03 | P2 | Tests | No automated tests. Manual checklist only | Regressions on auth/callback and plant CRUD |
| R-04 | P2 | Ops / SPOF | Single Vercel + single Supabase project; no staging | Any bad migration or env change hits “prod” (the only env) |
| R-05 | P2 | Schema |
database.types.tslast generated 2025-11; migrations addedwatering_interval_dayssince | Type lies; runtime still works via loose selects || R-06 | P3 | Docs | README is default create-next-app boilerplate | Next hire burns hours rediscovering setup |
| R-07 | P3 | Dead code |
lib/email.ts+ unused Resend env | Confusion about what is live |---
## 6. Fix / Refactor / Rebuild recommendation
Recommendation: Fix + light refactor — do not rebuild.
The MVP is coherent: one deployable, clear domain model, Auth + RLS roughly right. LOC and coupling fit a small SaaS. A rewrite would discard working product surface for little gain.
Rough next-step scope (post-brief, not included in £99):
| Track | Effort (indicative) | Outcome |
| --- | --- | --- |
| P1 hardening | 0.5–1 day | Owner checks on PATCH; audit Preview env secrets; rotate service role if unsure |
| Types + migrations | 0.5 day | Regenerate types; document “apply migration →
pnpm db:types”; optional Supabase GitHub integration || Minimal test smoke | 1 day | Playwright: signup → add plant → toggle habit; run on PR |
| Ops hygiene | 0.5 day | Staging Supabase project or at least a
stagingVercel env; kill dead email stub or wire it |Rebuild only if: product direction changes to offline-first / native, or multi-tenant B2B with a different auth model. Neither is indicated here.
---
## 7. Day-1 checklist for the next developer
pnpm install, copy.env.example→.env.localwith staging Supabase keys if availablepnpm dev+ signup → dashboard happy pathpnpm db:typesand diffdatabase.types.ts— commit if driftsupabase/migrations/*in order; compare columns to live Table Editorservice_role/createClient— ensure service key never imported incomponents/or client bundlesowner_id === session.user.idin PATCH/DELETE before relying on RLS alonelib/email.tsuntil Resend is intentionaldocs/runbook.md(this brief’s §1 is a start) and replace the boilerplate README---
## Loom note (real delivery only)
In a paid engagement, a 10–15 minute Loom would walk the clone → run path, highlight R-01/R-02 on screen, and narrate the Fix vs Rebuild call. This sample is text-only.
---
End of SAMPLE Repo Rescue Brief. All names, keys, and URLs are invented for illustration.
I reckon the main risk is that a fixed price will attract the repos needing the most rescue. “One repo” could mean a small app or a monorepo with six services and years of drift.
I’d put a hard boundary around the £99 slot — one app, one deployment path and a clear size limit — then quote anything larger separately. A redacted sample brief would also make the 48-hour promise feel more concrete before someone grants repo access. Have you decided where that cutoff sits?
Good shout on putting the limits in the offer copy itself — I’ll tighten that so people see the boundary before they ping me.
Sample’s already up as a top-level comment on this post (PlantPal, fully redacted) if you want to skim the risk register + fix/refactor/rebuild section.
Appreciate the read — tight scope is the whole bet.
Good call. The £99 early slot is one app / one deploy path, roughly under ~5k LOC or a single service, with a private repo welcome. Anything bigger (monorepo, multi-service, heavy legacy) gets a separate quote after a quick look.
Sample brief is next on the list — I’ll drop a redacted example on the post once it’s ready.
That boundary makes sense. I’d probably put those limits directly in the offer copy, not just in replies, because it filters expectations before the awkward repo handover stage.
The sample brief should help a lot too. Even a tiny redacted example showing the risk register and fix/refactor/rebuild recommendation would make the deliverable feel less abstract.
Sounds like a useful little productised service if the scope stays tight.
Good shout on putting the limits in the offer copy itself — I’ll tighten that so people see the boundary before they ping me.
Sample’s already up as a top-level comment on this post (PlantPal, fully redacted) if you want to skim the risk register + fix/refactor/rebuild section.
Appreciate the read — tight scope is the whole bet.
Had a look — the PlantPal sample makes the deliverable much clearer, especially the fix/refactor/rebuild section. I’d link it directly in the offer and mention the 5k LOC limit there too. That should filter out the rescue projects that were never really £99 jobs.