A crowd-sourced web application that allows users to report and view the freshness status of lettuce at Subway restaurant locations.
The easiest way to run the Subway Lettuce Tracker is using our All-in-One (AIO) Docker container:
# Using Docker Compose (Recommended)
docker-compose -f docker-compose.aio.yml up -d
# Or using Docker directly
docker run -d --name subway-lettuce-tracker \
-p 8080:8080 \
-e VITE_GOOGLE_MAPS_API_KEY=your_api_key_here \
-e DATABASE_URL=postgresql://user:pass@host:5432/db \
-e REDIS_URL=redis://host:6379 \
ghcr.io/scsiexpress/subway-lettuce-tracker-aio:latestThe AIO container includes:
- Frontend: React application with Google Maps integration
- Backend: Node.js API server
- Nginx: Reverse proxy and static file serving
- Health Checks: Built-in monitoring
VITE_GOOGLE_MAPS_API_KEY- Your Google Maps JavaScript API keyDATABASE_URL- PostgreSQL connection stringREDIS_URL- Redis connection string
NODE_ENV- Application environment (default: production)PORT- Backend port (default: 5000)VITE_API_URL- API endpoint URL (default: http://localhost:8080/api)ENABLE_FRONTEND- Enable/disable frontend (default: true)
For Unraid users, we provide ready-to-use templates:
- All-in-One Template: Single container with everything included
- Individual Components: Separate containers for advanced setups
Templates are available at:
https://raw.githubusercontent.com/SCSIExpress/subway-lettuce-tracker/main/unraid-templates/
See Unraid Deployment Guide for detailed instructions.
For local development:
# Clone the repository
git clone https://github.com/SCSIExpress/subway-lettuce-tracker.git
cd subway-lettuce-tracker
# Copy environment file
cp .env.example .env
# Edit .env with your configuration
nano .env
# Start development environment
docker-compose -f docker-compose.aio.yml up -d- Unraid Deployment Guide - Complete Unraid setup
- Docker Configuration - Advanced Docker setup
- Troubleshooting - Common issues and solutions
- API keys are injected at runtime (not baked into images)
- Non-root containers
- Network isolation
- Input validation and rate limiting
- 🗺️ Interactive map with nearby Subway locations
- ⭐ Crowd-sourced lettuce freshness ratings (1-5 scale)
- 📍 Location-based services with distance sorting
- 📱 Responsive design for mobile compatibility
- 🕒 Historical analysis for optimal timing
- 🧭 Google Maps integration for directions
./scripts/build-aio.sh./scripts/test-aio.sh./scripts/push-to-ghcr.sh- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
MIT License - see LICENSE file for details