Workflow¶
The end-to-end flow from initial customer contact through to digital delivery.
Overview¶
Service Catalog ──► Quotation ──► Order ──► Event ──► Selections ──► Invoice ──► Payment ──► Download
1. Service Catalog¶
The photographer defines reusable services with default rates. These are pulled into quotations to avoid retyping rates for every job.
Service |
Unit Type |
Example Rate |
|---|---|---|
Photography |
Per Hour |
$150.00/hr |
Image Processing |
Per Image |
$2.00/image |
Travel |
Per Km |
$0.55/km |
Gallery Hosting |
Flat Fee |
$50.00 |
Equipment Rental |
Each |
$75.00 |
Services can be marked active/inactive and are sorted by sort_order.
2. Quotation¶
The photographer prepares a quotation for a customer on a specific event.
Creating a quote:
Navigate to the event’s orders page
Click “Quote” for the customer
Add line items from the service catalog (quick-add buttons) or freeform
Set the deposit amount and validity date
Save — totals are auto-calculated (subtotal, tax, total)
Quote structure:
Photography 3.00 hrs × $150.00 $450.00
Image Processing 50.00 img × $2.00 $100.00
Travel 80.00 km × $0.55 $44.00
Gallery Hosting 1.00 × $50.00 $50.00
──────────────────
Subtotal $644.00
Deposit Required -$100.00
Tax (13.00%) $83.72
──────────────────
Total $627.72
Status flow:
Draft ──► Sent ──► Accepted ──► (Order created)
└─► Declined
└─► Expired (past valid_until date)
Acceptance: either the customer accepts through the app, or the photographer marks it accepted on their behalf.
3. Order Creation¶
When a quotation is accepted:
An Order is automatically created
Photographer hours and rate are pre-filled from the per-hour line item
The deposit amount carries over from the quotation
The order is linked back to the quotation (
order.quotation)
4. Event & Photo Upload¶
The photographer creates the event, links customers, and uploads photos after the shoot.
Files are uploaded in batches of 20 via JavaScript to handle large shoots (400+ files) without hitting OS file descriptor limits
Files can be selected individually or by choosing an entire folder
A progress bar tracks batch-by-batch progress
Three image versions are generated on upload: original, thumbnail (800px watermarked), full-res watermarked
EXIF metadata is extracted (camera, aperture, shutter speed, ISO, focal length)
Photos are sorted by
sort_order, then upload timeWatermark text and opacity are configurable via
WATERMARK_TEXTandWATERMARK_OPACITYsettings (see Configuration)
Regenerate Thumbnails¶
If watermark settings are changed after upload, the photographer can regenerate all thumbnails and watermarked images for an event using the Regenerate Thumbnails button on the upload page. This re-processes photos in batches from the stored originals.
5. Customer Selections¶
Customers log in and browse the watermarked gallery. For each photo they choose:
Choice |
Description |
|---|---|
Digital |
Digital delivery only |
Print & Digital |
Print (with size selection) plus digital |
Reject |
Not wanted |
Print sizes: 4x6, 5x7, 8x10, 4x4, 8x8, 4x5.3
Selection counts update live via HTMX as the customer clicks.
6. Invoice¶
The invoice is generated from the order and the customer’s selections.
Photography 2.00 hrs × $150.00 $300.00
Print & Digital — 5×7 (photo1.jpg) $0.00
Print & Digital — 8×10 (photo2.jpg) $0.00
Digital images 3 × $0.00 $0.00
──────────────────
Subtotal $300.00
Deposit -$100.00
Tax (13.00%) $39.00
──────────────────
Amount Due $239.00
Tax is calculated on the full subtotal (not reduced by deposit)
The deposit is a credit against the total
Invoice numbers are auto-generated:
INV-00001
7. Payment & Download¶
Once the photographer marks the order as Paid:
paid_attimestamp is recordedCustomer sees a download link on their selections page
Download link is valid for 30 days from payment
Each download increments a counter