Page Deduplication Center

Identify and resolve redundant pages one-by-one

Groups Resolved0 / 6
How to use: For each duplicate group below, review both pages using "View Page". Click "Delete This" on the page you want to remove. The system will record your decision and mark which page becomes the primary route. Work through groups one at a time.
Coach

Coach Schedule Views

Two separate pages both showing a coach's upcoming schedule blocks/lessons. One uses the legacy Lesson entity; the other uses the newer ScheduleBlock (SSOT) entity.

Candidate for Deletion

CoachSchedule

Lesson

Legacy schedule view — reads from the Lesson entity. Uses list + calendar toggle. Has Stripe onboarding banner. Older architecture.

Referenced By

Layout sidebar nav (Coach role)
Recommended to Keep

CoachScheduleView

ScheduleBlock

Newer schedule view — reads from ScheduleBlock (SSOT). Shows today's blocks + upcoming. Has 'Log Lesson' modal. Aligned with SSOT architecture.

Referenced By

Direct URL navigation

Recommendation: Keep CoachScheduleView (SSOT). Reassign all nav links pointing to CoachSchedule → CoachScheduleView, then delete CoachSchedule.

Public / Parent

Coach Search / Discovery

Two pages let parents browse and search for coaches. They have near-identical UI but different data-loading strategies and trust signal support.

Candidate for Deletion

PublicCoachSearch

Coach + User (direct)

Older version — fetches coaches directly via Coach + User entities. No trust badges. Fewer filters. Uses lime-green 'View Profile' buttons.

Referenced By

Some direct links
Recommended to Keep

FindCoaches

getPublicCoaches fn + TrustProfile

Newer version — uses getPublicCoaches backend function. Shows TrustBadge/TrustScore. Has distance, rating, and clear-location filters. More complete.

Referenced By

Layout navCoachProfile back buttonCoachPublicProfile CTA

Recommendation: Keep FindCoaches (more features + trust signals). Update any links pointing to PublicCoachSearch → FindCoaches, then delete PublicCoachSearch.

Public / Parent

Coach Profile Pages

Two pages display a coach's full profile. One is accessed by ID (internal), the other by slug (public URL sharing). Both use getPublicCoachData.

Recommended to Keep

CoachProfile (by ID)

getPublicCoachData fn

Internal profile view — loaded by ?id=. Has tab layout (About, Skills, Reviews, Packages). Full booking/message sidebar. Used throughout the platform internally.

Referenced By

FindCoachesPublicCoachSearchHome featured sectionSearch results
Specialized / Evaluate

CoachPublicProfile (by slug)

CoachPage + getPublicCoachData fn

Public landing page — loaded by ?slug=. Uses CoachPage entity to resolve slug→coachId. Hero section design, availability mockup, contact form. More marketing-focused.

Referenced By

CoachPagePublicExternal share links

Recommendation: These serve different entry points (ID vs slug). Consider merging slug resolution into CoachProfile. If slug-based public pages are needed, keep CoachPublicProfile for that purpose only and delete otherwise.

Gym Owner

Gym Dashboards

Two gym owner dashboards. One is a financial/location overview; the other is a live daily operations grid. They link to each other but overlap in purpose.

Recommended to Keep

GymDashboard

Gym, GymLocation, Lesson, CoachGymAssignment

Main gym owner hub — shows revenue stats, locations table, coach list, AI enrichment, fee structure. Heavy data focus. Links to GymOperationsDashboard.

Referenced By

Home (Gym Owner redirect)Layout sidebarGymOperationsDashboard header
Recommended to Keep

GymOperationsDashboard

ScheduleBlock, CoachGymAssignment

Daily schedule grid — staff blocks for the current day. Drag-and-drop scheduling. Live metrics (active sessions, revenue). Focused on real-time ops.

Referenced By

GymDashboard 'Operations' button

Recommendation: These serve genuinely different purposes (financials vs live ops). Recommend keeping both but clarifying navigation. Evaluate whether GymOperationsDashboard overlaps with GymLessons.

Gym Owner / Admin

Private Lesson Tracking

Two pages manage private lessons for gym owners — both read from ScheduleBlock as SSOT but differ in focus (tracker vs full calendar).

Recommended to Keep

GymLessons

ScheduleBlock (SSOT)

Full-featured lesson manager — has master calendar view, list view, add/edit/soft-delete blocks, search, location/coach filters. Rich UI with BlockEditDialog.

Referenced By

Layout sidebar (Gym Owner)
Recommended to Keep

PrivateLessonTracker

ScheduleBlock (SSOT)

Payroll-oriented tracker — shows pending/processed blocks, batch status updates, CSV export, log tab. Focused on end-of-period payroll processing.

Referenced By

Layout sidebar (Gym Owner)

Recommendation: These are complementary, not duplicates — GymLessons is day-to-day scheduling; PrivateLessonTracker is payroll processing. Keep both. Consider merging into tabs if the sidebar is too crowded.

Admin

Admin Reports / Export

Two admin reporting pages — one is a full analytics dashboard with charts; the other is a minimal CSV export utility.

Recommended to Keep

AdminReports

User, Coach, Lesson, Review

Full analytics dashboard — metrics cards, daily activity line chart, monthly revenue bar chart, user growth, lesson type pie chart, top coaches table. Has inline CSV export.

Referenced By

Layout sidebar (Admin)Home admin quick actions
Candidate for Deletion

AdminReportsExport

exportReportCSV fn (raw fetch)

Minimal export utility — 4 report type cards + date range picker + single export button. Uses raw fetch() call (not SDK). Thin wrapper over exportReportCSV function.

Referenced By

Possibly direct URL

Recommendation: Keep AdminReports (more complete). The export functionality already exists inside AdminReports. Delete AdminReportsExport — or absorb its date-range export UI into AdminReports as an enhancement.