I built the ONE tool I need to run my entire busines.
'Maximized Portal' is an all-in-one business management platform I designed and built for my own studio. It replaces a scattered stack of Notion, Jira, spreadsheets, and docs with a single source of truth, where everything is connected.
The problem
Running a studio means managing clients, projects, tickets, time, trips, content, and automations. I was doing all of that across a patchwork of tools, while none really worked nicely with each other.
Tools everywhere, nothing connected
Client info lived in a spreadsheet. Tasks in Jira. Notes in Notion. Time tracking in yet another app. Every tool had its own login, its own data silo, its own way of doing things.
Manual tracking between systems
Logging time against a ticket meant cross-referencing three apps. Billing a client meant pulling data from five places. Nothing linked to anything else.
No single source of truth
When a client asked for a status update, I had to piece it together from scattered tools. There was no one place that told the full story of a project.
The vision
It started simple. I wanted a place where clients could access files, leave feedback, and submit requests, a shared portal between us. Feedback turned into tickets. Tickets needed sprint planning. Sprints needed time tracking. Time tracking needed billing. And suddenly I was building something much bigger.
Portal grew organically from real needs. Each module exists because I needed it, not because a feature list told me to build it. The result is 12 modules that all connect. A ticket links to a project, which links to a client, which has logged time, trips, media, and notes. Everything is one click away.
CRM
The CRM is the backbone. Every other module connects back to it. When you open a client, you see their projects, tickets, logged time, trips, media, and notes, all in one place. No more cross-referencing spreadsheets.

Company management
Track clients with logos, status, and custom hourly rates. Each company is the anchor point for everything else.
Contact & interaction logging
Manage contacts per company with primary contact promotion. Log calls, meetings, and emails with full history.
Three-tier rate system
Billing rates cascade: client default, project override, per-entry override. Flexible without being complicated.
Quotes & file attachments
Generate and track quotes per client. Attach files directly to client records for a complete project history.
Kanban
Client feedback becomes a ticket. Tickets live on the kanban board. Drag them through your workflow. Because tickets link to projects, clients, and media, moving a card forward means the whole system knows about it.

Full drag-and-drop
Built with @dnd-kit for smooth, accessible drag-and-drop across status columns. Cards snap into place with visual feedback.
Ticket linking
Every ticket connects to a project and client. Link media assets directly to tickets for full context.
Smart filtering
Filter by client, assignee, or status. The board adapts instantly, showing only what matters right now.
Assignee tracking
Assign team members with avatar indicators. See at a glance who owns what across the board.
Automation
I run dozens of n8n workflows for clients: data syncs, lead enrichment, content pipelines. The problem: n8n tells you a workflow exists. It doesn't tell you if it's actually working. Portal does.
The automation module pulls execution data from n8n and classifies each workflow's health. A workflow that ran successfully yesterday is "healthy." One with recent errors is "failing." One that's active but hasn't run in days? That's "silent", and potentially the most dangerous, because no one notices until a client asks why something stopped working.
Beyond health monitoring, Portal tracks execution timelines (24h and 72h views), token usage for LLM-powered workflows, and matches workflows to clients via tags. The email module (Resend integration) adds delivery tracking (sent, delivered, bounced, opened) and the ability to cancel scheduled sends.
Tech stack
Built on the same stack I use for client work. Modern, typed, production-grade.
Next.js
App Router with Server Components and Server Actions.
React
React 19 for the entire interactive UI layer.
Supabase
PostgreSQL database, Auth, Storage, and Row-Level Security.
Tailwind CSS
Utility-first styling with Tailwind CSS 4.
n8n
Workflow automation with health monitoring via API.
Vercel
Hosting and deployment with edge functions.
Challenges
The hardest part was never any single feature. It was keeping the whole thing simple while making it flexible enough for others.
I built Portal for my own studio's workflow. But the moment I started onboarding another tenant, every assumption got pressure-tested. Their projects work differently. Their team structure is different. Their permissions need to be different.
The challenge was keeping the tool opinionated (fast to use, no unnecessary configuration) while giving enough room for others to make it their own. That tension shaped every design decision: the permission system, the rate cascading, the module structure. Opinionated defaults, but overridable at every level.
Scope was the other constant battle. Every module I added connected to everything else, which meant every addition was more complex than it looked. A "simple" trip tracking feature needed client linking, project linking, ticket linking, rate calculations, autocomplete intelligence, and permission checks. Twelve times over.
Results
Portal is live, in daily use, and growing. What started as a client feedback tool is now the operating system for my studio.
12 integrated modules
CRM, projects, kanban, media, notes, time tracking, trips, social planner, automations, email, users, and settings, all connected.
Multi-tenant in production
Running with real tenants. Full data isolation via RLS. Per-user permissions across every module.
Active daily use
This isn't a demo or a portfolio piece. It's the tool I run my studio with, every day, for real work.
Solo end-to-end build
Design, frontend, backend, database schema, RLS policies, API integrations, deployment, all one person.