chore: align migrations, docs, and frontends with crewli.app setup
- Replace dated migrations with ordered 2026_04_07_* chain; fold users update into base migration - Update OrganisationScope, AppServiceProvider, seeders, api routes, and .env.example - Refresh Cursor rules, CLAUDE.md, Makefile, README, and docs (API, SCHEMA, SETUP) - Adjust admin/app/portal HTML, packages, api-client, events types, and theme config - Update docker-compose and VS Code settings; remove stray Office lock files from resources Made-with: Cursor
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# EventCrew - Architecture
|
||||
# Crewli - Architecture
|
||||
|
||||
> Multi-tenant SaaS platform for event- and festival management.
|
||||
> Source of truth: `/resources/design/EventCrew_Design_Document_v1.3.docx`
|
||||
> Source of truth: `/resources/design/Crewli_Design_Document_v1.3.docx`
|
||||
|
||||
## System Overview
|
||||
|
||||
@@ -432,6 +432,8 @@ Three frontend origins in `config/cors.php` (via env):
|
||||
| App | `http://localhost:5174` | `FRONTEND_APP_URL` |
|
||||
| Portal | `http://localhost:5175` | `FRONTEND_PORTAL_URL` |
|
||||
|
||||
Production (registered domain **crewli.app**): API `https://api.crewli.app` (`APP_URL`); SPAs `https://admin.crewli.app`, `https://app.crewli.app`, `https://portal.crewli.app` via the same env keys. Frontends use `VITE_API_URL=https://api.crewli.app/api/v1`. `SANCTUM_STATEFUL_DOMAINS` = comma-separated SPA hostnames only (e.g. `admin.crewli.app,app.crewli.app,portal.crewli.app`). **`crewli.nl`** is reserved for a future marketing site only — not used for this application stack.
|
||||
|
||||
---
|
||||
|
||||
## Real-time Events (WebSocket)
|
||||
@@ -446,4 +448,4 @@ Via Laravel Echo + Pusher/Soketi:
|
||||
|
||||
---
|
||||
|
||||
*Source: EventCrew Design Document v1.3, March 2026*
|
||||
*Source: Crewli Design Document v1.3, March 2026*
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
# EventCrew - Cursor AI Instructions
|
||||
# Crewli - Cursor AI Instructions
|
||||
|
||||
> Multi-tenant SaaS platform for event- and festival management.
|
||||
> Design Document: `/resources/design/EventCrew_Design_Document_v1.3.docx`
|
||||
> Dev Guide: `/resources/design/EventCrew_Dev_Guide_v1.0.docx`
|
||||
> Start Guide: `/resources/design/EventCrew_Start_Guide_v1.0.docx`
|
||||
> Design Document: `/resources/design/Crewli_Design_Document_v1.3.docx`
|
||||
> Dev Guide: `/resources/design/Crewli_Dev_Guide_v1.0.docx`
|
||||
> Start Guide: `/resources/design/Crewli_Start_Guide_v1.0.docx`
|
||||
|
||||
## Project Overview
|
||||
|
||||
**Name**: EventCrew
|
||||
**Name**: Crewli
|
||||
**Type**: Multi-tenant SaaS platform (API-first architecture)
|
||||
**Status**: Development
|
||||
|
||||
### Description
|
||||
|
||||
EventCrew is a multi-tenant SaaS platform for professional event and festival management. It supports the full operational cycle: artist booking and advancing, staff planning and volunteer management, accreditation, briefings, and real-time show-day operations (Mission Control). Built for a professional volunteer organisation, with SaaS expansion potential.
|
||||
Crewli is a multi-tenant SaaS platform for professional event and festival management. It supports the full operational cycle: artist booking and advancing, staff planning and volunteer management, accreditation, briefings, and real-time show-day operations (Mission Control). Built for a professional volunteer organisation, with SaaS expansion potential.
|
||||
|
||||
## Quick Reference
|
||||
|
||||
@@ -130,7 +130,7 @@ Build auth flow in apps/app/:
|
||||
1. stores/useAuthStore.ts - token storage, isAuthenticated, me() loading
|
||||
2. pages/login.vue - use Vuexy login layout
|
||||
3. Router guard - redirect to login if not authenticated
|
||||
4. Replace Vuexy demo navigation with EventCrew structure
|
||||
4. Replace Vuexy demo navigation with Crewli structure
|
||||
5. CASL permissions: connect to Spatie roles from auth/me response
|
||||
```
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
description: Core workspace rules for EventCrew multi-tenant SaaS platform
|
||||
description: Core workspace rules for Crewli multi-tenant SaaS platform
|
||||
globs: ["**/*"]
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Workspace Rules
|
||||
|
||||
You are an expert full-stack developer working on EventCrew, a multi-tenant SaaS platform for event and festival management. The backend is a Laravel 12 REST API (JSON only, no Blade), and three Vue 3 SPA frontends communicate via CORS + Sanctum tokens.
|
||||
You are an expert full-stack developer working on Crewli, a multi-tenant SaaS platform for event and festival management. The backend is a Laravel 12 REST API (JSON only, no Blade), and three Vue 3 SPA frontends communicate via CORS + Sanctum tokens.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
@@ -36,7 +36,7 @@ You are an expert full-stack developer working on EventCrew, a multi-tenant SaaS
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
event-crew/
|
||||
crewli/
|
||||
├── api/ # Laravel 12 REST API (JSON only)
|
||||
│ ├── app/
|
||||
│ │ ├── Http/
|
||||
@@ -130,8 +130,19 @@ event-crew/
|
||||
| Redis | `localhost:6379` | - |
|
||||
| Mailpit | `http://localhost:8025` | - |
|
||||
|
||||
### Production URLs (crewli.app)
|
||||
|
||||
**Note:** `crewli.app` = this SaaS product. `crewli.nl` is for a future public marketing site only — never use `.nl` for API, SPAs, or app-originated mail in this project.
|
||||
|
||||
| Service | URL | Env variable |
|
||||
|---------|-----|--------------|
|
||||
| API | `https://api.crewli.app` | `APP_URL` |
|
||||
| Admin SPA | `https://admin.crewli.app` | `FRONTEND_ADMIN_URL` |
|
||||
| Organizer SPA | `https://app.crewli.app` | `FRONTEND_APP_URL` |
|
||||
| Portal SPA | `https://portal.crewli.app` | `FRONTEND_PORTAL_URL` |
|
||||
|
||||
### CORS
|
||||
Three frontend origins configured in `config/cors.php` via env variables. Each Vite dev server gets its own port for CORS isolation.
|
||||
Three frontend origins configured in `config/cors.php` via env variables. Each Vite dev server gets its own port for CORS isolation. In production, set the same env vars to the `https://…` origins above (see `api/.env.example`).
|
||||
|
||||
## Git Conventions
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: Laravel API development guidelines for EventCrew multi-tenant platform
|
||||
description: Laravel API development guidelines for Crewli multi-tenant platform
|
||||
globs: ["api/**/*.php"]
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: Vue 3, TypeScript, and Vuexy patterns for EventCrew platform
|
||||
description: Vue 3, TypeScript, and Vuexy patterns for Crewli platform
|
||||
globs: ["apps/**/*.{vue,ts,tsx}"]
|
||||
alwaysApply: true
|
||||
---
|
||||
@@ -23,7 +23,7 @@ alwaysApply: true
|
||||
- Minimal modifications needed
|
||||
|
||||
### `apps/app/` (Organizer - Main App)
|
||||
- Sidebar nav customized for EventCrew structure
|
||||
- Sidebar nav customized for Crewli structure
|
||||
- Remove Vuexy demo/customizer components
|
||||
- Full Vuetify component usage
|
||||
- 90% of development work happens here
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: Multi-tenancy and portal architecture rules for EventCrew
|
||||
description: Multi-tenancy and portal architecture rules for Crewli
|
||||
globs: ["api/**/*.php", "apps/portal/**/*.{vue,ts}"]
|
||||
alwaysApply: true
|
||||
---
|
||||
@@ -101,7 +101,7 @@ Route::middleware(['auth:sanctum', 'event.role:event_manager'])->group(...);
|
||||
|
||||
### Token-Based Authentication Flow
|
||||
```
|
||||
1. Artist/supplier receives email with link: https://portal.eventcrew.app/advance?token=01HQ3K...
|
||||
1. Artist/supplier receives email with link: https://portal.crewli.app/advance?token=01HQ3K...
|
||||
2. Portal detects token in URL query parameter
|
||||
3. POST /api/v1/portal/token-auth { token: '01HQ3K...' }
|
||||
4. Backend validates token against artists.portal_token or production_requests.token
|
||||
@@ -111,7 +111,7 @@ Route::middleware(['auth:sanctum', 'event.role:event_manager'])->group(...);
|
||||
|
||||
### Login-Based Authentication Flow
|
||||
```
|
||||
1. Volunteer navigates to https://portal.eventcrew.app/login
|
||||
1. Volunteer navigates to https://portal.crewli.app/login
|
||||
2. Enters email + password
|
||||
3. POST /api/v1/auth/login (same endpoint as apps/app/)
|
||||
4. Returns user + organisations + event roles
|
||||
@@ -196,6 +196,8 @@ class PortalTokenMiddleware
|
||||
'supports_credentials' => true,
|
||||
```
|
||||
|
||||
Production example (subdomains on **crewli.app**): `FRONTEND_ADMIN_URL=https://admin.crewli.app`, `FRONTEND_APP_URL=https://app.crewli.app`, `FRONTEND_PORTAL_URL=https://portal.crewli.app`, and `SANCTUM_STATEFUL_DOMAINS=admin.crewli.app,app.crewli.app,portal.crewli.app`.
|
||||
|
||||
## Shift Claiming & Approval Flow
|
||||
|
||||
### Three Assignment Strategies per Shift
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: Database schema conventions, ULID primary keys, JSON column rules, soft delete strategy, and index requirements for EventCrew
|
||||
description: Database schema conventions, ULID primary keys, JSON column rules, soft delete strategy, and index requirements for Crewli
|
||||
globs: ["api/database/**/*.php", "api/app/Models/**/*.php"]
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: Testing standards for EventCrew multi-tenant platform
|
||||
description: Testing standards for Crewli multi-tenant platform
|
||||
globs: ["**/tests/**", "**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx", "**/Test.php"]
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user