Files
Client_Fe/PROJECT_REFERENCE.md
T
Dhananjaya99 a1b870fa8a first commit
2026-09-28 11:48:14 +05:30

405 lines
15 KiB
Markdown

# HexaFitness Client Project Reference
## Overview
- App name: `hexa-fitness-client`
- Stack: Next.js 16 App Router, React 19, TypeScript, Tailwind CSS 4
- UI patterns: custom app components plus reusable `src/components/ui/*`
- Notifications: `sonner`
- Charts: `recharts`
- Theme handling: `next-themes`
- Main app area: dashboard for gym management
- Public flows: landing page, request access, sandbox demo, activation, login
## Environment
- Core API base URL: `NEXT_PUBLIC_CORE_API_URL`
- Default fallback in code: `http://localhost:5111`
## Scripts
- `npm run dev` - start development server
- `npm run build` - production build
- `npm run start` - run production server
- `npm run lint` - run ESLint
## App Structure
### Root App Files
- `src/app/layout.tsx` - global layout, fonts, theme provider, tooltip provider, toast provider
- `src/app/globals.css` - global styling
- `src/app/page.tsx` - redirects `/` to `/landing-page`
### Screens / Routes
| Route | File | Purpose |
| --- | --- | --- |
| `/` | `src/app/page.tsx` | Root redirect to landing page |
| `/landing-page` | `src/app/landing-page/page.tsx` | Marketing website |
| `/login` | `src/app/login/page.tsx` | User login form |
| `/request-access` | `src/app/request-access/page.tsx` | Mobile OTP onboarding request flow |
| `/sandbox/[token]` | `src/app/sandbox/[token]/page.tsx` | Demo dashboard / sandbox experience |
| `/activation/[token]` | `src/app/activation/[token]/page.tsx` | Multi-step gym activation flow |
| `/dashboard` | `src/app/dashboard/page.tsx` | Dashboard overview |
| `/dashboard/attendance` | `src/app/dashboard/attendance/page.tsx` | Attendance tracking |
| `/dashboard/members` | `src/app/dashboard/members/page.tsx` | Member listing, details, actions |
| `/dashboard/memberships` | `src/app/dashboard/memberships/page.tsx` | Gym plans / memberships |
| `/dashboard/payments` | `src/app/dashboard/payments/page.tsx` | Payments and invoices |
| `/dashboard/workout-plans` | `src/app/dashboard/workout-plans/page.tsx` | Workout plan management |
| `/dashboard/meal-plans` | `src/app/dashboard/meal-plans/page.tsx` | Meal plan management |
| `/dashboard/staff` | `src/app/dashboard/staff/page.tsx` | Staff management |
| `/dashboard/feed` | `src/app/dashboard/feed/page.tsx` | Feed management |
| `/dashboard/tickets` | `src/app/dashboard/tickets/page.tsx` | Support tickets |
| `/dashboard/payouts` | `src/app/dashboard/payouts/page.tsx` | Wallet, KYC, payout setup |
| `/dashboard/reports` | `src/app/dashboard/reports/page.tsx` | Revenue, attendance, trends |
### Layout and Loading Files
- `src/app/dashboard/layout.tsx` - auth gate, wraps dashboard in `DashboardShell`
- `src/app/dashboard/loading.tsx` - dashboard loading state
- `src/app/dashboard/attendance/loading.tsx`
- `src/app/dashboard/feed/loading.tsx`
- `src/app/dashboard/members/loading.tsx`
- `src/app/dashboard/memberships/loading.tsx`
- `src/app/dashboard/meal-plans/loading.tsx`
- `src/app/dashboard/payments/loading.tsx`
- `src/app/dashboard/payouts/loading.tsx`
- `src/app/dashboard/reports/loading.tsx`
- `src/app/dashboard/staff/loading.tsx`
- `src/app/dashboard/tickets/loading.tsx`
- `src/app/dashboard/workout-plans/loading.tsx`
## Navigation
- Source: `src/lib/nav.ts`
- Main dashboard nav items:
- Dashboard
- Attendance
- Members
- Memberships
- Payments & Invoices
- Workout Plans
- Meal Plans
- Staff
- Feed
- Tickets
- Payouts & Wallet
- Reports
- Mobile primary keys: `dashboard`, `members`, `attendance`, `payments`
## API Layer
### Core HTTP
- `src/lib/api/core-http.ts`
- Responsibilities:
- centralized `apiRequest`
- auth-aware fetch with cookies
- auto refresh on `401`
- redirect to `/login` when session refresh fails
- `ApiError` handling
- shared helpers: `findField`, `refreshSession`
### Auth APIs
- `src/lib/api/auth.ts`
- `login(request)` - login user and extract access/refresh token fields
- `src/lib/api/session.ts`
- `logout()` - clear server cookies and local auth flag
- `refreshSession()` - re-exported refresh helper
### Onboarding / Activation APIs
- `src/lib/api/onboarding.ts`
- `checkMobileNumber(request)` - check if onboarding already exists
- `sendMobileOtp(request)` - send request-access OTP
- `verifyMobileOtp(request)` - verify request-access OTP
- `createOnboardingRequest(requestAccessToken, request)` - submit gym onboarding request
- `getSandboxStatus(sandboxToken)` - fetch demo/sandbox status
- `updateSandboxProgress(sandboxToken, update)` - track sandbox usage/tour progress
- `src/lib/api/activation.ts`
- `sendActivationEmailOtp(token, request)` - send activation email OTP
- `verifyActivationEmailOtp(token, request)` - verify activation email OTP
- `uploadNic(token, nicNumber, frontImage, backImage)` - upload identity documents
- `updateGymProfile(token, request)` - save gym profile info
- `setPaymentMethod(token, request)` - save activation payment method
- `chargeAndActivate(token)` - finalize activation
- `getActivationChecklist(token)` - fetch post-activation checklist
### Dashboard Business APIs
- `src/lib/api/profile.ts`
- `getMyProfile()` - fetch logged-in client profile
- `src/lib/api/stats.ts`
- `getStatSummary()` - dashboard summary stats
- `getMonthlyRevenue()` - revenue chart data
- `getRecentPayments()` - recent payment list
- `getRecentAttendance()` - recent attendance list
- `src/lib/api/attendance.ts`
- `getAllAttendance()` - full attendance records
- `getTodayAttendance()` - today check-ins
- `getAttendanceCounts(fromDate, toDate)` - aggregated attendance counts
- `src/lib/api/customers.ts`
- `getMembers()` - list members with subscriptions
- `getMember(customerId)` - member detail
- `createMember(input)` - add member
- `updateMember(customerId, input)` - edit member
- `deleteMember(customerId)` - remove member
- `src/lib/api/gym-plans.ts`
- `getGymPlans(includeInactive)` - list gym membership plans
- `getGymPlan(id)` - single gym plan
- `createGymPlan(input)` - create gym plan
- `updateGymPlan(id, input)` - update gym plan
- `deleteGymPlan(id, hard)` - delete or soft delete plan
- `src/lib/api/subscriptions.ts`
- `getSubscription(id)` - subscription summary
- `getSubscriptionPayments(id)` - subscription payment history
- `recordSubscriptionPayment(id, input)` - add payment to subscription
- `addSubscriptionMember(id, customerId)` - attach member to subscription
- `removeSubscriptionMember(id, subscriptionMemberId)` - remove member from subscription
- `src/lib/api/invoices.ts`
- `getMemberInvoices()` - list invoices
- `getMemberInvoice(id)` - invoice detail
- `src/lib/api/payments-enablement.ts`
- `getPaymentTracks()` - available payout/payment tracks
- `selectPaymentTrack(request)` - choose a payment track
- `submitPayoutKyc(brCertificate, bankProof)` - upload payout KYC docs
- `getKycStatus()` - read KYC state
- `getWallet()` - wallet summary
- `getPayoutSchedule()` - payout schedule data
- `src/lib/api/staff.ts`
- `getStaff()` - list staff
- `getStaffMember(staffId)` - single staff member
- `createStaff(input)` - create staff member
- `updateStaff(staffId, input)` - update staff
- `deleteStaff(staffId, softDelete)` - delete staff member
- `src/lib/api/feed.ts`
- `getFeed()` - list feed posts
- `createFeedPost(input)` - create post
- `deleteFeedPost(postId)` - delete post
- `likePost(postId)` - like post
- `unlikePost(postId)` - unlike post
- `isPostLiked(postId)` - fetch current user like state
- `src/lib/api/tickets.ts`
- `getTickets()` - list support tickets
- `getTicket(id)` - ticket detail
- `getTicketCategories()` - support categories
- `createTicket(mainReason, ticketCategoryId)` - open ticket
- `sendTicketMessage(id, message)` - add ticket message
- `submitTicketFeedback(id, rating, feedback)` - submit support feedback
- `closeTicket(id)` - close ticket
- `deleteTicket(id)` - delete ticket
### Plan APIs
- `src/lib/api/workout-plans.ts`
- `getWorkoutPlans()`
- `getWorkoutCategories()`
- `createWorkoutCategory(name, description)`
- `createWorkoutPlan(input)`
- `updateWorkoutPlan(id, input)`
- `deleteWorkoutPlan(id)`
- `assignWorkoutPlan(id, customerId, notes)`
- `getWorkoutItems(planId)`
- `createWorkoutItem(planId, title, detail)`
- `src/lib/api/meal-plans.ts`
- `getMealPlans()`
- `getMealCategories()`
- `createMealCategory(name, description)`
- `createMealPlan(input)`
- `updateMealPlan(id, input)`
- `deleteMealPlan(id)`
- `assignMealPlan(id, customerId, notes)`
- `getMealItems(planId)`
- `createMealItem(planId, title, detail)`
## Components
### Shared App Components
- `src/components/theme-provider.tsx` - global theme wrapper
### Marketing Components
- `src/components/marketing/marketing-header.tsx`
- `src/components/marketing/hero-section.tsx`
- `src/components/marketing/features-section.tsx`
- `src/components/marketing/cta-section.tsx`
- `src/components/marketing/marketing-footer.tsx`
### Onboarding Components
- `src/components/onboarding/onboarding-layout.tsx` - shared layout for request access and activation flows
### Dashboard / Hexa Components
- `src/components/hexa/app-sidebar.tsx`
- `src/components/hexa/attendance-chart-card.tsx`
- `src/components/hexa/back-button.tsx`
- `src/components/hexa/checkin-list.tsx`
- `src/components/hexa/client-profile-context.tsx`
- `src/components/hexa/dashboard-shell.tsx`
- `src/components/hexa/data-table.tsx`
- `src/components/hexa/detail-panel.tsx`
- `src/components/hexa/filter-bar.tsx`
- `src/components/hexa/info-banner.tsx`
- `src/components/hexa/mobile-nav.tsx`
- `src/components/hexa/page-header.tsx`
- `src/components/hexa/page-skeleton.tsx`
- `src/components/hexa/pagination-bar.tsx`
- `src/components/hexa/post-card.tsx`
- `src/components/hexa/refresh-button.tsx`
- `src/components/hexa/revenue-chart-card.tsx`
- `src/components/hexa/sandbox-tour.tsx`
- `src/components/hexa/selectable-card.tsx`
- `src/components/hexa/site-header.tsx`
- `src/components/hexa/stat-card.tsx`
- `src/components/hexa/status-badge.tsx`
- `src/components/hexa/theme-toggle.tsx`
### Dashboard View Components
- `src/components/hexa/views/feed-view.tsx`
- `src/components/hexa/views/gym-plans-view.tsx`
- `src/components/hexa/views/payments-enablement-view.tsx`
- `src/components/hexa/views/placeholder-view.tsx`
- `src/components/hexa/views/plan-detail-panel.tsx`
- `src/components/hexa/views/plan-editor-dialog.tsx`
- `src/components/hexa/views/plan-management-view.tsx`
- `src/components/hexa/views/staff-view.tsx`
- `src/components/hexa/views/member-subscription-card.tsx`
### Dialog / Action Components
- `src/components/hexa/views/add-category-dialog.tsx`
- `src/components/hexa/views/add-group-members-dialog.tsx`
- `src/components/hexa/views/add-gym-plan-dialog.tsx`
- `src/components/hexa/views/create-feed-dialog.tsx`
- `src/components/hexa/views/member-form-dialog.tsx`
- `src/components/hexa/views/record-payment-dialog.tsx`
- `src/components/hexa/views/staff-form-dialog.tsx`
### Reusable UI Components
- `src/components/ui/alert-dialog.tsx`
- `src/components/ui/alert.tsx`
- `src/components/ui/avatar.tsx`
- `src/components/ui/badge.tsx`
- `src/components/ui/breadcrumb.tsx`
- `src/components/ui/button.tsx`
- `src/components/ui/calendar.tsx`
- `src/components/ui/card.tsx`
- `src/components/ui/chart.tsx`
- `src/components/ui/checkbox.tsx`
- `src/components/ui/combobox.tsx`
- `src/components/ui/command.tsx`
- `src/components/ui/dialog.tsx`
- `src/components/ui/dropdown-menu.tsx`
- `src/components/ui/empty.tsx`
- `src/components/ui/field.tsx`
- `src/components/ui/input-group.tsx`
- `src/components/ui/input-otp.tsx`
- `src/components/ui/input.tsx`
- `src/components/ui/label.tsx`
- `src/components/ui/pagination.tsx`
- `src/components/ui/popover.tsx`
- `src/components/ui/progress.tsx`
- `src/components/ui/radio-group.tsx`
- `src/components/ui/scroll-area.tsx`
- `src/components/ui/select.tsx`
- `src/components/ui/separator.tsx`
- `src/components/ui/sheet.tsx`
- `src/components/ui/sidebar.tsx`
- `src/components/ui/skeleton.tsx`
- `src/components/ui/sonner.tsx`
- `src/components/ui/spinner.tsx`
- `src/components/ui/switch.tsx`
- `src/components/ui/table.tsx`
- `src/components/ui/tabs.tsx`
- `src/components/ui/textarea.tsx`
- `src/components/ui/tooltip.tsx`
## Hooks and Client Utilities
### Hooks
- `src/hooks/use-mobile.ts` - mobile breakpoint helper
- `src/lib/use-media-query.ts` - media query hook
- `src/lib/use-fetch.ts` - lightweight async data fetching helper
### Utility / Support Files
- `src/lib/auth/token-service.ts` - local auth/session flag helpers
- `src/lib/format.ts` - formatting helpers for currency, dates, etc.
- `src/lib/nav.ts` - dashboard navigation config
- `src/lib/utils.ts` - shared utility helpers
- `src/lib/validation.ts` - validation and masking helpers for onboarding/activation
## Models / Types
- `src/lib/models/api.ts` - base API response types
- `src/lib/models/auth.ts` - auth request/result types
- `src/lib/models/activation.ts` - activation flow types
- `src/lib/models/attendance.ts` - attendance-related types
- `src/lib/models/customer.ts` - member and customer types
- `src/lib/models/feed.ts` - feed post types
- `src/lib/models/gym-plan.ts` - gym membership plan types
- `src/lib/models/invoice.ts` - invoice types
- `src/lib/models/onboarding.ts` - request-access and sandbox types
- `src/lib/models/payments-enablement.ts` - wallet, KYC, payout types
- `src/lib/models/plan.ts` - reusable workout/meal plan types
- `src/lib/models/profile.ts` - client profile types
- `src/lib/models/staff.ts` - staff types
- `src/lib/models/stats.ts` - dashboard stat types
- `src/lib/models/subscription.ts` - subscription and payment types
- `src/lib/models/ticket.ts` - support ticket types
## Public Assets
### Images
- `public/images/auth-bg.png`
- `public/images/gym-bg.png`
- `public/images/landing-hero.png`
- `public/images/logo.png`
- `public/images/hexa_Logo.png`
- `public/images/Hexa_Fitness.png`
- `public/images/hexa-Logo-white.png`
- `public/images/hexa-Logo-black.png`
- `public/images/mobile-bg.png`
### Other Public Files
- `public/file.svg`
- `public/globe.svg`
- `public/next.svg`
- `public/vercel.svg`
- `public/window.svg`
## Current Functional Areas
- Marketing website
- Authentication
- Request access onboarding
- Sandbox demo experience
- Gym activation workflow
- Dashboard overview analytics
- Attendance management
- Member management
- Membership / gym plan management
- Payments and invoices
- Workout plan management
- Meal plan management
- Staff management
- Feed / posts
- Ticketing / support
- Payout and wallet setup
- Reports
## Suggested Use Of This File
- Use this document as the first-stop project map for onboarding
- Update it when new routes, API modules, or components are added
- Keep API method names in sync with `src/lib/api/*`