Project details
Professional · PrivateMarlo
Multi-tenant marketing operations SaaS for agencies: AI-generated 30/90-day plans, a capacity-aware Kanban with at-risk flags, a versioned prompt studio, and OAuth into Google Analytics, Ads, and HubSpot.
Role. Full stack across the product, billing, AI planning, prompt studio, and integration surfaces.
- SaaS
- Next.js
- AI
- Stripe
- Drizzle
- Clerk
Problem
Agencies draft AI plans that never land on a board people trust, boards ignore real capacity, and many client accounts must stay isolated. Prompts also need to be versioned like product artifacts, not buried in config.
Tradeoff
Shared infrastructure for speed, so every new feature must respect tenant boundaries and metering.
What we considered
- A separate database per client, too expensive to operate early on.
- Prompts buried in env/config, no way for the team to version and improve them in-product.
- Plans in one tool and capacity in another, so risk never shows up next to the work.
How it works
Next.js App Router product for admin and client portals on one codebase. Plans are drafted with the Vercel AI SDK, then live on the same capacity-aware Kanban with at-risk flags. Prompt studio versions prompts in-product. Clerk handles RBAC; Drizzle + Neon Postgres for data; Stripe for usage-metered billing; OAuth to Google Analytics, Ads, and HubSpot. Covered with Vitest and Playwright.
Decisions
- Prompts are versioned product artifacts, not one-off strings.
- AI plans sit next to capacity and risk on the same board.
- Admin and client experiences share one multi-tenant codebase with org-scoped isolation.
Outcomes
- Admin and client portals with metered Stripe billing.
- 30/90-day AI plans that land on a capacity-aware board.
- Connected planning via Analytics, Ads, and HubSpot OAuth.
Want to go deeper on this project?
Happy to walk through decisions and constraints.