Skip to content
Back to projectsContact

Case study / Full-stack product

LumaFlow Studio

A workflow platform for photographers connecting planning, CRM, finance, delivery, and local AI assistance without presenting the project as a fictional SaaS.

My role

I designed and built the complete product: React interface, Laravel API, authentication, multi-user data model, business modules, local AI, testing, and documentation.

View code
Conceptual overview of LumaFlow Studio modules

01 / Problem and context

Photography studios lose context across disconnected tools.

Sessions, clients, tasks, quotes, invoices, locations, and deliveries often live in separate applications. The goal was to model those relationships in an assessable, reproducible product while keeping privacy and scope boundaries explicit.

02 / Goals

  • Connect a session from planning through delivery.
  • Protect every resource through user ownership and Sanctum authentication.
  • Add on-demand local AI without external keys or initial JavaScript cost.
  • Document architecture, setup, and limits for technical review.

03 / Process

01

Domain

I defined entities and relationships around clients, sessions, tasks, financial documents, and galleries.

02

Architecture

I separated frontend and backend over HTTP, using thin controllers, domain services, requests, and resources.

03

Product

I built connected modules, keyboard navigation, global search, and reproducible operational states.

04

Quality

I closed the release with tests, Docker, technical documentation, and an explicit list of pending features.

04 / Decisions

Technical

  • Queries scoped by user_id through Eloquent scopes and relationships.
  • 404 responses for resources owned by someone else, avoiding existence disclosure.
  • Domain logic in services and validation in Form Requests.
  • WebLLM and WebGPU models loaded only when the user enables AI.

UX and product

  • Dashboard and calendar prioritize tasks, sessions, and deliveries requiring action.
  • Global search and shortcuts reduce repetitive navigation.
  • System status makes API, data, storage, and optional AI visible.
  • The PWA keeps an offline shell while heavy models remain on demand.

05 / Architecture

Independent React SPA and Laravel API connected over HTTP and backed by MySQL.

React 19ViteTailwind CSS 4Laravel 13PHP 8.3SanctumMySQL 8WebGPUWebLLMDockerPWAVitest / PHPUnit

06 / Challenge

Keeping many modules coherent without turning controllers, state, or navigation into tightly coupled, hard-to-test bottlenecks.

07 / Solution

I organized code by domain, separated remote and local state, encapsulated rules in services, and documented contracts, setup, and product limits.

08 / Result

Public code release with 56 backend tests and 33 frontend tests.

Learnings

  • A portfolio product gains credibility when it documents what it does not implement.
  • Privacy and data ownership must be part of the model rather than added at the end.
  • Local AI adds value only when it does not penalize the core workflow or hide its limits.
View code