The Brief
The founder of Leadify had a clear hypothesis: B2B sales teams were wasting hours per day manually prospecting on LinkedIn. They wanted to build a platform that automated the top-of-funnel: finding, enriching, and qualifying leads at scale.
The founder was non-technical, had a validated idea from conversations with 12 potential customers, and a pre-seed budget to build with.
Timeline requirement: live before the end of the month.
Week 1: Architecture and Core Flow
We spent the first three days in a design sprint, not writing code.
Key decisions made in week 1:
- Monorepo structure: Next.js frontend + Node.js API + shared types. Keeps the team in sync and deployment simple.
- Multi-tenant from day 1: Many founders skip this and regret it. Every data model was built with organisation-level data isolation.
- Stripe first: Revenue infrastructure before fancy features. We wired Stripe Checkout and webhooks on day 4 so billing was never an afterthought.
- Seed data pipeline: Chose Clay API for lead enrichment (better data quality than alternatives at this price point).
By end of week 1: database schema finalised, auth working, Stripe sandbox processing test payments.
Week 2: The Core Product
With foundations solid, week 2 was full speed on the core user flow:
The Leadify flow:
- User defines their ICP (target company size, industry, geography, keywords)
- Platform discovers matching companies from multiple data sources
- AI enrichment layer finds the right contact at each company (title matching, verified email)
- Leads scored and ranked by ICP match percentage
- One-click export to CRM or CSV, or direct sequence trigger
The most technically interesting piece was the enrichment pipeline. We built it as an async job queue (BullMQ on Redis) so the UI stays responsive while enrichment runs in the background. Users get a real-time progress indicator and a notification when their list is ready.
AI layer: GPT-4o mini for company research summaries and personalised first-line generation. Fast, cheap, and good enough for the use case.
Week 3: Polish, Testing, and Launch Prep
Final week was about confidence, not features.
- End-to-end test suite covering the full user journey
- Error boundaries and graceful degradation throughout the UI
- Rate limiting on the API (protecting against abuse and API cost spikes)
- Onboarding flow: 5 steps, under 3 minutes from signup to first lead list
- Staging environment fully mirroring production
- Runbook written for the founder: how to handle common support scenarios
Launch day deploy: Zero issues. The CI/CD pipeline we set up in week 1 meant deploy was a single git push.
The Stack
- Frontend: Next.js 15 + Tailwind CSS + shadcn/ui
- Backend: Node.js + Express + PostgreSQL + Redis
- Job queue: BullMQ
- AI: OpenAI GPT-4o mini
- Data: Clay API + LinkedIn enrichment
- Payments: Stripe Checkout + Billing Portal
- Hosting: Vercel + Railway
- Monitoring: Sentry + Uptime Robot
Results
| Metric | Target | Actual |
|---|---|---|
| Build time | 4 weeks | 3 weeks |
| Time to first paid customer | 30 days post-launch | 7 days post-launch |
| Infrastructure incidents in 90 days | < 3 | 0 |
| Onboarding completion rate | > 60% | 78% |
What This Project Demonstrated
Speed without shortcuts is possible, but it requires making the right architectural decisions early. The founders who try to skip Stripe, skip multi-tenancy, and skip the job queue because “we’ll add it later” end up paying 3× the cost to retrofit it.
We made the hard decisions in week 1, which is why week 3 was about shipping, not firefighting.
Build time: 21 days.