Lead-Gen Landing Sites.
Conversion funnels for UK energy-switching, tax-refund and car-finance-claims lead generation: one site built solo, lead developer on another, and features across five more.
I was lead developer on an existing energy-comparison site, building its newer quote-and-switch funnels and a bundled energy, broadband, TV and water flow with Stripe card setup (nothing charged). I also added a Prisma/Postgres lead store, multi-step forms that keep their state, and server routes in front of the quote and address APIs. I then launched a second energy brand on my own, with nine server-side routes to a supplier's API for meter lookups, tariffs, quotes, bank-detail checks and application submission. I added one-time links to both energy sites and the team's tax site, and rebuilt the e-signature pipeline on the team's car-finance claims sites, in Next.js and Rails.
- Role
- Lead developer · Softaims
- Time
- 2026
- Stack
- Next.js · React Hook Form · Zod · TanStack Query
- Access
- Private: client projects
Constraints
These live or die on conversion. Funnel links are sent to leads, so each had to work exactly once, for the right person, and signatures had to fit a partner API's hard size limit, so each is cropped to the ink and recompressed until it fits 19,000 characters.
Key decision
I implemented a teammate's one-device link design in three codebases, on three data layers (Prisma, raw pg and Sequelize): an HMAC-signed, HttpOnly cookie binds each link to the first device for 20 minutes, submission invalidates it, and link-preview bots are ignored so a chat-app preview can't use it up. The trade-off: someone who switches device or comes back late needs a fresh link. What I'd change: pull the near-duplicate funnel pages into one shared form package.
- Preview: The funnel link is sent to the lead. If a chat app's link-preview bot fetches it first, it's ignored, so a preview can't use the link up.
- Open: The lead opens it. An HMAC-signed, HttpOnly cookie binds the link to that first device for 20 minutes.
- Other device: The same link on another device is refused. That's the trade-off: switching device, or coming back late, needs a fresh link.
- Submit: Submitting the form invalidates the link.
- Reopen: Opening it again is refused: the link has been used. It worked exactly once, for the right person.
Preview. The funnel link is sent to the lead. If a chat app's link-preview bot fetches it first, it's ignored, so a preview can't use the link up.
7 sites · one built solo, lead developer on another
Stack
Next.js · React Hook Form · Zod · TanStack Query · Prisma · PostgreSQL · Stripe · Ruby on Rails
Want to talk about this build?
I'm open to remote full-time roles and freelance work, and happy to walk through the decisions behind it.