Skip to content

EnockYator/saas-photo-listing-platform

Photo Listing SaaS

License: MIT CI

Go Version Documentation Documentation


Introduction

Photo Listing SaaS is a multi-tenant, professional portfolio platform built exclusively for photographers, studios, and creative businesses. Unlike generic photo-sharing platforms, we provide business-enabling tools with strict tenant isolation, subscription-based monetization, and enterprise-grade reliability all built with Golang for maximum performance and maintainability.

Core Philosophy: We don't compete with social networks. We provide the digital business backbone for photography professionals to showcase work, manage client deliveries, and grow their business through a polished, professional platform.


Table of Contents


Quick Start

# Clone the repository
git clone https://github.com/EnockYator/photo-listing-saas.git
cd photo-listing-saas

# Start development environment
docker-compose up -d

# Run migrations
go run cmd/migrate/main.go up

# Start the server
go run cmd/server/main.go

Access the services


Features

Multi-Tenancy

  • Complete data isolation with Row-Level Security
  • Tenant-aware resource allocation and limits
  • Separate storage namespaces per tenant

Professional Photography Tools

  • Curated album management with lifecycle states
  • Batch uploads with progress tracking
  • Client proofing galleries with watermarking
  • EXIF metadata preservation and search

Business Features

  • Three-tier subscription model (Free/Pro/Studio)
  • Usage-based billing with automated enforcement
  • Client engagement analytics and reporting
  • White-label options for studios

Enterprise Security

  • JWT-based authentication with tenant context
  • Signed URLs for media access
  • Row-Level Security for data isolation
  • Comprehensive audit logging

Observability

  • Structured logging with correlation IDs
  • Prometheus metrics and Grafana dashboards
  • Distributed tracing with OpenTelemetry
  • Real-time performance monitoring

Architecture

Photo Listing SaaS follows Clean Architecture and Domain-Driven Design principles:

Read artchitecture documentation for more details on architecture.


┌─────────────────────────────────────────┐
│      Presentation Layer (API/REST)      │
├─────────────────────────────────────────┤
│      Application Layer (Use Cases)      │
├─────────────────────────────────────────┤
│        Domain Layer (Business)          │
├─────────────────────────────────────────┤
│ Infrastructure Layer (DB/Storage/Queue) │
└─────────────────────────────────────────┘

Key Technologies:


Documentation

Comprehensive Documentation

Comprehensive documentation is available in the /docs directory:

  1. Overview - Product vision and features
  2. Setup Guide - Development environment setup
  3. Deployment - Production deployment guide
  4. Security - Security architecture and practices
  5. API Reference - REST API documentation
  6. Architecture

Architecture Documentation

  1. Architecture Context Context - Architectural decisions and patterns
  2. Event System - Event-driven architecture details
  3. Data Model - Database schema and design

Domain Layer Documentation

Domain Documentation - Business domain models and rules


Deployment

Free Tier Deployment

# Deploy to Fly.io
fly deploy --app photo-listing-api

# Set environment secrets
fly secrets set DATABASE_URL="postgresql://..." \
                 R2_ACCESS_KEY="..." \
                 JWT_SECRET="..."

# Run migrations
fly ssh console -a photo-listing-api --command "./migrate up"

Production Deployment

See deployment for complete deployment guide including:

  • Multi-region setup
  • Database backup strategies
  • Monitoring and alerting configuration
  • CI/CD pipeline setup

Testing

# Run unit tests
go test ./... -v

# Run integration tests
docker-compose -f docker-compose.test.yml up --abort-on-container-exit

# Run end-to-end tests
go test ./tests/e2e -v

Contributing

We welcome contributions! Please see our Contributing Guide for details on:

  • Code style and conventions
  • Testing requirements
  • Pull request process
  • Development workflow

License

This project is licensed under the MIT License - see the LICENSE file for details.

The SaaS service itself is proprietary, while the core infrastructure is open-source.


Contact Support

Built with ❤️ for photography professionals worldwide