Row level security
Tables with no policy, or policies that let any signed-in user read every row.
Paste a repository and get a ranked list of what will break first: open tables, leaked keys, unverified payments, roles the client can change. Built for apps made with Lovable, Bolt, Cursor and Next.js.
Free during early access · code analysed in memory, never stored
The six failures found most often in AI-built and fast-shipped applications, taken from real audits.
Tables with no policy, or policies that let any signed-in user read every row.
Paths where one customer can reach another customer's data through the API.
Service keys in the client bundle, committed .env files, keys in public routes.
Stripe webhooks without signature checks, missing idempotency, unhandled failed payments.
Admin rights checked in the interface only, role claims the client can change.
Checkout and sign-up flows with no error handling, silent failures, no logging.
A score per area and every finding with its file, its consequence and the fix. The sample is based on a real pre-launch audit, with names removed.
supabase/migrations/0007_policies.sqlImpact Any customer can read every other customer's orders and addresses through the public API.
Fix Replace the 14 permissive policies with owner-scoped policies and add a cross-tenant read test per table.
app/api/stripe/webhook/route.tsImpact A forged request can mark an order as paid.
Fix Verify the Stripe-Signature header with the endpoint secret before processing the event.
lib/payments/handleEvent.tsImpact Stripe retries create duplicate credit top-ups.
Fix Store processed event IDs and skip repeats.
Public GitHub link or a zip. The key files are read, the rest is ignored.
Findings ranked by severity, each with the file and the fix, in a few minutes.
Fix it with your own team, or book a full audit and I go through the code by hand.
Full audits done by hand. Fixed price, written pack.
For an existing codebase before launch or handover. API contract and roles first, then the live interface module by module, then the code against that contract. Every finding carries a severity grade, a file reference, the release consequence and an hours estimate. Conclusions that do not hold under live verification are withdrawn, and the withdrawal is documented.
Before a rebuild or a new system. Source and data analysis, schema design, migration plan, then a milestone estimate with timeline. The pack stands on its own: a client who takes it to another developer has a working map of the project.
Numbered documents in Word and Markdown, with an evidence bundle: checksums, test and build logs, screenshots, pinned to one commit.
Pre-launch audit found RLS policies that lived only in discarded migrations and never reached the database. Rebuilt access control around one permission matrix driving API guards, row level policies and tests: 31 tables under policy, 96 access tests.
Marketplace built in Lovable, preparing for national launch. 14 of 31 tables let any signed-in user read every row. Replaced the policies across all 31 and moved the role claim server-side. Ongoing technical ownership after the audit.
Legal-readiness diagnostic built with AI tools, two weeks from a demo. Two developers, same packet, 48 hours. My harness found a false-green status, boundary defects and state leaks; recommended stabilise, not rebuild. Hired for the build, every defect proven by a failing test first.
AI business assistant before its first release. API contract and roles first, then the live interface, then the code: invitations, usage metering, backend role checks, OAuth tokens. Every finding graded with file, consequence and hours; unverified conclusions withdrawn.
Multilingual industrial catalogue moving off a legacy CMS. Scraper source analysis, a Sanity schema that takes new manufacturers and languages, a translation test kit and a milestone estimate. The client built from the pack with another developer.
Architecture and scraping engine: NestJS cron pipelines with adapters for 6 operators, anomaly detection and webhook alerts. 4,563 images moved to Cloudflare R2 with content-hash deduplication, cutting card weight seven times.
Fixed-price scoping for a firm of chartered surveyors: report fields agreed, covered with the smallest set of licensed data APIs, then architecture, timeline and price for the build.
Technical lead on two products with paying users. Catalogue schema normalised and filtering moved to the server: listing endpoint from 39 MB to 16 KB. Migrated to the client's own infrastructure on handover.
67 tables mapped column by column, resumable batches, row counts and checksums before cutover. Twelve minutes of downtime, nothing lost.
1.04 million calls a day across four providers, rate-limit pacing, backoff retries, an idempotency key on every call. 0.4% retried, zero duplicate writes.
B2B admin dashboard used daily by 20 people; a search rebuild took the median query from 4.1 s to 38 ms across 480,000 records. Scheduled PDF and CSV reporting, 42 runs, none missed. Kendo UI commercial licence.
Performance pass on a client site: Lighthouse score from 54 to 98, page weight from 2.4 MB to 610 KB.

Svitlana Horodylova
Senior full stack developer · Technical lead · UK
Based in East Sussex, working with clients in the UK, the US and Europe. Top Rated Plus on Upwork, 30 contracts (client reviews). Clients keep full ownership of everything I build: code, repository and accounts, from day one.
Before software: twenty years in editorial work and fifteen years leading teams, which is why every audit ends in a report a non-technical founder can act on.
Send the repository link or a short description. I reply within one working day.