Case archive
Projects that show systems thinking in practice
Seven deliveries where the value is more than the surface: booking logic, data pipelines, content flows, deployment, and interfaces people can use.
ProblemA business-facing booking product needs to handle guests, resources, times, staff roles, and conflicts without creating friction for the user.
SolutionI built a Laravel platform with public booking without accounts, admin and staff views, RBAC, tenant isolation, and transaction-safe booking conflict checks.
What it showsShows that I can build systems where business rules, data model, and daily workflows need to hold together, not just a polished frontend shell.
DetailsTenant isolationRole-based accessConflict checksVisual floor planNeon + Render
TechLaravel 11PHP 8.3Neon PostgreSQLBladeTailwindAlpine.jsRender
ProblemExchange rates need comparison over time with KPIs, charts, and risk indicators without heavy backend operations.
SolutionI built a monorepo with a React/TypeScript frontend and Python pipeline that fetches ECB data, publishes static JSON files, and updates daily through GitHub Actions.
What it showsShows that I can connect data, CI, performance, and interactive UX into a solution that is easy to operate and reason about.
DetailsDaily CI updateStatic data filesKPI calculationComparison modeBilingual UI
TechReactTypeScriptVitestPythonpytestruffChart.jsGitHub Actions
ProblemVisitors need to understand the course, setup, and results quickly, while the organizers need a secure way to register players, rounds, and courses without touching the database directly.
SolutionI built a React/Vite frontend that talks to a purpose-built ASP.NET Core backend: public season and player pages, an admin panel behind JWT login for managing players, rounds, and courses, and an adapter layer that normalizes the API's varying response shapes.
What it showsShows that I can build and wire a frontend to a self-authored authenticated backend across two repos, with adapters and a resilient API client that keep the UI decoupled from the backend's exact response shape.
DetailsJWT-protected admin panelCRUD for players/rounds/coursesAdapter layer over the API contractAPI client with timeout/retryPer-season player stats
TechReact 19ViteReact RouterTailwindASP.NET CoreJWTRender
ProblemTracking a round on paper gives you no data to improve from. Golfers need a way to log rounds hole by hole and get concrete feedback on what actually cost strokes.
SolutionI built a full-stack Next.js app with a hole-by-hole scorecard, localStorage persistence, statistics charts, screenshot import via AI vision, and Claude-powered coaching analysis per round.
What it showsShows end-to-end product thinking: secure server-side AI integration, structured data from unstructured input, and a UI that stays usable during a round.
DetailsServer-side AIScreenshot importlocalStorageHole-by-hole statsCoaching report
TechNext.js 16TypeScriptTailwind v4Anthropic SDKZodRender
ProblemLocal football coverage is scattered across sources and local newspapers. No single place aggregates standings, matches, and goal scorers for a town's teams, kept automatically up to date.
SolutionI built a Next.js app that pulls leagues, matches, and standings from an external sports data source, and lets Claude read local newspaper match reports to judge relevance and extract goal scorers from unstructured text.
What it showsShows that I can build a source-agnostic ingest architecture and apply AI to structured extraction from text, running on a scheduled, cost-free operational setup.
DetailsSource-agnostic ingestAI-driven relevance filteringGoal-scorer extraction from textCron via GitHub ActionsSupabase Postgres
TechNext.js 16TypeScriptDrizzle ORMSupabaseZodTailwind v4Anthropic SDKGitHub ActionsRender
ProblemSplitting expenses in a group (a trip, a shared cabin, a dinner club) quickly turns into a tangle of small debts crossing between everyone, and nobody's quite sure who owes whom.
SolutionI built a Laravel + Inertia + Vue app with groups, split expenses, and a greedy debt-simplification algorithm that computes the minimum number of transactions needed to settle the whole group, plus reminders with an atomically-protected cooldown.
What it showsShows I can solve a real algorithmic problem, not just build CRUD, and handle race conditions correctly with atomic database operations.
DetailsDebt-simplification algorithmGroups & split expensesAtomic reminder cooldownPush & email notificationsScheduled reminders
TechLaravel 13PHP 8.3Inertia.jsVue 3PostgreSQLPestLarastanTailwind v4Render
ProblemTurning features on and off in production without control over who approves it, traceability for what changed, or a fast rollback path is dangerous once multiple environments and multiple people are involved.
SolutionI built a Laravel-based feature-flag control plane in the style of LaunchDarkly: project-scoped API keys, deterministic rollout hashing, a draft/publish workflow per environment with two-person approval for critical flags, a break-glass emergency override, and an immutable audit log with a checksum chain.
What it showsShows I can design governance and permissions for a tool other developers trust in production, not just build features — governance, traceability, and race-condition safety are first-class citizens, not afterthoughts.
DetailsPer-project RBACTwo-person approvalImmutable audit chainDeterministic rollout hashingBreak-glass override
TechLaravel 12PHP 8.3PostgreSQLPHPUnitPintGitHub ActionsRender
Want to see how your project would be broken down?
Send the current state, goal, and what is unclear. I will respond with a concrete first step and what should be built first.