You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Guillermo Pages a61e64ded0
continuous-integration/drone/push Build is passing Details
feat(admin): align UI with Backend Brooke Phase 2 contracts, flip mocks to real endpoints
Phase 2 Integration Updates:
- Profile UI: Read/write address and contact fields from settings.address/settings.contact JSONB structure
- Court dependencies: Updated modal to show 3 counts (slot_definitions, slot_instances_future, slot_instances_booked)
- Error codes: Fixed duplicate court check to use court_name_duplicate (matches backend)
- Mock flags: Flipped all 9 USE_MOCKS flags to false (courts.ts x7, materialisation.ts x2)

Profile Tab (ClubProfileTab.tsx):
- Read address fields from profile.settings?.address?.line_1 etc.
- Read contact fields from profile.settings?.contact?.phone etc.
- Write to settings structure preserving existing settings
- Added Info icon tooltips: "Stored in settings until native fields ship"
- Removed Integration section (provider/remote_club_id not in API)

Court Dependencies Modal (ClubCourtsTab.tsx):
- Display slot_instances_future count (was upcoming_bookings)
- Display slot_instances_booked count (new field)
- Updated deletion instructions for 3-count structure

Types (courts.ts):
- Created ClubProfileSettings interface for JSONB structure
- Updated ClubProfile to use settings instead of flat fields
- Updated CourtDependencies with court_id + 3 dependency counts
- Updated ClubProfileUpdateRequest to support settings

API Clients:
- courts.ts: Updated mock data to match API contracts (settings structure, 3 counts, court_name_duplicate)
- materialisation.ts: Flipped USE_MOCKS to false for real backend integration

Integration Ready:
- All contract mismatches resolved
- Build succeeds
- Ready for Phase 1 smoke tests against BUILD:290-291

Related: Backend Brooke BUILD:290 (courts CRUD) + BUILD:291 (club profile PATCH)
Contract references: docs/owners/payloads/court-api-contract.md, club-profile-api-contract.md
1 month ago
dictionaries feat(slot-definitions): add create/edit form with validation 1 month ago
docker feat(phase-0): integrate admin clubs API with staging backend 1 month ago
docs feat(phase-0): integrate admin clubs API with staging backend 1 month ago
public feat(phase-0): integrate admin clubs API with staging backend 1 month ago
src feat(admin): align UI with Backend Brooke Phase 2 contracts, flip mocks to real endpoints 1 month ago
.deploy.yml chore: bump deploy number to 8 1 month ago
.dockerignore feat(phase-0): integrate admin clubs API with staging backend 1 month ago
.drone.yml fix(auth): update manager app to use dedicated auth backend 1 month ago
.eslintrc.json feat(phase-0): integrate admin clubs API with staging backend 1 month ago
.gitignore feat(phase-0): integrate admin clubs API with staging backend 1 month ago
API.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
ARCHITECTURE_IMPROVEMENTS.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
CLAUDE.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
NEXTJS15.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
OPTIMIZATION_AUDIT.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
PHASE_0_STATUS.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
PIPELINE_OPTIMIZATION.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
README.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
REFACTORING_EXAMPLE.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
SWAP_UI_IMPROVEMENTS.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
THEME.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
THEME_CUSTOMIZATION_GUIDE.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
WEBSOCKET_SETUP.md feat(phase-0): integrate admin clubs API with staging backend 1 month ago
docker-compose.dev.yml feat(phase-0): integrate admin clubs API with staging backend 1 month ago
docker-compose.yml feat(phase-0): integrate admin clubs API with staging backend 1 month ago
env.example feat(phase-0): integrate admin clubs API with staging backend 1 month ago
i18n-config.ts feat(phase-0): integrate admin clubs API with staging backend 1 month ago
index.html feat(phase-0): integrate admin clubs API with staging backend 1 month ago
next-env.d.ts feat(phase-0): integrate admin clubs API with staging backend 1 month ago
next-inspect.js feat(phase-0): integrate admin clubs API with staging backend 1 month ago
next.config.mjs feat(phase-0): integrate admin clubs API with staging backend 1 month ago
package-lock.json feat(landing+auth): add marketing landing page and admin auth guards 1 month ago
package.json feat(phase-0): integrate admin clubs API with staging backend 1 month ago
postcss.config.cjs feat(phase-0): integrate admin clubs API with staging backend 1 month ago
tailwind.config.cjs feat(phase-0): integrate admin clubs API with staging backend 1 month ago
tsconfig.app.json feat(phase-0): integrate admin clubs API with staging backend 1 month ago
tsconfig.json feat(phase-0): integrate admin clubs API with staging backend 1 month ago
tsconfig.node.json feat(phase-0): integrate admin clubs API with staging backend 1 month ago

