AI-Enhanced Photography Session Planning Tool
Live Demo •
Features •
Tech Stack •
Getting Started •
Contributing
PortraitPlanner helps photographers and studios plan sessions, organize inspiration, and streamline client communication. Built with Next.js 15, React 19, and a fully-typed component system, it delivers a clean, responsive UI with a frictionless user experience — perfect for modern creators.
- 📅 Session Scheduling: Plan, edit, and manage portrait sessions
- 📸 Moodboard Creation: Collect inspiration and references for shoots
- 🖼️ Gallery & Deliverables: Organize client deliverables in one place
- 🎨 Theming: Dark/light modes with fully customizable UI tokens
- 🔒 Client-Safe: Designed with security and privacy in mind
- 📱 Mobile-First: Responsive design that feels native on any device
- ⚡ PWA-Ready: Workbox-powered offline support for on-site shoots
- 📊 Dashboard: View upcoming shoots, deadlines, and recent uploads at a glance
- Framework: Next.js 15 (App Router), React 19
- Styling: Tailwind CSS v4, shadcn/ui, Radix UI primitives
- UI/UX: Lucide React Icons, Embla Carousel, Vaul drawers
- Forms & Validation: React Hook Form + Zod
- State & Theme: next-themes, Context API
- Data & Uploads: @vercel/blob for image handling
- Offline Support: Workbox (precaching, strategies, expiration)
- Charts & Insights: Recharts
- Tooling: ESLint, Tailwind Merge, Class Variance Authority
- Node.js 18+
- pnpm or npm (pnpm recommended)
git clone https://github.com/your-username/PortraitPlanner.git
cd PortraitPlanner
pnpm install
pnpm devVisit http://localhost:3000 to explore the app locally.
pnpm build
pnpm startDeploy instantly on Vercel with:
vercel --prodPortraitPlanner follows a modular, component-driven architecture:
flowchart TD
A[User] -->|Interacts| B[Next.js App Router]
B --> C[Feature Modules: Sessions, Moodboards, Deliverables]
C --> D[Radix + shadcn/ui Components]
B --> E[API Routes / Edge Functions]
E --> F[Vercel Blob Storage & Database]
B --> G[Workbox Service Worker for Offline Mode]
This structure keeps features isolated, scalable, and easy to maintain.
We welcome PRs, issues, and suggestions!
- Branch Naming: feature/, fix/, docs/*
- Commit Messages: Conventional commits preferred (feat:, fix:, chore:)
- Code Style: Linted & formatted (run pnpm lint before PRs)
MIT — free to use, modify, and contribute. See LICENSE.
PortraitPlanner — Where Creativity Meets Workflow 📸✨

