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.
# 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
- API http://localhost:8080
- MinIO Console: http://localhost:9001 (admin:admin)
- PostgreSQL: localhost:5432
- Redis CLI: docker exec -it photo-listing-redis redis-cli
- Complete data isolation with Row-Level Security
- Tenant-aware resource allocation and limits
- Separate storage namespaces per tenant
- Curated album management with lifecycle states
- Batch uploads with progress tracking
- Client proofing galleries with watermarking
- EXIF metadata preservation and search
- Three-tier subscription model (Free/Pro/Studio)
- Usage-based billing with automated enforcement
- Client engagement analytics and reporting
- White-label options for studios
- JWT-based authentication with tenant context
- Signed URLs for media access
- Row-Level Security for data isolation
- Comprehensive audit logging
- Structured logging with correlation IDs
- Prometheus metrics and Grafana dashboards
- Distributed tracing with OpenTelemetry
- Real-time performance monitoring
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) │
└─────────────────────────────────────────┘
- Backend: Go (Golang), Gin, SQLC, Validator
- Database: PostgreSQL 18.1 (Supabase) with RLS
- Image storage: R2 (S3-compatible)
- Events: NATS JetStream for reliable messaging
- Infrastructure: Fly.io, Docker, Cloudflare
Comprehensive documentation is available in the /docs directory:
- Overview - Product vision and features
- Setup Guide - Development environment setup
- Deployment - Production deployment guide
- Security - Security architecture and practices
- API Reference - REST API documentation
- Architecture
- Architecture Context Context - Architectural decisions and patterns
- Event System - Event-driven architecture details
- Data Model - Database schema and design
Domain Documentation - Business domain models and rules
# 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"
See deployment for complete deployment guide including:
- Multi-region setup
- Database backup strategies
- Monitoring and alerting configuration
- CI/CD pipeline setup
# 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
We welcome contributions! Please see our Contributing Guide for details on:
- Code style and conventions
- Testing requirements
- Pull request process
- Development workflow
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.
- Website: https://photolisting.dev
- Email: support@photolisting.dev
- GitHub Issues: https://github.com/EnockYator/saas-photo-listing-platform/issues
- Documentation: https://photolisting.dev/docs
Built with ❤️ for photography professionals worldwide