← All case studies
Independent in-progress prototypePersonal product prototype

Operations Platform for Agencies

A 0→1 operations platform built around the account hierarchies and communication workflows that agency teams actually manage.

I first explored this idea as a capstone project. I am now rebuilding it independently with a stronger data model and a modern TypeScript stack. It is not a production system or a company-sponsored product.

  • Next.js
  • TypeScript
  • Prisma
  • PostgreSQL
  • Auth.js
  • Jest

Case study at a glance

The problem, my role, and the result.

problem
Most general-purpose tools force agency teams to flatten franchise-brand and location relationships or split them across disconnected records.
stakes
The data model has to stay flexible enough for different client structures while preserving clear access boundaries and future project-management relationships.
My ownership
I set the product direction and own the schema, architecture, user experience, implementation, documentation, and test strategy.
outcome
The current rebuild has working account, sub-account, contact, custom-field, event-log, access-control, user/team, and Gmail communication flows.

Synthetic product walkthrough

The private product name is intentionally omitted. These recreated screens use entirely fictional people, organizations, addresses, and conversations; the private repository and source are not published.

Architecture

The boundaries that made the work useful.

01

Flexible CRM relationships

Primary accounts can contain recursively nested sub-accounts. Contacts remain independent and can connect to more than one account or sub-account.

02

Relational foundation

PostgreSQL and Prisma make the relationships explicit and leave room for CRM records to connect cleanly with a future project-management service.

03

Scoped access

Tenant, role, team, and entity scopes are part of the application model instead of being treated as a UI-only concern.

04

Connected communication

Gmail connections, shared threads, communication logging, and reminders place conversations beside the people and accounts they affect.

Key decisions

What I chose and why.

  1. 01

    Rebuilt the original Pages Router JavaScript application with the Next.js App Router and strict TypeScript.

  2. 02

    Replaced MySQL and raw queries with PostgreSQL and Prisma to make the evolving relational model easier to reason about and migrate.

  3. 03

    Redesigned the account model around primary accounts, recursive sub-accounts, and many-to-many contact relationships.

  4. 04

    Used AI-assisted development to accelerate implementation, refactoring, documentation, and verification while retaining ownership of product and architecture decisions.

Outcome & evidence

What the repository and delivered work support.

  • 01

    The audited repository contains 23 route-backed screens, including account, sub-account, contact, communication, Gmail, user, team, role, custom-field, and integration settings flows.

  • 02

    The current Prisma schema contains 37 models covering identity, access, integrations, CRM relationships, communications, reminders, and supporting join records.

  • 03

    The repository includes 71 automated test files across actions, routes, UI components, permissions, CRM utilities, Gmail, and integration behavior; all 499 tests passed in the read-only audit.

  • 04

    The repository lint check and production build both completed successfully in an isolated read-only audit workspace.

  • 05

    All portfolio screenshots use entirely synthetic demo data. The source repository remains private.

Reflection

What I learned and what I would do next.

What I learned

The rebuild reinforced that the hard part is not choosing a newer stack. It is making the domain model clearer so the interface, permissions, integrations, and future services can grow from the same foundation.

What I would do next

I would continue validating the model through real workflow usage before expanding the project-management and financial areas. The prototype is intentionally presented as in progress.

Senior full-stack engineering · Hands-on technical leadership

Looking for someone who can own the system around the feature?

View Résumé ↗