FixTheFlow
Inspiration
Anyone who has ever filed a maintenance ticket with a utility, landlord, or building manager knows the drill: an email disappears into a shared inbox, nobody tells you what happened to it, and the only way to get an answer is to call and ask "did anyone see my request?" We are building the tool that should already exist on the other end of that email, a single place where a request goes in, a status comes back, and staff can actually see what's on their plate. We are working for the fictional utility company, Northwind Utilities, as the setting because utilities are an excellent stress test: they have customers filing complaints, field employees resolving them, and managers who need an overall perspective of both.
What it does
FixTheFlow is a role-aware request portal:
- Customers sign up, log in, and submit a complaint or maintenance request. They can see their own requests split into Open and Closed tabs, plus a mock utility bill breakdown for context as well as a built-in calendar to reschedule appointments.
- Employees see the incoming queue of requests from all customers so they can work through them.
- Managers get an overview dashboard, total requests, how many are open vs. closed, and the maintenance/complaint split. They're additionally provided with a calendar view and the ability to manage staff accounts and roles.
Everyone signs in through the same Supabase-backed auth flow; what they see afterward depends on the 'role' stored on their profile.
How we built it
The stack is deliberately small: React 19 + TypeScript, bundled with Vite, and Supabase for auth, the Postgres database, and Row Level Security.
The data model is a single requests table plus a profiles table carrying each user's role (customer, employee, or manager). On login, 'App.tsx' fetches the caller's profile row and renders one of three dashboards accordingly. The UI is a thin layer over what RLS already allows that user to see. That lets us split work cleanly across the team: one person owned the request form and list, another owned the manager dashboard and stats tiles, and a third built out the calendar and the welcome/marketing page, all against the same schema.
Challenges we ran into
- Merging three roles into one auth flow without duplicating logic. Customers, employees, and managers all start at the same login screen, so we had to be careful that role selection during signup and role lookup on login stayed in sync with the RLS policies in
supabase/schema.sql. A mismatch there silently shows the wrong data instead of erroring. - Row Level Security got its own bug pass. We initially wrote policies that let users read their own requests but missed the case of employees needing to read everyone's requests, which meant the employee queue rendered empty until we fixed the schema (see the "fix schema" commit).
- Merging four people's branches into one
App.tsx. The welcome page, calendar, and manager dashboard were all built in parallel branches touching the same routing logic, so a good chunk of the last few hours went into resolving merge conflicts cleanly rather than writing new code. - Scope control. It was tempting to keep adding features (billing, staff management, calendars) right up to the deadline. We had to consciously stop polishing and make sure the core submit, track, and resolve loop actually worked end to end before the demo.
Accomplishments that we're proud of
- Identifying real-world problems and developing practical solutions
- Building and integrating a functional multi-role request portal
- Collaborating effectively across multiple areas of development
What we learned
- Designing the role model and RLS policies first before writing any UI saved us from a rewrite later, because every screen we built afterward was just "what does this role's Supabase query return."
- Supabase's
auth+ Postgres + RLS combo let a small team ship a real multi-role app without writing a custom backend, which was the right trade-off for a hackathon timeline. - Small, focused components (
RequestForm,RequestList,ManagerStats,Calendar) made it much easier to parallelize work across teammates than one largeDashboardfile would have.
What's next for FixTheFlow
- Real-time updates (Supabase subscriptions) so employees see new requests the moment they're submitted, instead of on refresh.
- Notifications back to customers when their request's status changes.
- Richer manager analytics, response-time trends, not just open/closed counts.
Built With
- github
- react
- supabase
- typescript
- vite
Log in or sign up for Devpost to join the conversation.