Full-Stack Setup

Step-by-step guide to run the complete GO-MVP stack locally

Full-Stack Setup

This guide walks you through getting both the backend and frontend running together.

1. Clone Both Repositories

# Backend
git clone <your-backend-repo-url> go-mvp-backend
cd go-mvp-backend

# Frontend (in a separate directory)
git clone <your-frontend-repo-url> go-mvp-frontend

2. Set Up the Backend

Configure Environment

cd go-mvp-backend
cp .env .env.local

Edit .env.local and set:

APP_SECRET=<generate-a-random-string>
JWT_PASSPHRASE=<generate-a-random-passphrase>
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
FIREBASE_PROJECT_ID=your-firebase-project-id

Start Backend Services

docker compose up -d

This starts 4 services:

ServiceURL
PHP apphttp://localhost
PostgreSQLlocalhost:5432
Redislocalhost:6379
Mailpithttp://localhost:8025

Install Dependencies and Initialize

# Enter the PHP container
docker compose exec php bash

# Install PHP dependencies
composer install

# Generate JWT signing keys
bin/console lexik:jwt:generate-keypair

# Run database migrations
bin/console doctrine:migrations:migrate --no-interaction

# Sync Stripe plans
bin/console app:stripe:sync-plans

Verify the Backend

curl http://localhost/api/v1/plans

You should get a JSON response with your Stripe plans.

3. Set Up the Frontend

Configure Environment

cd go-mvp-frontend

Create a .env file (or configure via docker-compose.yml):

NUXT_PUBLIC_API_BASE_URL=http://localhost
NUXT_PUBLIC_FIREBASE_API_KEY=your-firebase-api-key
NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NUXT_PUBLIC_FIREBASE_PROJECT_ID=your-firebase-project-id

Start the Frontend

docker compose up -d

The frontend will be available at http://localhost:3000.

Verify the Frontend

Open http://localhost:3000 in your browser. You should see the GO-MVP landing page with the pricing section showing your Stripe plans.

4. Test the Full Flow

  1. Register — Click "Sign Up" and create an account
  2. Check email — Open Mailpit at http://localhost:8025 to see the welcome email
  3. Login — Sign in with your credentials
  4. Purchase — Select a plan and complete Stripe test checkout (use card 4242 4242 4242 4242)
  5. Profile — Check your profile page to see the active subscription

Common Issues

Frontend can't reach the backend

Make sure NUXT_PUBLIC_API_BASE_URL points to the backend URL. In Docker, this is typically http://localhost (port 80) or http://host.docker.internal depending on your setup.

CORS errors

Update the backend's CORS_ALLOW_ORIGIN in .env.local to include your frontend URL:

CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$

Stripe webhooks in local development

Use the Stripe CLI to forward webhooks:

stripe listen --forward-to localhost/api/v1/webhooks/stripe

Copy the webhook signing secret to your backend .env.local.