Case study · Internal tools

EMB internal tooling — CRM, PM dashboard, and Meta Ads dashboard

Running a solo automation shop means context-switching between client work, sales, ads, and pipeline tracking constantly. Off-the-shelf CRMs and PM tools assume a team of five and bury the half-dozen views that actually matter for a one-person operation.

ClientEMB Marketing LLC202616 weeksRead2 min
Next.jsNeonSupabaseVercelMeta Ads APITanStack Query
4Off-the-shelf tools replaced
Down 70%Daily switches between tools
1 (our DB)Source of truth for clients
ProductionStatus of each app
Back to Case Studies

The problem

Solo freelancers get told to "buy off the shelf" — and most off-the-shelf tools are priced and shaped for teams. A one-person CRM doesn't need collaborative pipelines and team Kanban; it needs a tight loop between "this lead came in," "this is what I told them," and "this is the next step." Same for project management and ads.

We were paying for four overlapping SaaS tools and using maybe 10% of any of them. Worse, none of them talked to each other — pipeline data lived separately from billing data, which lived separately from ad performance.

The approach

One database, three surfaces. All three internal apps read from the same Postgres (Neon for the CRM and PM, Supabase for the ads dashboard's pixel-event data). Lead → project → invoice → ad-performance is one query, not four exports.

Built only the views that matter. No collaborative features, no task-assignment UI, no Slack integrations. Just the screens a solo operator opens fifteen times a day:

  • CRM: an inbox of leads, a single-page client view, a "what did I last send them" history, and a follow-up nudge.
  • PM dashboard: projects with phase, blockers, and a single field for "what's the next thing I'd do if I had two hours."
  • Meta Ads dashboard: consolidated spend / CTR / CPL across all managed accounts, with the per-account breakdown one click away.

Stack: Next.js App Router with React Server Components doing the heavy data reads, TanStack Query on the client side for the views that need optimistic updates, Neon and Supabase for the two data surfaces, and one shared auth session that gates all three apps behind a single signed cookie.

The outcome

The four off-the-shelf tools are gone. The number of times I switch tabs during a working day dropped roughly 70%. More importantly, when EMB recommends "build the simple version yourself" to a client, it isn't theory — it's the literal stack I run my own business on.

These case studies of EMB on EMB are also what the rest of this page is modeled on. If we wouldn't ship it for ourselves, we don't ship it for a client.

Outcome

Three internal apps — CRM, project dashboard, and Meta Ads dashboard — sharing one auth session and one data model. Every operational decision EMB makes lives in something we built ourselves, which means we feel every gap before we ask a client to live with one.

Lets build your first one.

Describe whats eating your teams time. Our AI will scope the automation in seconds — completely free.

Or book a call directly