# Cabo Pickleball Club Adaptation - Implementation Plan > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. **Goal:** Adapt SmashPoint from a Spanish-language padel club system to an English-language pickleball club system branded for Cabo Pickleball Club. **Architecture:** Direct string replacement across ~30 files. No structural changes to components, API routes, or database schema. Hide unused features (Tournaments, POS) by removing sidebar links. Update color palette and seed data. **Tech Stack:** Next.js 14, TailwindCSS, Prisma, TypeScript (all unchanged) --- ### Task 1: Update Color Palette **Files:** - Modify: `apps/web/tailwind.config.ts` **Step 1: Replace primary color scale** Change primary from dark navy (#1E3A5F) to Cabo blue (#2990EA). Change accent from green (#22C55E) to amber (#F59E0B). Replace the entire `colors` object in tailwind.config.ts with: ```typescript primary: { 50: "#E8F4FD", 100: "#C5E3FA", 200: "#9DCEF6", 300: "#75B9F2", 400: "#4DA4EE", 500: "#2990EA", 600: "#2177C8", 700: "#195DA6", 800: "#124484", 900: "#0B2B62", DEFAULT: "#2990EA", }, accent: { 50: "#FEF7EC", 100: "#FDEACC", 200: "#FBD89D", 300: "#F9C66E", 400: "#F7B43F", 500: "#F59E0B", 600: "#D48509", 700: "#A36807", 800: "#724A05", 900: "#412B03", DEFAULT: "#F59E0B", }, ``` **Step 2: Build to verify colors compile** Run: `cd /root/Padel && pnpm build 2>&1 | tail -5` Expected: Build succeeds **Step 3: Commit** ```bash git add apps/web/tailwind.config.ts git commit -m "feat: update color palette to Cabo blue (#2990EA) and amber accent" ``` --- ### Task 2: Update Branding (Landing, Login, Sidebar, Metadata) **Files:** - Modify: `apps/web/app/layout.tsx` - Modify: `apps/web/app/page.tsx` - Modify: `apps/web/app/(auth)/login/page.tsx` - Modify: `apps/web/components/layout/sidebar.tsx` - Modify: `apps/web/app/icon.svg` **Step 1: Update root layout metadata** In `apps/web/app/layout.tsx`: - title: `"Cabo Pickleball Club | SmashPoint"` - description: `"Court Management System for Cabo Pickleball Club"` - keywords: `["pickleball", "cabo", "courts", "bookings", "club"]` - authors: `[{ name: "SmashPoint" }]` - Change `` to `` **Step 2: Update landing page** In `apps/web/app/page.tsx`: - Logo container: change `bg-amber-500` to `bg-primary` - h1: `"Cabo Pickleball Club"` (instead of "SmashPoint") - Add subtitle: `
Powered by SmashPoint
` - Tagline: `"Court Management System"` (replacing Spanish) - Change "Reservas" button text to `"Book a Court"` and href to `/bookings` **Step 3: Update login page** In `apps/web/app/(auth)/login/page.tsx`: - Logo containers: change `bg-amber-500/20` and `border-amber-400/30` to `bg-primary/20` and `border-primary-300/30` - SVG fill colors: change `#FBBF24` to `currentColor` and add `className="text-white"` - Desktop h1: `"Cabo Pickleball Club"` - Add after h1: `Powered by SmashPoint
` - Desktop tagline: `"Court Management System"` - Feature 1: `"Court Bookings"` / `"Manage your courts and schedules"` - Feature 2: `"Player Management"` / `"Memberships and player profiles"` - Feature 3: `"Reports & Analytics"` / `"Analyze your club's performance"` - Mobile h1: `"Cabo Pickleball Club"` - Mobile tagline: `"Court Management System"` - Footer: `"© {year} SmashPoint. All rights reserved."` **Step 4: Update sidebar** In `apps/web/components/layout/sidebar.tsx`: - Logo container: change `bg-amber-500` to `bg-primary` - Brand text: `"Cabo Pickleball"` (instead of "SmashPoint") - Remove Tournaments entry: `{ label: 'Torneos', href: '/tournaments', icon: Trophy }` - Remove POS entry: `{ label: 'Ventas', href: '/pos', icon: ShoppingCart }` - Remove Trophy and ShoppingCart imports from lucide-react - Translate remaining labels: - `'Reservas'` → `'Bookings'` - `'Clientes'` → `'Players'` - `'Membresías'` → `'Memberships'` - `'Reportes'` → `'Reports'` - `'Configuración'` → `'Settings'` **Step 5: Update favicon** In `apps/web/app/icon.svg`: - Change `fill="#F59E0B"` to `fill="#2990EA"` (rect background) **Step 6: Commit** ```bash git add apps/web/app/layout.tsx apps/web/app/page.tsx apps/web/app/\(auth\)/login/page.tsx apps/web/components/layout/sidebar.tsx apps/web/app/icon.svg git commit -m "feat: rebrand to Cabo Pickleball Club with English UI" ``` --- ### Task 3: Translate Auth & Layout Components **Files:** - Modify: `apps/web/components/auth/login-form.tsx` - Modify: `apps/web/components/layout/header.tsx` **Step 1: Translate login-form.tsx** All Spanish strings → English: - `'El correo electrónico es requerido'` → `'Email is required'` - `'Ingresa un correo electrónico válido'` → `'Enter a valid email address'` - `'La contraseña es requerida'` → `'Password is required'` - `'La contraseña debe tener al menos 6 caracteres'` → `'Password must be at least 6 characters'` - `'Credenciales inválidas...'` → `'Invalid credentials. Please check your email and password.'` - `'Ocurrió un error al iniciar sesión...'` → `'An error occurred while signing in. Please try again.'` - `Iniciar Sesión` (heading) → `Sign In` - `Ingresa tus credenciales para acceder al sistema` → `Enter your credentials to access the system` - `Correo Electrónico` → `Email` - `"correo@ejemplo.com"` → `"email@example.com"` - `Contraseña` → `Password` - `Recordarme` → `Remember me` - `¿Olvidaste tu contraseña?` → `Forgot your password?` - `Iniciando sesión...` → `Signing in...` - Button: `'Iniciar Sesión'` → `'Sign In'` **Step 2: Translate header.tsx** - `'Usuario'` → `'User'` - `"Cerrar sesión"` → `"Log out"` **Step 3: Commit** ```bash git add apps/web/components/auth/login-form.tsx apps/web/components/layout/header.tsx git commit -m "feat: translate auth and layout components to English" ``` --- ### Task 4: Translate Dashboard Page & Components **Files:** - Modify: `apps/web/app/(admin)/dashboard/page.tsx` - Modify: `apps/web/components/dashboard/quick-actions.tsx` - Modify: `apps/web/components/dashboard/occupancy-chart.tsx` - Modify: `apps/web/components/dashboard/recent-bookings.tsx` - Modify: `apps/web/components/dashboard/stat-card.tsx` **Step 1: Translate dashboard/page.tsx** - `"Error al cargar los datos del dashboard"` → `"Error loading dashboard data"` - `"Error desconocido"` → `"Unknown error"` - `"Usuario"` → `"User"` - `` `Bienvenido, ${userName}` `` → `` `Welcome, ${userName}` `` - `Panel de administracion` → `Admin panel` - `` `Mostrando: ${selectedSite.name}` `` → `` `Showing: ${selectedSite.name}` `` - `"Reservas Hoy"` → `"Today's Bookings"` - `"Ingresos Hoy"` → `"Today's Revenue"` - `"Ocupacion"` → `"Occupancy"` - `"Miembros Activos"` → `"Active Members"` - `"Reservas Pendientes"` → `"Pending Bookings"` - `"Torneos Proximos"` → `"Upcoming Events"` (generic since tournaments hidden) **Step 2: Translate quick-actions.tsx** - `"Nueva Reserva"` → `"New Booking"` - `"Crear una nueva reserva de cancha"` → `"Create a new court booking"` - `"Abrir Caja"` → `"Open Register"` - `"Iniciar turno de caja registradora"` → `"Start cash register shift"` - `"Nueva Venta"` → `"New Sale"` - `"Registrar venta en el punto de venta"` → `"Record a point of sale transaction"` - `"Registrar Cliente"` → `"Register Player"` - `"Agregar un nuevo cliente al sistema"` → `"Add a new player to the system"` - `Acciones Rapidas` → `Quick Actions` **Step 3: Translate occupancy-chart.tsx** - `Ocupacion de Canchas` → `Court Occupancy` (appears twice) - `No hay canchas configuradas` → `No courts configured` - `{court.occupancyPercent}% ocupado` → `{court.occupancyPercent}% booked` - `disponible` → `available` - `Ocupado` → `Booked` - `Disponible` → `Available` **Step 4: Translate recent-bookings.tsx** - `"Pendiente"` → `"Pending"` - `"Confirmada"` → `"Confirmed"` - `"Completada"` → `"Completed"` - `"Cancelada"` → `"Cancelled"` - `"No asistio"` → `"No Show"` - `Reservas de Hoy` → `Today's Bookings` - `Ver todas` → `View all` - `No hay reservas para hoy` → `No bookings for today` - `"Sin cliente"` → `"Walk-in"` **Step 5: Translate stat-card.tsx** - `vs ayer` → `vs yesterday` **Step 6: Commit** ```bash git add apps/web/app/\(admin\)/dashboard/page.tsx apps/web/components/dashboard/ git commit -m "feat: translate dashboard page and components to English" ``` --- ### Task 5: Translate Bookings Page & Components **Files:** - Modify: `apps/web/app/(admin)/bookings/page.tsx` - Modify: `apps/web/components/bookings/booking-calendar.tsx` - Modify: `apps/web/components/bookings/booking-dialog.tsx` **Step 1: Translate bookings/page.tsx** - `Reservas` → `Bookings` - `Gestiona las reservas de canchas...` → `Manage court bookings. Select a time slot to create or view a booking.` **Step 2: Translate booking-calendar.tsx** All Spanish strings → English (12 strings): - Error messages: `"Error al cargar..."` → `"Error loading..."` - `Reintentar` → `Retry` - `Calendario` → `Calendar` - `Hoy` → `Today` - `Cargando disponibilidad...` → `Loading availability...` - `No hay canchas disponibles.` → `No courts available.` - `"Interior"` → `"Indoor"`, `"Exterior"` → `"Outdoor"` - `No disponible` → `Not available` - `No hay horarios disponibles para este día.` → `No time slots available for this day.` **Step 3: Translate booking-dialog.tsx** All Spanish strings → English (35 strings): - Form labels: `Buscar Cliente` → `Search Player`, `Cliente seleccionado:` → `Selected player:` - Status labels: `"Confirmada"` → `"Confirmed"`, `"Pendiente"` → `"Pending"`, etc. - Payment types: `"Efectivo"` → `"Cash"`, `"Tarjeta"` → `"Card"`, `"Transferencia"` → `"Transfer"`, `"Membresia"` → `"Membership"`, `"Gratuito"` → `"Free"` - Field labels: `Cancha:` → `Court:`, `Fecha:` → `Date:`, `Hora:` → `Time:`, `Precio:` → `Price:` - Buttons: `"Crear Reserva"` → `"Create Booking"`, `"Cancelar Reserva"` → `"Cancel Booking"` - Error messages: all `"Error al..."` → `"Error..."` - Placeholders: `"Nombre, email o telefono..."` → `"Name, email or phone..."` - Note: Change all instances of "Cliente" to "Player" in this file **Step 4: Commit** ```bash git add apps/web/app/\(admin\)/bookings/page.tsx apps/web/components/bookings/ git commit -m "feat: translate bookings page and components to English" ``` --- ### Task 6: Translate Clients Page (rename to Players) **Files:** - Modify: `apps/web/app/(admin)/clients/page.tsx` **Step 1: Translate all strings** 17 Spanish strings → English. Key translations: - `Clientes` → `Players` - `Gestiona los clientes de tu centro` → `Manage your club's players` - `Nuevo Cliente` → `New Player` - `"Total Clientes"` → `"Total Players"` - `"Con Membresia"` → `"With Membership"` - `"Nuevos Este Mes"` → `"New This Month"` - `"Buscar por nombre, email o telefono..."` → `"Search by name, email or phone..."` - `"Todos"` → `"All"`, `"Con membresia"` → `"With membership"`, `"Sin membresia"` → `"Without membership"` - All error messages: translate from Spanish to English - Confirmation dialog: translate to English **Step 2: Commit** ```bash git add apps/web/app/\(admin\)/clients/page.tsx git commit -m "feat: translate clients/players page to English" ``` --- ### Task 7: Translate Memberships Page & Components **Files:** - Modify: `apps/web/app/(admin)/memberships/page.tsx` - Modify: `apps/web/components/memberships/plan-card.tsx` - Modify: `apps/web/components/memberships/plan-form.tsx` **Step 1: Translate memberships/page.tsx (30 strings)** - `Membresias` → `Memberships` - `Gestiona planes y membresias de tus clientes` → `Manage plans and memberships for your players` - Status filters: `"Todos"` → `"All"`, `"Activas"` → `"Active"`, `"Expiradas"` → `"Expired"`, `"Canceladas"` → `"Cancelled"` - Stats: `Membresias Activas` → `Active Memberships`, `Por Expirar` → `Expiring Soon`, `Planes Activos` → `Active Plans`, `Total Suscriptores` → `Total Subscribers` - `Planes de Membresia` → `Membership Plans` - `Nuevo Plan` → `New Plan` - `Cargando planes...` → `Loading plans...` - `No hay planes` → `No plans`, `Crea tu primer plan de membresia` → `Create your first membership plan` - `Crear Plan` → `Create Plan` - `Asignar Membresia` → `Assign Membership` - `"Buscar por nombre de cliente..."` → `"Search by player name..."` - `"Todos los planes"` → `"All plans"` - All error messages and confirmation dialogs → English **Step 2: Translate plan-card.tsx (11 strings)** - `suscriptor` / `suscriptores` → `subscriber` / `subscribers` - `mes` / `meses` → `month` / `months` - `horas gratis` → `free hours` - `de cancha al mes` → `of court time per month` - `descuento` → `discount` - `en reservas adicionales` → `on additional bookings` - `en tienda` → `in store` - `Beneficios adicionales:` → `Additional benefits:` - `Editar` → `Edit`, `Eliminar` → `Delete` **Step 3: Translate plan-form.tsx (25 strings)** - Duration labels: `"1 mes"` → `"1 month"`, `"3 meses"` → `"3 months"`, etc. - Validation: all Spanish error messages → English - Form title: `"Nuevo Plan de Membresia"` → `"New Membership Plan"`, `"Editar Plan"` → `"Edit Plan"` - Labels: `Nombre del Plan *` → `Plan Name *`, `Descripcion` → `Description`, `Precio *` → `Price *`, `Duracion` → `Duration` - Section headers: `Beneficios` → `Benefits`, `Horas Gratis de Cancha (por mes)` → `Free Court Hours (per month)`, `Descuento en Reservas (%)` → `Booking Discount (%)`, `Descuento en Tienda (%)` → `Store Discount (%)` - Buttons: `Cancelar` → `Cancel`, `Guardando...` → `Saving...`, `"Crear Plan"` → `"Create Plan"`, `"Guardar Cambios"` → `"Save Changes"` - Placeholders: translate to English equivalents **Step 4: Commit** ```bash git add apps/web/app/\(admin\)/memberships/page.tsx apps/web/components/memberships/ git commit -m "feat: translate memberships page and components to English" ``` --- ### Task 8: Translate Reports Page **Files:** - Modify: `apps/web/app/(admin)/reports/page.tsx` **Step 1: Translate all strings (28 strings)** - `Reportes` → `Reports` - `Análisis y estadísticas del negocio` → `Business analysis and statistics` - Period filters: `"Última semana"` → `"Last week"`, `"Último mes"` → `"Last month"`, `"Último trimestre"` → `"Last quarter"`, `"Último año"` → `"Last year"` - `Exportar` → `Export` - KPIs: `"Ingresos Totales"` → `"Total Revenue"`, `"Reservas"` → `"Bookings"`, `"Clientes Activos"` → `"Active Players"`, `"Ocupación Promedio"` → `"Average Occupancy"` - Charts: `Ingresos por Día` → `Revenue by Day`, `Reservas` → `Bookings`, `Ventas` → `Sales` - `Productos Más Vendidos` → `Top Selling Products` - `unidades` → `units` - `Rendimiento por Cancha` → `Court Performance` - Table headers: `Cancha` → `Court`, `Sede` → `Site`, `Reservas` → `Bookings`, `Ingresos` → `Revenue`, `Ocupación` → `Occupancy` - Day names: `"Lun"` → `"Mon"`, `"Mar"` → `"Tue"`, `"Mié"` → `"Wed"`, `"Jue"` → `"Thu"`, `"Vie"` → `"Fri"`, `"Sáb"` → `"Sat"`, `"Dom"` → `"Sun"` - Insights: `Mejor Día` → `Best Day`, `Sábado` → `Saturday`, `en ingresos promedio` → `in average revenue`, `Hora Pico` → `Peak Hour`, `Ticket Promedio` → `Average Ticket` - `vs período anterior` → `vs previous period` - Rename "Cancha" to "Court" in mock data court names (lines 110-115) - Rename "Raqueta alquiler" to "Paddle Rental" in mock products (line 106) - Rename "Pelotas HEAD" to "Pickleballs" in mock products (line 105) **Step 2: Commit** ```bash git add apps/web/app/\(admin\)/reports/page.tsx git commit -m "feat: translate reports page to English" ``` --- ### Task 9: Translate Settings Page **Files:** - Modify: `apps/web/app/(admin)/settings/page.tsx` **Step 1: Translate all Spanish strings** Key translations (the file has ~60 Spanish strings): - `Configuración` → `Settings` - `Administra la configuración del sistema` → `Manage system settings` - `Configuración guardada correctamente` → `Settings saved successfully` - Tab labels: `Organización` → `Organization`, `Sedes` → `Sites`, `Canchas` → `Courts`, `Usuarios` → `Users` - Organization form: `Nombre de la organización` → `Organization name`, `Email de contacto` → `Contact email`, `Teléfono` → `Phone`, `Moneda` → `Currency`, `Zona horaria` → `Timezone` - Currency options: `"MXN - Peso Mexicano"`, `"USD - Dólar"`, `"EUR - Euro"` → `"MXN - Mexican Peso"`, `"USD - US Dollar"`, `"EUR - Euro"` - Timezone options: `"Ciudad de México"` → `"Mexico City"`, etc. - Booking config: `Duración por defecto (minutos)` → `Default duration (minutes)`, `Anticipación mínima (horas)` → `Minimum notice (hours)`, `Anticipación máxima (días)` → `Maximum advance (days)`, `Horas para cancelar` → `Cancellation window (hours)` - Buttons: `Guardar cambios` → `Save changes`, `Guardando...` → `Saving...` - Sites section: `Sedes` → `Sites`, `Nueva Sede` → `New Site`, `Activa` / `Inactiva` → `Active` / `Inactive` - Courts section: `Canchas` → `Courts`, `Nueva Cancha` → `New Court`, `Cancha` → `Court`, `Sede` → `Site`, `Tipo` → `Type`, `Precio/hora` → `Price/hour`, `Estado` → `Status`, `Acciones` → `Actions` - Court types: `Indoor` stays, `Outdoor` stays, `"Techada"` → `"Covered"` - Court status: `"Activa"` → `"Active"`, `"Mantenimiento"` → `"Maintenance"`, `"Inactiva"` → `"Inactive"` - Users section: `Usuarios` → `Users`, `Nuevo Usuario` → `New User`, `Usuario` → `User`, `Rol` → `Role`, `"Super Admin"` stays, `"Admin Sede"` → `"Site Admin"`, `"Staff"` stays - Messages: `"Cancha actualizada"` → `"Court updated"`, `"Cancha creada"` → `"Court created"`, `"Cancha eliminada"` → `"Court deleted"`, etc. - Site form: `"Editar Sede"` → `"Edit Site"`, `"Nueva Sede"` → `"New Site"`, `Nombre` → `Name`, `Dirección` → `Address`, `Teléfono` → `Phone`, `Hora apertura` → `Opening time`, `Hora cierre` → `Closing time`, `Sede activa` → `Site active` - Court form: `"Editar Cancha"` → `"Edit Court"`, `"Nueva Cancha"` → `"New Court"`, `Precio hora pico` → `Peak hour price` - All `Cancelar` → `Cancel`, `Guardar` → `Save`, `Guardando...` → `Saving...` - Error/success: `"Sede actualizada"` → `"Site updated"`, `"Sede creada"` → `"Site created"`, `"Error al guardar..."` → `"Error saving..."`, `"Error de conexión"` → `"Connection error"` - Confirmation: `"¿Estás seguro de eliminar esta cancha?"` → `"Are you sure you want to delete this court?"` - `"Todas"` → `"All"` (for site assignment) - `"Activo"` / `"Inactivo"` → `"Active"` / `"Inactive"` (user status) **Step 2: Commit** ```bash git add apps/web/app/\(admin\)/settings/page.tsx git commit -m "feat: translate settings page to English" ``` --- ### Task 10: Translate API Error Messages **Files:** - Modify: `apps/web/app/api/bookings/route.ts` - Modify: `apps/web/app/api/clients/route.ts` - Check and modify any other API routes with Spanish strings **Step 1: Translate bookings/route.ts** - `'No autorizado'` → `'Unauthorized'` - `'Error al obtener las reservas'` → `'Error fetching bookings'` - `'Datos de reserva inválidos'` → `'Invalid booking data'` - `'Cancha no encontrada o no pertenece a su organización'` → `'Court not found or does not belong to your organization'` - `'La cancha no está disponible para reservas'` → `'The court is not available for bookings'` - `'Cliente no encontrado o no pertenece a su organización'` → `'Client not found or does not belong to your organization'` - `'Ya existe una reserva en ese horario...'` → `'A booking already exists for that time slot. Please select another time.'` - `'Error al crear la reserva'` → `'Error creating booking'` **Step 2: Scan and translate all other API routes** Search for Spanish strings in all files under `apps/web/app/api/` and translate them. Run: `grep -rn "'" apps/web/app/api/ | grep -i "[áéíóúñ]\|Error al\|No autorizado\|no encontrad"` to find remaining Spanish. **Step 3: Commit** ```bash git add apps/web/app/api/ git commit -m "feat: translate API error messages to English" ``` --- ### Task 11: Update Seed Data for Cabo Pickleball **Files:** - Modify: `apps/web/prisma/seed.ts` **Step 1: Update organization** ```typescript name: 'Cabo Pickleball Club', slug: 'cabo-pickleball-club', settings: { currency: 'MXN', timezone: 'America/Mazatlan', language: 'en', }, ``` **Step 2: Update site (single site instead of 3)** Replace the 3 sites with 1: ```typescript const sitesData = [ { name: 'Corridor Courts', slug: 'corridor-courts', address: 'Corridor area, Cabo San Lucas, BCS', phone: '+52-624-151-5455', email: 'topdogcabo@yahoo.com', timezone: 'America/Mazatlan', openTime: '07:00', closeTime: '22:00', }, ]; ``` **Step 3: Update courts (6 outdoor courts)** Replace the 2-per-site pattern with 6 courts for the single site: ```typescript const courtData = [ { name: 'Court 1', type: CourtType.OUTDOOR, status: CourtStatus.AVAILABLE, pricePerHour: 300, description: 'Outdoor court with night lighting', features: ['Night lighting', 'Court dividers'], displayOrder: 1 }, { name: 'Court 2', type: CourtType.OUTDOOR, status: CourtStatus.AVAILABLE, pricePerHour: 300, description: 'Outdoor court with night lighting', features: ['Night lighting', 'Court dividers'], displayOrder: 2 }, { name: 'Court 3', type: CourtType.OUTDOOR, status: CourtStatus.AVAILABLE, pricePerHour: 300, description: 'Outdoor court with night lighting', features: ['Night lighting', 'Court dividers'], displayOrder: 3 }, { name: 'Court 4', type: CourtType.OUTDOOR, status: CourtStatus.AVAILABLE, pricePerHour: 300, description: 'Outdoor court with night lighting', features: ['Night lighting', 'Court dividers'], displayOrder: 4 }, { name: 'Court 5', type: CourtType.OUTDOOR, status: CourtStatus.AVAILABLE, pricePerHour: 300, description: 'Outdoor court with night lighting', features: ['Night lighting', 'Court dividers'], displayOrder: 5 }, { name: 'Court 6', type: CourtType.OUTDOOR, status: CourtStatus.AVAILABLE, pricePerHour: 300, description: 'Outdoor court with night lighting', features: ['Night lighting', 'Court dividers'], displayOrder: 6 }, ]; ``` **Step 4: Update admin user** ```typescript email: 'ivan@horuxfin.com', password: await bcrypt.hash('Aasi940812', 10), ``` Remove the site admin users (single-site operation). **Step 5: Update product categories and products** Change to pickleball-relevant items: - Category: `'Equipment'` → `'Pickleball equipment and accessories'` - Products: `'Pickleballs'` (Franklin X-40), `'Paddle Rental'`, `'Paddle Grip'` - Category: `'Drinks'` stays but translate names to English - Remove `'Alquiler'` category (merge rental into Equipment) **Step 6: Update membership plans** ```typescript const membershipPlansData = [ { name: 'Day Pass', description: 'Single day access to all courts', price: 300, durationMonths: 1, courtHours: 0, discountPercent: 0, benefits: ['Full day access', 'All courts', 'Night play included'], }, { name: '10-Day Pass', description: '10 visits, any time of day', price: 2500, durationMonths: 3, courtHours: 10, discountPercent: 15, benefits: ['10 day passes', 'Valid any time', 'Save vs single day pass'], }, { name: '10-Morning Pass', description: '10 morning sessions (7am-12pm)', price: 2000, durationMonths: 3, courtHours: 10, discountPercent: 10, benefits: ['10 morning passes', '7:00 AM - 12:00 PM only', 'Best value for morning players'], }, { name: 'Monthly Individual', description: 'Unlimited monthly access for one player', price: 4000, durationMonths: 1, courtHours: 30, discountPercent: 25, benefits: ['Unlimited court access', 'Priority booking', 'All time slots'], }, { name: 'Monthly Family', description: 'Unlimited monthly access for up to 4 family members', price: 6500, durationMonths: 1, courtHours: 60, discountPercent: 30, benefits: ['Up to 4 family members', 'Unlimited court access', 'Priority booking', 'All time slots'], }, ]; ``` **Step 7: Update seed summary output** Change all console.log messages to English and update credential display: ``` Login credentials: Admin: ivan@horuxfin.com / Aasi940812 ``` **Step 8: Commit** ```bash git add apps/web/prisma/seed.ts git commit -m "feat: update seed data for Cabo Pickleball Club" ``` --- ### Task 12: Sport Terminology Sweep **Files:** - All `.tsx`, `.ts` files containing "padel", "pádel", "cancha", "raqueta", "pelota" **Step 1: Global search and replace** Run targeted searches and replace remaining sport terms: - `grep -rn "padel\|pádel\|Padel\|Pádel" apps/web/ --include="*.tsx" --include="*.ts"` — replace with "pickleball" - `grep -rn "cancha" apps/web/ --include="*.tsx" --include="*.ts"` — replace with "court" (should already be done in earlier tasks) - `grep -rn "raqueta\|Raqueta" apps/web/ --include="*.tsx" --include="*.ts"` — replace with "paddle" - `grep -rn "pelota\|Pelota" apps/web/ --include="*.tsx" --include="*.ts"` — replace with "pickleball ball" or "pickleballs" **Step 2: Verify no Spanish sport terms remain** Run: `grep -rni "padel\|cancha\|raqueta\|pelota" apps/web/ --include="*.tsx" --include="*.ts"` Expected: No matches (or only in comments/prisma generated code) **Step 3: Commit if any changes** ```bash git add -A git commit -m "feat: replace all padel terminology with pickleball" ``` --- ### Task 13: Build, Verify & Final Commit **Step 1: Clean build** ```bash rm -rf apps/web/.next .turbo pnpm build ``` Expected: Build succeeds with 0 errors. **Step 2: Verify no Spanish remains in user-facing code** Run: `grep -rni "[áéíóúñ]" apps/web/app/ apps/web/components/ --include="*.tsx" --include="*.ts" | grep -v node_modules | grep -v ".next"` Review any remaining Spanish strings and translate. **Step 3: Restart server and verify** ```bash fuser -k 3000/tcp 2>/dev/null sleep 2 cd apps/web && npx next start --port 3000 & ``` **Step 4: Push** ```bash git push origin main ```