Your Roots Photography is powered by a custom Photography Business Management System (PBMS).
Table of Contents
The Photography Business Management System (PBMS) is a full-stack web platform built for our client, Bailey White of Your Roots Photography. The system streamlines the entire client experience by allowing users to create accounts, submit inquiries to schedule photography sessions, make secure payments, and access their final galleries. On the admin side, the platform provides an intuitive dashboard for viewing relevant business analytics and managing clients, bookings, invoices, contracts, galleries, and notifications all in one place.
This application was created because Bailey had been managing all of the tasks manually as a solo business owner. Booking sessions, sending invoices, delivering galleries, and tracking payments were all handled through separate tools or by hand. Our team recognized the need for a centralized, automated platform that would consolidate these workflows into a single system, reducing administrative overhead and provide a more professional experience for her and her clients.
This project was developed as part of the Senior Capstone sequence (CSC 190/191) at California State University, Sacramento.
Your Roots Photography is a modern photography brand based in Northern California that is dedicated to capturing real, emotional, and artistic imagery. With a focus on lifestyle, wedding, and maternity photography, the business combines a documentary approach with creative editing to produce stunning visuals that clients can treasure for years to come. The brand's mission is to create an effortless client experience, from booking to final gallery delivery. The business emphasizes professionalism, creativity, and strong client relationships.
Our team recognized the need for a centralized, automated platform that would streamline the following processes:
- Client dashboard - overview of all their photography-related information
- Booking Requests
- Admin dashboard:
- Automated invoice generation
- Uploadable online gallery delivery
- Contract and Questionnaire management
- Notifications and reminders
- Secure session tracking
- Business analytics
The home page introduces Your Roots Photography and highlights key services such as weddings, engagements, family portraits, and lifestyle shoots.
Users can create an account and log in to securely access their personal dashboard and session information.
Clients can submit a booking request through the inquiry form by providing their name, contact information, desired session type, preferred date and location, and any special requests. Available dates are dynamically generated based on the photographer's current availability. To submit an inquiry for the first time, an account must be created by the user first.
The Client Dashboard offers users a clean, organized, and personalized overview of all their photography-related information including upcoming sessions, invoices, galleries, and notifications.
The Admin Dashboard gives the photographer full control over all business operations. From here, the admin can view business analytics, view and manage pending client bookings, upload photo galleries, view and download invoices or manage payments, and manage pre-session questionnaire and contract templates, all from a single centralized interface.
Below is the Entity Relationship Diagram (ERD) that defines the data structure for the Photography Business Management System.
This diagram outlines the relationships between key components such as clients, sessions, invoices, payments, galleries, and questionnaires/contract forms.
Follow these instructions to get a local copy of the project up and running on your machine. Addtionally, more information can be found in the entirety of the Maintenance Manual, and including Sections 3.5, 3.6 and Section 6: Database.
- Node.js v24 or higher - Download here
- npm (comes with Node.js)
- A Supabase project - Create one here
- A Stripe account (for payment processing) - Sign up here
- A Resend account (for transactional emails) - Sign up here
-
Clone the repository:
git clone https://github.com/wesbruh/PBMS.git cd PBMS -
Install frontend dependencies:
npm ci
-
Install backend dependencies:
cd backend npm ci
The application requires environment variables for both the frontend and backend. Create .env files in the appropriate directories using the examples below.
Frontend (root .env):
VITE_API_URL=http://localhost:<backend_port>
VITE_SUPABASE_URL=<your_supabase_project_url>
VITE_SUPABASE_ANON_KEY=<your_supabase_anon_key>
Backend (backend/.env):
PORT=<your_backend_port>
CLIENT_BASE_URL=http://localhost:5173
SUPABASE_URL=<your_supabase_project_url>
SUPABASE_SERVICE_ROLE_KEY=<your_supabase_service_role_key>
STRIPE_API_KEY=<your_stripe_secret_key>
RESEND_API_KEY=<your_resend_api_key>
⚠️ Never commit.envfiles to GitHub. They contain secrets that should remain local.
-
From the backend folder in the project root folder, start the server by running:
npm start
-
In a separate terminal, (from the project root) start the frontend dev server:
npm run dev
-
Open your browser and navigate to
http://localhost:5173.
To test any new changes made to the application and help prevent regressions, run the local test suite before pushing code changes to the repository. This helps ensure that new changes do not affect existing functionality.
Note: ensure these commands are all also being run from the project root
To run all tests with coverage enabled, use the following command:
npm test -- --coverageTo run a specific test file with coverage enabled, use the following command:
npm test <test_file_name> -- --coverageFor example, to run the existing SessionTypesMainPage.test.js test file located in tests/unit/frontend/AdminPages, use the following command:
npm test SessionTypesMainPage.test.js -- --coverageAdditionally, below are the scripts available to run specific tests:
| Command | Description |
|---|---|
npm run test |
Runs all tests |
npm run test:unit |
Runs all unit tests in tests/unit |
npm run test:frontend |
Runs all unit tests in tests/frontend |
npm run test:backend |
Runs backend unit tests in tests/backend, including integration tests and e2e tests |
npm run edge:test |
Runs Deno test for edge function transactional emails |
The PBMS application is deployed using a CI/CD pipeline that connects GitHub, GitHub Actions, and Render.
- A developer pushes code to the
mainbranch or merges a pull request. - GitHub Actions runs the workflow defined in
.github/workflows/deploy.yml, which executes lint, frontend tests, backend tests, and a build step. - If all checks pass and the trigger was a push to
main, the deploy job authenticates with the Render API using secrets stored in the GitHubRenderenvironment and triggers deployment for both services. - Render pulls the latest code, builds, and publishes the backend Web Service and frontend Static Site.
Auto-deploy on Render is set to Off. All deployments are initiated exclusively through the GitHub Actions workflow to ensure no untested code reaches production.
| Service | Type | URL |
|---|---|---|
| Frontend | Static Site (CDN) | yourrootsphotography.space |
| Backend | Web Service | Render Web Service (internal API) |
| Database | PostgreSQL + Auth | Supabase |
| Payments | Payment Processing | Stripe |
| Transactional Emails | Resend + Supabase Edge Functions |
If you need to re-deploy without pushing new code (for example, after updating an environment variable on Render):
- Go to the GitHub repository and click the Actions tab.
- Select the CI/CD GitHub Actions Deploy & Tests Workflow for PBMS workflow.
- Click Run Workflow, select the
mainbranch, then click Run Workflow again.
For full deployment documentation including Render Service Configuration, environment variable details, CORS setup, and Supabase redirect URLs, see the Maintenance Manual - Section 4: Deployment.
Westley Valentin - wvalentin@csus.edu Erds Mabilog - emabilog@csus.edu
Luis De Santiago - lpdesantiago@csus.edu Munir Omar - muniromar@csus.edu
Ritchie Martinez - ritchiemartinez@csus.edu Frank Kutsar - fkutsar@csus.edu
Abhijit Singh Ubhi - abhijitsinghubhi@csus.edu Gaurav Shergill - gauravshergill@csus.edu