README.md

Playchoo Manager - Venue Administration Portal

Domain: https://manager.playchoo.com Project Owner: Frontend Faye (Uma Canvas) Status: Phase 0 - Initial scaffolding complete

Overview

This is the venue administration frontend for Playchoo, enabling venue administrators to manage clubs, courts, schedules, and bookings. It is a separate Next.js application from the consumer-facing app.

Architecture

  • Framework: Next.js 15 with App Router
  • Language: TypeScript
  • Styling: Tailwind CSS 4
  • State Management: React Context API
  • Auth: SwissOID (via playchoo-auth backend)
  • API: Python Flask API (py-playchoo-api)
  • CI/CD: Drone CI
  • Container: Docker

Project Structure

playchoo-manager-nextjs/
├── src/
│   ├── app/[locale]/          # Next.js app router pages
│   │   ├── admin/             # Admin routes
│   │   │   └── clubs/         # Club management
│   │   ├── layout.tsx         # Root layout
│   │   └── page.tsx           # Admin home
│   ├── components/            # React components
│   ├── hooks/                 # Custom React hooks
│   ├── lib/                   # Utilities
│   └── types/                 # TypeScript types
├── docker/                    # Docker configuration
├── .drone.yml                 # CI/CD pipeline
└── docker-compose.yml         # Production deployment

Development

Prerequisites

  • Node.js 22+
  • Docker & Docker Compose
  • Access to py-playchoo-api backend

Environment Setup

Copy .env.local.example to .env and configure:

# Application
APPLICATION_DOMAIN_NAME=manager.playchoo.com
REVERSE_DOMAIN=playchoo-manager-nextjs
APP_PORT=8200

# Development APIs
NEXT_PUBLIC_PYTHON_API_URL=http://localhost:5000
NEXT_PUBLIC_AUTH_BACKEND_URL=http://localhost:3700
NEXT_PUBLIC_WEBSOCKET_URL=ws://localhost:5000
NEXT_PUBLIC_SWISSOID_TARGET_SERVICE_HANDLE=playchoo
NEXT_PUBLIC_APP_VERSION=0.1.0-dev

Run Locally

# Install dependencies and start dev server (port 8100)
npm run dev

# Or manually
npm install
npm run dev

Build

npm run build
npm start  # Runs on port 8200

Docker

# Build
docker build -f docker/Dockerfile -t playchoo-manager .

# Run with docker-compose
docker-compose up -d

Phase 0 Implementation Status

Completed

  • Project scaffolded from playchoo-nextjs template
  • Configuration updated for manager.playchoo.com
  • Ports changed: dev (8100), prod (8200)
  • Customer-facing pages removed
  • Admin landing page created
  • /admin/clubs route with access-aware messaging
  • Docker and CI/CD configs updated

Pending (Blocked by Backend)

  • Auth integration - Blocked by Access Avery
    • Needs: Auth middleware exposing admin context
    • Needs: club_admin association checks
  • Club listing - Blocked by Data Dana
    • Needs: GET /admin/clubs endpoint
    • Needs: GET /admin/clubs/{club_id} endpoint

Phase 1 Roadmap

  • Slot definition management UI
  • Create/edit forms for slot templates
  • Materialisation status feedback
  • Integration with Job Jonah's materialisation job

Dependencies & Blocking

See docs/owners/ in py-playchoo-api for coordination:

  • Frontend_Faye.md - My status updates
  • Data_Dana-blocking-Frontend_Faye.md - API contracts I need
  • Frontend_Faye-blocking-*.md - Items blocking others

Deployment

Deployed via Drone CI on push to master:

  1. Build Docker image with BuildKit caching
  2. Push to registry.sn48.zivili.ch/meow/playchoo-manager-nextjs
  3. Deploy to production server via drone-deploy

URLs

Notes

  • This project shares the same backend APIs as the consumer app
  • Auth is handled via SwissOID sessions (same as consumer app)
  • Admin permissions are checked at the API level
  • UI gracefully handles missing permissions with access-aware messaging