The problem#
Running a photography business looks like cameras. It isn't. It's enquiries arriving at all hours, each one needing the same questions answered fast: what kind of event, when, and which photographer is free and right for it. Then the quote, the deposit, the emails, the follow-up.
Do that by hand and two things happen. Good leads go cold while you're shooting, and you pay for a stack of separate tools to hold each slice — money out every month, with the business's data scattered across all of them.
I wanted one system: the whole enquiry-to-booking flow in one place, with the repetitive decisions made automatically and a human still holding the pen on anything that leaves the business.
How does it work?#
The chain, in one line: new enquiry → classification → photographer priority list → suggested action → human checkpoint → timeline update. In full:
- input
- A new enquiry lands — name, event, date, the details people actually send.
- classify
- The system reads the full email, not a keyword match, and puts the enquiry in a category: the type of event, what the client needs, what should happen next.
- route
- A photographer priority list is generated — who to offer this work to — instead of someone remembering who's free.
- draft
- The outreach is prepared: what to send back and the message workflow (including SMS) to move it along.
- checkpoint
- Nothing goes out unapproved. A human reviews before any outreach is sent.
- timeline
- Every step lands on one timeline per enquiry — the audit trail of what happened and when.
Classification quality is the whole ballgame: it decides which photographer gets offered the work, what the client hears back, and whether the enquiry turns into a booking. Read the enquiry wrong and the wrong follow-up goes out fast.
What did I build?#
- The enquiry pipeline. Intake through classification to a suggested action, with the full email content used as context.
- Priority routing. Photographer priority lists generated per enquiry, so the offer goes to the right people in the right order.
- Outreach prep. The message workflow — including SMS — drafted and queued for approval rather than written from scratch.
- The record. One timeline per enquiry: what came in, how it was classified, what was suggested, what a human approved.
- The consolidation. Payments, Gmail, bookings and automations unified into one in-house system instead of several subscriptions — PostgreSQL underneath, Gmail API for email, Stripe for payments, a workflow engine running the automations.
I find expensive repetitive work → build AI systems → test them until they're reliable → ship them → measure the business result.
Before and after#
| Area | Before | After |
|---|---|---|
| Enquiries | Manual inbox triage, decisions from memory | Classified on arrival with a suggested action and a photographer priority list |
| Outreach | Written by hand | Drafted by the system, sent only after human approval |
| Records | Scattered across separate tools | One timeline per enquiry (audit trail) |
| Cost | Several paid subscriptions, every month | $5,000+/yr of subscription spend eliminated |
| Scale | 3,000+ events, 30+ photographers, coordinated by hand | The same business, run day to day on the system |
Technical depth#
- PostgreSQL
- Gmail API
- Stripe
- workflow engine
- SMS outreach
- human-in-the-loop
There's no exotic architecture here — just the right parts, connected properly. PostgreSQL holds the business's data: enquiries, events, people and state. The Gmail API puts email in and out of the same pipeline. Stripe handles payments. A workflow engine runs the automations that connect the steps, so the process is a defined sequence rather than a pile of scripts.
The interesting part is the seam between automation and judgment. Classification can be automatic. Outreach can be prepared automatically. The send stays a human decision — a product decision as much as a technical one.
Production readiness#
This isn't a demo — it's the system running a real business day to day. The safeguards are what make that possible.
- Human approval before outreach. The system prepares; a person approves before anything reaches a client.
- Audit trail. Every enquiry keeps a timeline — classification, suggestions, actions — so any decision can be traced.
- Failure paths. Error handling and retries sit on the integration steps (email, payments, messaging) so a failed call doesn't silently drop a lead.
- Access and observability. The system runs under controlled permissions, with logs of what it did — so problems get found by the system, not by a client.
The result#
The clearest proof is that ferdi.photography doesn't run on the old stack any more. Bookings, payments, outreach and follow-up all live in the one system, and the business is public: 3,000+ events delivered, a 30+ photographer network, 4.9★ across 120+ reviews.
30-second walkthrough#
Why this matters to an employer#
Reading a messy process
A manual, undocumented workflow walked in; a modelled, automated system walked out.
Connecting real systems
Email, payments, messaging and a database, integrated and kept in sync.
Keeping humans in control
Automation prepares; people approve. That's how a business comes to trust it.
Running production
Not a prototype — it operates a live business, with the safeguards to match.