From Concept to Launch: Building a Founder Networking Platform in 5 Weeks
April 9, 2026
From concept to launch: how WebLaunch engineered Wrinkle.law, a two-sided legal marketplace with AI-powered lawyer matching, using Nuxt 4, Supabase, and OpenAI.
Loic Bachellerie
April 9, 2026
Most people facing a legal issue do not know where to start. They search Google, land on a directory with 400 listings, and spend hours trying to decode which attorney handles their specific situation, in their jurisdiction, at a price they can afford. The experience is opaque, slow, and anxiety-inducing at exactly the moment people can least afford friction.
On the other side of that equation, qualified lawyers waste significant time fielding inquiries that are entirely outside their practice area. A family law attorney should not be triaging personal injury leads. Yet that is what most legal directories force on them.
The market has had generic directories for decades. What it lacked was intelligence.
That is the gap Wrinkle.law was built to fill.
The brief was clear: build a two-sided legal marketplace where clients describe their legal problem in plain language, and the platform intelligently surfaces the right lawyers. Not a filtered list. Not a keyword search. Actual matching that accounts for practice area, location, availability, and experience level.
For lawyers, the value proposition was equally precise: receive only the leads relevant to your practice, manage your pipeline from a clean dashboard, and get notified the moment a qualified client needs your expertise.
The product needed to be polished enough to earn trust from two distinct audiences - anxious clients and skeptical legal professionals - simultaneously. That is a harder design and engineering problem than it sounds.
We had eight weeks.
Before writing a line of code, the architecture decisions needed to be right. A two-sided marketplace is not a CRUD app. It requires careful thinking about data isolation, role-based access, real-time state management, and a matching layer that can be tuned as the business learns.
We chose Nuxt 4 as the full-stack framework. The combination of server-side rendering for SEO, server routes for API logic, and a mature Vue 3 ecosystem made it the right fit for a content-heavy, dynamic application. Legal services are a high-intent search category - organic discoverability matters from day one.
Tailwind CSS v4 with shadcn-vue gave us a component library that looks production-ready without accumulating design debt. Legal clients need to trust the interface immediately. A polished UI is not cosmetic - it is a conversion factor.
For the database and backend services, Supabase was the clear choice. PostgreSQL handles relational complexity well, the built-in Auth covers the multi-role authentication requirement, Storage manages document uploads, and Row Level Security (RLS) handles data isolation at the database layer rather than relying solely on application logic. More on that shortly.
OpenAI's gpt-4o-mini powers the AI categorization layer. It offered the right balance of accuracy and cost for a high-frequency classification task where every lead submission triggers an inference call.
Vercel handles deployment and edge functions. Resend manages transactional email. Sentry monitors errors in production. Each tool was chosen because it does one thing extremely well.
The most technically interesting problem was also the most user-facing one: how do you take a client's free-text description of their legal situation and translate it into structured data that can drive matching?
Legal language is notoriously specific. "My landlord won't fix the heat" and "my landlord is trying to evict me" are both landlord-tenant issues, but they require different expertise. A client rarely knows to say "residential tenancy law" - they just describe their problem.
We built an AI categorization layer that runs on every lead submission. When a client describes their situation, the OpenAI API analyzes the text and returns a structured classification: primary practice area, secondary tags, urgency indicators, and jurisdiction relevance markers. This happens in under two seconds and is invisible to the user.
The classification output feeds directly into the matching algorithm. Critically, we also store the raw classification confidence scores, which allows the matching logic to apply tighter or looser criteria depending on how clearly the AI could interpret the lead.
This approach eliminated the traditional intake form problem. Instead of forcing clients to select from a dropdown of 40 practice areas they do not understand, they write naturally. The AI handles the translation.
Displaying any qualified lawyer to any client is not matching - it is just a list. Real matching requires ranking, and ranking requires understanding what "qualified" means in context.
We implemented a two-phase algorithm:
Phase one applies strict filters. A client in Ontario looking for immigration help will only ever see immigration lawyers licensed in Ontario. This is non-negotiable and runs first. Filters include practice area alignment (from the AI categorization), jurisdiction, availability flag, and active account status. Lawyers who do not pass all four criteria are excluded entirely.
Phase two applies weighted scoring to the remaining pool. Factors include depth of practice area match (a lawyer whose primary specialty matches scores higher than one with it as a secondary area), profile completeness, response rate history, and recency of platform activity. The weights are configurable through an admin interface, which means the business can tune the algorithm as real-world data accumulates - without a code deployment.
The result is a shortlist of up to three lawyers presented to the client for comparison. Three was a deliberate product decision. More options increase decision paralysis. Fewer feels arbitrary. Three gives clients meaningful choice without overwhelming them.
A marketplace fails if the supply side is not activated. Lawyers needed to be able to set up comprehensive profiles without it feeling like filling out a government form.
We built a seven-step onboarding wizard that collects everything the matching algorithm needs: personal and firm information, bar admissions and jurisdictions, practice areas with primary and secondary designations, years of experience, availability preferences, and a public-facing bio. Each step validates independently, progress is saved automatically, and lawyers can return to complete it across sessions.
The wizard was designed to feel like a conversation, not a compliance exercise. Copy matters here. Legal professionals are skeptical of new platforms - every friction point is a reason to abandon. Completion rate for the onboarding flow became a metric we tracked closely during the first weeks post-launch.
In a two-sided marketplace, data isolation is not just a compliance concern - it is a product integrity requirement. A client must never see another client's lead. A lawyer must never access another lawyer's dashboard data. An admin needs cross-platform visibility without those permissions leaking into the client or lawyer surfaces.
We built the entire data access model on Supabase's Row Level Security policies. Every table has explicit RLS rules that enforce access based on the authenticated user's role and ID. This means security is enforced at the database layer, not just the API layer. Even if an application-level bug were to construct a malformed query, the database would reject it.
This approach required careful upfront design. RLS policies need to be written with full awareness of the query patterns your application will use - poorly designed policies can create N+1 query problems or unexpected permission denials. We invested time in the data model before building the application layer, and it paid off in a system that is both secure and performant.
The matching algorithm and AI categorization are the interesting engineering work, but a marketplace lives or dies on operational reliability.
Lawyers needed a lead management dashboard that surfaces new matches, tracks lead status through a pipeline (new, contacted, engaged, closed), and provides enough context to decide quickly whether to pursue a client. We built this as a real-time interface backed by Supabase subscriptions, so new leads appear without a page refresh.
Clients got a shortlist comparison view that presents the three matched lawyers side by side - credentials, experience, and a summary of why each lawyer was matched to their specific situation.
Vercel cron jobs handle scheduled tasks: lead expiry notifications, inactivity reminders for lawyers who have not logged in recently, and weekly match summary digests. Resend delivers transactional email with enough reliability and deliverability tooling that we do not have to worry about critical notifications ending up in spam.
Sentry provides error monitoring across both client and server surfaces. In a production marketplace handling real legal inquiries, silent failures are not acceptable. Every unhandled exception generates an alert.
The v1 of Wrinkle.law that went live included:
Eight weeks from first commit to a live, functioning marketplace handling real users on both sides. Not a prototype. Not an MVP with missing functionality. A production system built to scale.
Wrinkle.law is a specific product, but the engineering patterns it represents apply broadly: AI-powered intake that removes friction from complex categorization problems, multi-role data architectures that need to be secure by design, matching algorithms that go beyond simple filtering, and operational tooling that lets a business run without constant developer intervention.
If you are sitting on a marketplace idea, a platform with a complex onboarding problem, or a product that needs to integrate AI in a way that actually moves the needle - these are solvable problems. They require engineering that thinks about product outcomes, not just technical implementation.
WebLaunch builds products like this. Not agencies delivering tickets, but a Growth Engineering Studio that takes ownership of the outcome. If you have a concept that needs to become a real, working product, let's talk about what eight weeks could look like for you.
Reach out at weblaunch.ca.
Let's discuss how we can help you achieve your goals online.