Appearance
Installation overview
ExchangePro ships as two applications and has no web-based installer. Install the backend first, then the frontend, connect them with environment variables, then configure cron (and optionally a queue worker) on production.
For a single printable checklist, see Full installation guide or the package file INSTALL.md at the ZIP root.
Order of operations
| Step | Action | Doc |
|---|---|---|
| 1 | Install PHP dependencies & configure .env | Backend |
| 2 | Create database & run migrations | Database |
| 3 | Install Node dependencies & configure .env | Frontend |
| 4 | Align CORS + Sanctum with frontend URL | CORS & Sanctum |
| 5 | Create first admin (sign up) - you must register before the public | First admin |
| 6 | Configure mail, OAuth, rate API (optional) | Configuration |
| 7 | Deploy SSL, Nginx, Node process | Deployment |
| 8 | Cron (schedule:run) + queue choice | Cron & queue |
Development quick start
Terminal 1 - Backend
bash
cd backend
composer install
cp .env.example .env
php artisan key:generate
# Edit .env: DB_*, APP_URL, FRONTEND_URL
php artisan migrate
php artisan serve
# Default: http://127.0.0.1:8000Terminal 2 - Frontend
bash
cd frontend
npm install
# Create .env with API_URL and FRONTEND_URL
npm run dev
# Default script: http://localhost:4000Terminal 3 - Queue (optional)
Only if QUEUE_CONNECTION=database and you test queued mail:
bash
cd backend
php artisan queue:listenCron is usually skipped locally; run php artisan schedule:run manually to test rate sync.
Verify
- Open
http://localhost:4000- public home loads. - Open
http://localhost:4000/signup- register your user first (becomes admin while no admin exists). - Sign in → redirected to
/adminfor administrators.
Production
On a public URL, the first signup becomes admin. Register yourself before announcing the site. See First admin. ::: 4. Backend: GET {APP_URL}/api/ returns JSON ExchangePro API with status: ok. 5. Laravel health: GET {APP_URL}/up.
Production quick start
See Deployment for Nginx samples, SSL, and process managers.
Common mistakes
| Mistake | Symptom |
|---|---|
API_URL missing or wrong | Frontend cannot load settings; network errors to API |
| CORS origin not listed | Browser blocks API; login fails |
APP_URL ≠ actual backend URL | OAuth redirect mismatch; broken password reset links |
Forgot php artisan migrate | 500 errors, missing tables |
| HTTP in production | Sanctum cookies may not persist (use HTTPS) |
| Rate sync on, no cron | Automatic rates never update |
QUEUE_CONNECTION=database without worker | Jobs pile up in jobs table |
Folder names
Your ZIP may use backend/ and frontend/ or custom names. Paths in this documentation use:
backend/- Laravel project root (containsartisan)frontend/- Nuxt project root (containsnuxt.config.ts)