Product case study

Live SaaS product

Planeward

A multi-tenant workspace where service businesses run projects, clients, invoices, sites, and the jobs they repeat, with an API and MCP server so people and agents work from the same records.

Role
Founder, product design, and full-stack engineering
Scope
Multi-tenant SaaS monorepo: app, marketing site, sites host
In use by
Viewprint, Content Creator Lab, Zhyporium, and Digital Freedom PH
Status
Live at planeward.com
Planeward workspace home with pipeline, billing, spending, and cash flow summaries
Workspace home: what needs action and how the period is tracking.
Planeward workflow editor with an overdue invoice workflow that branches by amount
A durable workflow: overdue invoice, branch on amount, notify or wait.
Planeward project board with tasks organized into status columns
Project boards: columns are statuses, cards are tasks.
Planeward site editor with block library, canvas, and style inspector
The site builder behind published pages and funnels.

Context

One workspace has to replace a stack of tools.

Small service businesses usually run on a stack of disconnected tools: a project board, a CRM, an invoicing app, a site builder, a form tool, and automations glued between them. Every handoff between those tools is a place where context gets lost and someone has to copy data by hand.

I designed and built Planeward as one workspace for that whole operation. It runs day-to-day work for Viewprint, Content Creator Lab, and Zhyporium, and Digital Freedom PH uses it for project management, which means every module has to hold up under real customers, real money, and real staff rather than a demo dataset.

Projects, clients, money, sites, and automation each have mature standalone products. Bringing them together only works if every module shares the same people, permissions, and records, so an invoice, a deal, a form submission, and a task all point at the same customer.

The platform also had to be multi-tenant from the first line of code. Each workspace needs its own members, roles, payment accounts, domains, and integrations, and none of that can leak between tenants, even when the request comes from an API key, a webhook, or an AI agent instead of a signed-in person.

System

What I designed and built

01

Workspaces and access control

Workspaces as the tenant boundary, with members, custom roles, teams, guests, and projects limited to specific people, all resolved through one access layer.

02

Projects and task views

Boards, lists, a timeline, a calendar, and a shared canvas over the same tasks, with statuses, labels, subtasks, milestones, templates, and an inspector that keeps people in context.

03

Clients and pipelines

Customers, contacts, tags, and opportunity pipelines in the same workspace as the work, plus email campaigns and follow-up sequences for the people on those records.

04

Invoices, payments, and expenses

Invoices from draft to paid, Stripe and Xendit connected per workspace, expenses against budgets and closed periods, and a magic-link client portal that never exposes the workspace.

05

Sites, funnels, and forms

A versioned page builder, ordered funnels, custom domains, Meta Conversions API and Tag Manager support, and forms with AI-drafted first versions that embed on any page.

06

Durable workflow automation

A visual workflow editor with triggers, branches, waits, and an AI agent node, executed as durable Inngest steps with run history, retries, and signed outbound webhooks.

07

Public API and MCP server

Scoped API keys and an MCP server that let Claude or ChatGPT read and operate a workspace through the same permission checks as the app.

08

Team chat and realtime

Public and private channels, threads, reactions, and project-linked conversations delivered over a transactional outbox so realtime updates never drift from the database.

Architecture

Product and engineering decisions that kept it coherent

01

Make the workspace the tenant boundary

Every record, URL, payment account, and integration belongs to a workspace, and foreign IDs are scoped to it, so isolation is a property of the data model rather than a check someone has to remember.

02

Resolve access through one facade

Permission checks go through a single can() layer with the owner bypass built in, and the data access layer is the auth boundary, so the app, API, and MCP all enforce the same rules.

03

Let teams switch modules off

CRM, chats, and other areas are modules a workspace can disable, so a freelancer who only needs projects gets a focused product instead of an enterprise suite.

04

Keep customer money with the customer

Stripe, Xendit, and bank details connect to each workspace directly, and Planeward takes no cut, which keeps the platform out of the payment flow between a business and its clients.

05

Treat agents as first-class users

The API and MCP server are product surfaces with scopes, pagination, and documented schemas, so AI agents can run real operational work without bypassing the rules people follow.

Result

A platform businesses actually run on.

  • Viewprint, Content Creator Lab, and Zhyporium run projects, clients, money, and automation from Planeward workspaces instead of a stack of disconnected tools, and Digital Freedom PH manages its projects there.
  • Projects, CRM, invoices, sites, forms, and workflows share the same customers and permissions, so data entered once is available everywhere it is needed.
  • The API and MCP server let AI agents operate workspaces with the same scopes and checks as staff, turning automation into part of the product rather than an external integration.
  • One monorepo carries the app, marketing site, and published-sites host, so contracts, components, and deployment evolve together.

Building something with similar complexity?

Show me what you're building

Share the roles, workflows, or integrations that need to work together. I'll help turn the difficult parts into a clear, buildable system.