What needed to change
An agency needs to know what is due, who owns it and which service each client is paying for. When that information lives across multiple tools and messages, even simple updates become difficult to verify.
How I worked through it
Designing around the team's workflow
The application brings client records, service packages, projects, tasks and deliverables into a shared structure. Instead of relying on a long list of disconnected tasks, the interface makes client context available while work is being done.
Building permissions into the foundation
The stack uses Next.js, TypeScript and Supabase, with authentication and row-level security. The work includes multiple task assignees, owner controls, delivery status and responsive interfaces.
Keeping the interface restrained
I focused on readable navigation, clear statuses and practical features rather than adding decoration to a tool people need to use every working day.
What I learned
The hardest part of an internal product is deciding what information should be visible at a glance. A feature only earns its place if it saves somebody time or prevents a missed responsibility.