01 · The challenge
What needed solving
The client ran a community of combat-sports practitioners and needed a member roster organised by community category and weight class — instead of WhatsApp groups and a spreadsheet. The UX had to feel like an app (fast tab switches, no reloads) so members would actually use it on their phones.
02 · Our approach
How we framed the work
We started with a discovery sprint to map the user journey, business goals and real constraints. From there we wrote a fixed-scope plan: clear milestones, weekly review gates on a staging URL, and a written exit criterion for every phase. The web development space rewards teams that ship — not teams that plan — so we biased the engagement towards working software from week two onward.
03 · The solution
What we built
We built a Laravel + Vue SPA hybrid: Laravel handles authentication and serves a Vue application off a single catch-all route ({path} → HomeController), letting Vue Router own all navigation client-side. The domain model is members organised by community category and weight class — the structure most combat-sports communities (boxing, MMA, kickboxing) already think in. Auth is Laravel's built-in stack with the SPA front-loading user state on boot. Half the codebase by line count is the Vue layer (49.7%) — the heavy frontend reflects that this is an app-first build, not a CMS.
04 · The results
What changed for the client.
Single-page experience — phone users get instant tab switches with no reloads
Members structured by category + weight class — the way the community already thinks
Laravel handles auth and API; Vue owns the UX — clean separation, easy to iterate
Tech stack
Want a similar outcome for your business? We'd love to hear about it.