lights
smoke
smoke
smoke
lu-photos.com

Lu Photos

End-to-end platform for school photo sales, built to cover a very specific workflow: photographers manage multiple schools, grades, and packages; parents get private, personalized access to purchase and download only their child's photos. Custom-developed to fully address this niche — from bulk upload and order management to payments and digital asset delivery.

stackfrontend next.jsbackedn custom flowshosting vercelpayments stripe

A fully custom platform designed around a very specific business model — school photography sold directly to families. No existing solution covered this workflow end-to-end, so the entire system was built from scratch: the photographer's admin tools, the parent-facing experience, the access control logic, and the digital delivery pipeline. The architecture is built with Node.js, MongoDB, and GraphQL, with the custom flows engine orchestrating the complex user journeys on both sides.

Photographer Admin

The admin side is built to handle the full operational complexity of a professional school photographer. Schools are organized with their respective grades and sessions, and photos can be bulk-uploaded and associated to the correct student records. Photographers can configure packages — grouping photos by grade, individual shots, or custom combinations — set pricing per pack, monitor orders, and communicate with parents directly through the platform. The entire sales and fulfillment workflow is managed from a single dashboard.

Parent Experience

Each parent receives private, scoped access that surfaces only their child's photos — enforced at the data level, not just the UI. The platform supports multiple access configurations for families with specific needs (split households, shared accounts, etc.). From their personalized gallery, parents can browse available packages, make selections, complete payment via Stripe, and download their purchased photos as digital assets directly from the platform.

Backend & Access Control

The core business logic runs on Node.js and MongoDB, with GraphQL used to deliver precise data to each user based on their role and permissions. Authentication and session handling are tightly scoped: a parent's session only ever resolves their own family's data. The flows engine manages the multi-step user journeys — from login to selection, checkout, and download — enforcing business rules at each stage.

lu-photos.com
Visit