Laravel API + admin CMS that powers the Wavee mobile app. Serves the home feed, catalog, likes, watchlist, search, and the marketing pages at the public site.
The mobile client lives in a separate repository.
- PHP 8.3+ / Laravel 13
- Sanctum (mobile bearer-token auth, exchanged from a Firebase ID token)
- Firebase Admin SDK (token verification)
- TMDB (catalog metadata bootstrap)
- SQLite by default; MySQL/MariaDB supported via
.env
- PHP 8.3+ with the standard Laravel extensions (
mbstring,xml,curl,pdo,pdo_sqliteorpdo_mysql) - Composer
- A Firebase project (for mobile sign-in)
- A TMDB API key (free)
# 0. Clone
git clone https://github.com/SameerArora497/Wavee-Backend.git
cd Wavee-Backend
# 1. Install PHP dependencies
composer install
# 2. Create your local env file
cp .env.example .env
# 3. Generate the Laravel app key
php artisan key:generate
# 4. Create the SQLite database file (skip if using MySQL)
touch database/database.sqlite
# 5. Run migrations
php artisan migrate
# 6. Seed an admin user + landing page
php artisan db:seedThe API verifies mobile sign-ins with the Firebase Admin SDK. Download the service-account JSON from Firebase Console → Project Settings → Service accounts → Generate new private key, then save it at:
storage/app/firebase-admin.json
This path is gitignored. The location is configurable via FIREBASE_CREDENTIALS in .env.
Set TMDB_API_KEY in .env for the bootstrap fetch. Once the app is running, operators can rotate the runtime key from the CMS admin UI (/admin); the runtime key lives in the api_keys table and takes precedence over the env value.
php artisan serve --host=0.0.0.0 --port=3002The mobile app expects the API at the host/port configured in its own buildConfig.
php artisan db:seed creates an admin user:
- Email:
admin@wavee.local - Password:
wavee-admin
Change this immediately after first login.
All routes are versioned under /api/v1. See routes/api.php for the full list. Highlights:
POST /api/v1/auth/firebase— exchange a Firebase ID token for a Sanctum bearerGET /api/v1/home/feed— server-driven home feedGET /api/v1/catalog,GET /api/v1/catalog/{title}— catalog listing & detailGET /api/v1/genresPOST /api/v1/me/likes/{title},DELETE /api/v1/me/likes/{title}GET /api/v1/me/watchlist,POST /api/v1/me/watchlist/{title}
The admin CMS is mounted under /admin and uses Laravel Breeze session auth.
php artisan testMIT