S/
Open navigation

Case Study

AI Product Backend

Backend development for a product using AI chat features, service orchestration, and payment flows.

Role
Full-stack backend development
Stack
Laravel, AI APIs, Stripe
Status
Production work

Project Summary

What the product needed

The product needed AI-assisted service flows that behaved like part of the product, not a disconnected demo.

I helped structure the backend around sessions, service boundaries, payment behavior, and user-facing flows.

Problem

Integrating AI-powered experiences with structured product logic.

My Role

Full-stack backend development

Results / Impact

Improved AI workflow reliability by separating orchestration, payment eligibility, and user-facing state into clearer backend boundaries.

Approach

Decisions in plain English

Project case study. The technical choices are written for product context first, not as backend documentation.

Private client project; public demo unavailable.

Separated AI orchestration from core product state.
Kept billing and service eligibility explicit in backend logic.
Designed flows that could be tested and reasoned about when AI responses varied.

Evidence

Constraints, architecture, and proof points

Constraint

Private client work with AI behavior that needed production-grade failure handling.

Constraint

Payment eligibility and service access had to stay explicit.

Constraint

LLM responses could vary, fail, or arrive slower than normal product requests.

Architecture

REST API layer for product sessions and user-facing state.

Architecture

Service classes for AI orchestration and payment-aware workflows.

Architecture

Queue-backed processing for retryable AI tasks.

Architecture

Explicit records for billing, eligibility, and generated results.

Proof

Designed queue-backed AI workflows for safer retries.

Proof

Modeled subscription and eligibility states explicitly.

Proof

Kept AI provider logic separate from core product state.

Retrospective

System trade-offs & lessons

Real-world reflections on what failed initially, and how we refactored the architecture to achieve production stability.

We tried streaming LLM responses directly via server-sent events, but user-side network drops made connections fragile. Moving to a stateful polling system backed by database queues resolved it.

Underestimating LLM rate limits on launch day caused initial failures. We added a token-bucket limiter and auto-retry backoff queues to survive spike traffic.

Technologies

Stack used for this work

LaravelAI APIsStripe

Want to talk about a role or product? Let's talk.

Open for senior full-stack product roles, selected product work, technical collaborations, and practical engineering support.

Contact

Email me Copied!

Location

Tunisia (Remote)

Get in touch

Usually replies quickly