15 KiB
15 KiB
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 servernpm run build- production buildnpm run start- run production servernpm run lint- run ESLint
App Structure
Root App Files
src/app/layout.tsx- global layout, fonts, theme provider, tooltip provider, toast providersrc/app/globals.css- global stylingsrc/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 inDashboardShellsrc/app/dashboard/loading.tsx- dashboard loading statesrc/app/dashboard/attendance/loading.tsxsrc/app/dashboard/feed/loading.tsxsrc/app/dashboard/members/loading.tsxsrc/app/dashboard/memberships/loading.tsxsrc/app/dashboard/meal-plans/loading.tsxsrc/app/dashboard/payments/loading.tsxsrc/app/dashboard/payouts/loading.tsxsrc/app/dashboard/reports/loading.tsxsrc/app/dashboard/staff/loading.tsxsrc/app/dashboard/tickets/loading.tsxsrc/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
/loginwhen session refresh fails ApiErrorhandling- shared helpers:
findField,refreshSession
- centralized
Auth APIs
src/lib/api/auth.tslogin(request)- login user and extract access/refresh token fields
src/lib/api/session.tslogout()- clear server cookies and local auth flagrefreshSession()- re-exported refresh helper
Onboarding / Activation APIs
src/lib/api/onboarding.tscheckMobileNumber(request)- check if onboarding already existssendMobileOtp(request)- send request-access OTPverifyMobileOtp(request)- verify request-access OTPcreateOnboardingRequest(requestAccessToken, request)- submit gym onboarding requestgetSandboxStatus(sandboxToken)- fetch demo/sandbox statusupdateSandboxProgress(sandboxToken, update)- track sandbox usage/tour progress
src/lib/api/activation.tssendActivationEmailOtp(token, request)- send activation email OTPverifyActivationEmailOtp(token, request)- verify activation email OTPuploadNic(token, nicNumber, frontImage, backImage)- upload identity documentsupdateGymProfile(token, request)- save gym profile infosetPaymentMethod(token, request)- save activation payment methodchargeAndActivate(token)- finalize activationgetActivationChecklist(token)- fetch post-activation checklist
Dashboard Business APIs
src/lib/api/profile.tsgetMyProfile()- fetch logged-in client profile
src/lib/api/stats.tsgetStatSummary()- dashboard summary statsgetMonthlyRevenue()- revenue chart datagetRecentPayments()- recent payment listgetRecentAttendance()- recent attendance list
src/lib/api/attendance.tsgetAllAttendance()- full attendance recordsgetTodayAttendance()- today check-insgetAttendanceCounts(fromDate, toDate)- aggregated attendance counts
src/lib/api/customers.tsgetMembers()- list members with subscriptionsgetMember(customerId)- member detailcreateMember(input)- add memberupdateMember(customerId, input)- edit memberdeleteMember(customerId)- remove member
src/lib/api/gym-plans.tsgetGymPlans(includeInactive)- list gym membership plansgetGymPlan(id)- single gym plancreateGymPlan(input)- create gym planupdateGymPlan(id, input)- update gym plandeleteGymPlan(id, hard)- delete or soft delete plan
src/lib/api/subscriptions.tsgetSubscription(id)- subscription summarygetSubscriptionPayments(id)- subscription payment historyrecordSubscriptionPayment(id, input)- add payment to subscriptionaddSubscriptionMember(id, customerId)- attach member to subscriptionremoveSubscriptionMember(id, subscriptionMemberId)- remove member from subscription
src/lib/api/invoices.tsgetMemberInvoices()- list invoicesgetMemberInvoice(id)- invoice detail
src/lib/api/payments-enablement.tsgetPaymentTracks()- available payout/payment tracksselectPaymentTrack(request)- choose a payment tracksubmitPayoutKyc(brCertificate, bankProof)- upload payout KYC docsgetKycStatus()- read KYC stategetWallet()- wallet summarygetPayoutSchedule()- payout schedule data
src/lib/api/staff.tsgetStaff()- list staffgetStaffMember(staffId)- single staff membercreateStaff(input)- create staff memberupdateStaff(staffId, input)- update staffdeleteStaff(staffId, softDelete)- delete staff member
src/lib/api/feed.tsgetFeed()- list feed postscreateFeedPost(input)- create postdeleteFeedPost(postId)- delete postlikePost(postId)- like postunlikePost(postId)- unlike postisPostLiked(postId)- fetch current user like state
src/lib/api/tickets.tsgetTickets()- list support ticketsgetTicket(id)- ticket detailgetTicketCategories()- support categoriescreateTicket(mainReason, ticketCategoryId)- open ticketsendTicketMessage(id, message)- add ticket messagesubmitTicketFeedback(id, rating, feedback)- submit support feedbackcloseTicket(id)- close ticketdeleteTicket(id)- delete ticket
Plan APIs
src/lib/api/workout-plans.tsgetWorkoutPlans()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.tsgetMealPlans()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.tsxsrc/components/marketing/hero-section.tsxsrc/components/marketing/features-section.tsxsrc/components/marketing/cta-section.tsxsrc/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.tsxsrc/components/hexa/attendance-chart-card.tsxsrc/components/hexa/back-button.tsxsrc/components/hexa/checkin-list.tsxsrc/components/hexa/client-profile-context.tsxsrc/components/hexa/dashboard-shell.tsxsrc/components/hexa/data-table.tsxsrc/components/hexa/detail-panel.tsxsrc/components/hexa/filter-bar.tsxsrc/components/hexa/info-banner.tsxsrc/components/hexa/mobile-nav.tsxsrc/components/hexa/page-header.tsxsrc/components/hexa/page-skeleton.tsxsrc/components/hexa/pagination-bar.tsxsrc/components/hexa/post-card.tsxsrc/components/hexa/refresh-button.tsxsrc/components/hexa/revenue-chart-card.tsxsrc/components/hexa/sandbox-tour.tsxsrc/components/hexa/selectable-card.tsxsrc/components/hexa/site-header.tsxsrc/components/hexa/stat-card.tsxsrc/components/hexa/status-badge.tsxsrc/components/hexa/theme-toggle.tsx
Dashboard View Components
src/components/hexa/views/feed-view.tsxsrc/components/hexa/views/gym-plans-view.tsxsrc/components/hexa/views/payments-enablement-view.tsxsrc/components/hexa/views/placeholder-view.tsxsrc/components/hexa/views/plan-detail-panel.tsxsrc/components/hexa/views/plan-editor-dialog.tsxsrc/components/hexa/views/plan-management-view.tsxsrc/components/hexa/views/staff-view.tsxsrc/components/hexa/views/member-subscription-card.tsx
Dialog / Action Components
src/components/hexa/views/add-category-dialog.tsxsrc/components/hexa/views/add-group-members-dialog.tsxsrc/components/hexa/views/add-gym-plan-dialog.tsxsrc/components/hexa/views/create-feed-dialog.tsxsrc/components/hexa/views/member-form-dialog.tsxsrc/components/hexa/views/record-payment-dialog.tsxsrc/components/hexa/views/staff-form-dialog.tsx
Reusable UI Components
src/components/ui/alert-dialog.tsxsrc/components/ui/alert.tsxsrc/components/ui/avatar.tsxsrc/components/ui/badge.tsxsrc/components/ui/breadcrumb.tsxsrc/components/ui/button.tsxsrc/components/ui/calendar.tsxsrc/components/ui/card.tsxsrc/components/ui/chart.tsxsrc/components/ui/checkbox.tsxsrc/components/ui/combobox.tsxsrc/components/ui/command.tsxsrc/components/ui/dialog.tsxsrc/components/ui/dropdown-menu.tsxsrc/components/ui/empty.tsxsrc/components/ui/field.tsxsrc/components/ui/input-group.tsxsrc/components/ui/input-otp.tsxsrc/components/ui/input.tsxsrc/components/ui/label.tsxsrc/components/ui/pagination.tsxsrc/components/ui/popover.tsxsrc/components/ui/progress.tsxsrc/components/ui/radio-group.tsxsrc/components/ui/scroll-area.tsxsrc/components/ui/select.tsxsrc/components/ui/separator.tsxsrc/components/ui/sheet.tsxsrc/components/ui/sidebar.tsxsrc/components/ui/skeleton.tsxsrc/components/ui/sonner.tsxsrc/components/ui/spinner.tsxsrc/components/ui/switch.tsxsrc/components/ui/table.tsxsrc/components/ui/tabs.tsxsrc/components/ui/textarea.tsxsrc/components/ui/tooltip.tsx
Hooks and Client Utilities
Hooks
src/hooks/use-mobile.ts- mobile breakpoint helpersrc/lib/use-media-query.ts- media query hooksrc/lib/use-fetch.ts- lightweight async data fetching helper
Utility / Support Files
src/lib/auth/token-service.ts- local auth/session flag helperssrc/lib/format.ts- formatting helpers for currency, dates, etc.src/lib/nav.ts- dashboard navigation configsrc/lib/utils.ts- shared utility helperssrc/lib/validation.ts- validation and masking helpers for onboarding/activation
Models / Types
src/lib/models/api.ts- base API response typessrc/lib/models/auth.ts- auth request/result typessrc/lib/models/activation.ts- activation flow typessrc/lib/models/attendance.ts- attendance-related typessrc/lib/models/customer.ts- member and customer typessrc/lib/models/feed.ts- feed post typessrc/lib/models/gym-plan.ts- gym membership plan typessrc/lib/models/invoice.ts- invoice typessrc/lib/models/onboarding.ts- request-access and sandbox typessrc/lib/models/payments-enablement.ts- wallet, KYC, payout typessrc/lib/models/plan.ts- reusable workout/meal plan typessrc/lib/models/profile.ts- client profile typessrc/lib/models/staff.ts- staff typessrc/lib/models/stats.ts- dashboard stat typessrc/lib/models/subscription.ts- subscription and payment typessrc/lib/models/ticket.ts- support ticket types
Public Assets
Images
public/images/auth-bg.pngpublic/images/gym-bg.pngpublic/images/landing-hero.pngpublic/images/logo.pngpublic/images/hexa_Logo.pngpublic/images/Hexa_Fitness.pngpublic/images/hexa-Logo-white.pngpublic/images/hexa-Logo-black.pngpublic/images/mobile-bg.png
Other Public Files
public/file.svgpublic/globe.svgpublic/next.svgpublic/vercel.svgpublic/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/*