MonsterIndex is an open-source community platform for tracking Monster Energy deals.
The core model is public:
- Everyone can browse best offers and price history without login.
- Logged-in contributors can submit monitor proposals for existing monsters.
- Admin moderators approve/reject proposals and monster suggestions.
- Only approved monitors affect public rankings and scheduled scraping.
- Laravel 12 + Inertia React + shadcn/ui
- Google OAuth only
- Spatie Roles/Permissions v7
- SQLite as the primary data store
- Docker-first local runtime in
.docker/local - Production deploy assets in
.docker/production
codebase/Laravel app.docker/local/local Docker stack.docker/production/production image build assets.github/workflows/production-deploy.ymlproduction CI/CD pipeline
- Prepare Docker env:
cp .docker/local/.env.example .docker/local/.env- Start services:
docker compose --env-file .docker/local/.env -f .docker/local/compose.yaml up -d --build- Install and bootstrap:
docker compose --env-file .docker/local/.env -f .docker/local/compose.yaml exec php composer install
docker compose --env-file .docker/local/.env -f .docker/local/compose.yaml exec php cp .env.example .env
docker compose --env-file .docker/local/.env -f .docker/local/compose.yaml exec php php artisan key:generate
docker compose --env-file .docker/local/.env -f .docker/local/compose.yaml exec php php artisan migrate- Open:
- App:
http://localhost:8888(or yourAPP_EXPOSED_PORT) - Vite HMR server:
http://localhost:5151(assets only)
- Confirm HMR watcher:
docker compose --env-file .docker/local/.env -f .docker/local/compose.yaml logs -f nodesource .docker/local/aliases.shAvailable:
dupstart/build stackddownstop stackdlogstail logsdartisanrun artisan inside php containerdcomposerrun composer inside php containerdbunrun bun inside node containerdphprun arbitrary commands in php containerdvapidgenerateWEBPUSH_VAPID_PUBLIC_KEYandWEBPUSH_VAPID_PRIVATE_KEYdevitetail Vite container logs
GitHub Actions workflow:
.github/workflows/production-deploy.yml- Trigger: pull requests build the image for validation, and pushes to
mainbuild, push, and deploy. - Builds and pushes a single GHCR image for MonsterIndex.
- SSHes into the VPS and triggers the deploy from the ops repo runtime stack.
Required GitHub repository secrets:
PRODUCTION_HOSTPRODUCTION_USERPRODUCTION_SSH_KEYAPP_KEYGOOGLE_CLIENT_SECRETWEBPUSH_VAPID_PRIVATE_KEYGHCR_USERNAMEGHCR_PAT
Required GitHub repository variables:
OPS_REPO_DIR(example:/opt/OPS__MicroSaasFree)OPS_REPO_REF(optional, defaults tomain)GOOGLE_CLIENT_IDWEBPUSH_VAPID_PUBLIC_KEY
Runtime notes:
- No server-side application
.envfile is needed. - The workflow bakes
codebase/.env.productionplus GitHub secrets into the image at build time. - The runtime stack itself lives in the ops repo, where Caddy and the shared Docker networks are already managed.