CariGPX
CariGPX is a modern web application designed for outdoor enthusiasts—hikers, cyclists, and runners—to upload, visualize, and share their GPS tracks. Unlike standard tracking apps, CariGPX focuses on data ownership, privacy controls, and high-performance rendering of geospatial data.
The system is architected as a decoupled full-stack solution, leveraging the raw performance of Go for heavy data processing and the reactivity of Nuxt 3 for a seamless user interface.
🛠 Tech Stack
Backend (API)
- Language: Go (Golang)
- Routing:
chirouter for lightweight, idiomatic HTTP handling. - Auth: JWT (JSON Web Tokens) with a 7-day expiry window.
- Data Processing: Custom GPX parsing and GeoJSON conversion.
Frontend (Client)
- Framework: Nuxt 3 (Vue 3 + TypeScript).
- Styling: Tailwind CSS (Headless UI components).
- Visualization: Leaflet for track rendering and interactive elevation charts.
🚀 Key Features
1. Advanced Track Management & Privacy
A core requirement was granular privacy control. Users can set their tracks to three distinct visibility levels:
- Public: Indexed in the global catalog and sitemap for SEO.
- Unlisted: Accessible only via a unique shared link (UUID/Token).
- Private: Visible exclusively to the owner.
2. Instant Visualization
The platform features a "Parse-First" approach. The frontend creates an immediate client-side visualization of the GPX file before final storage, providing instant feedback on elevation, distance, and moving time.
- Endpoint:
POST /api/parsehandles statistical analysis without requiring database persistence.
3. Explore & Discovery
The Explore page allows users to browse public tracks using advanced filtering:
- Filter by Activity Type (Hiking, Cycling).
- Sort by Elevation Gain, Distance, or Recency.
- Geospatial search by location (Provinces/Cities).
4. Internationalization (i18n)
To support a diverse community of outdoor enthusiasts, the application is fully internationalized. Users can seamlessly toggle between languages, ensuring the interface and track data are accessible to a global audience.
5. Admin & Moderation System
To maintain platform quality, a Role-Based Access Control (RBAC) system is implemented:
- Moderators: Can view audit logs (
GET /tracks/{id}/logs), and update or delete problematic tracks. - Admins: Have full control over user management, including promoting/demoting users and syncing track data.
🏗 Architecture Highlights
The API Strategy
The backend is structured around a RESTful philosophy, with distinct resource groups for Tracks, Authentication, and Administration.
- Health & SEO: Dedicated endpoints for health checks (
/health) and dynamic sitemap generation (/api/sitemap.xml) ensuring the Single Page Application (SPA) remains search-engine friendly. - Batch Operations: The API supports batch deletion of tracks to improve user experience in the dashboard.
Frontend Component Design
The Nuxt 3 application utilizes a modular component strategy to maintain code reusability:
TrackCard: A shared component for displaying track summaries in grids (Home, Explore, Dashboard).TrackViewer: The core visualization engine used in both the upload preview and the detailed track view.UiModal/UiButton: A consistent design system using Headless UI patterns.
📸 Usage Flows
Guest vs. Authenticated
- Guests can upload public tracks immediately or explore the catalog.
- Registered Users gain access to a personal Dashboard, where they can manage their uploaded history, batch delete tracks, and edit metadata (titles, descriptions, location tags).
Account Security
The system implements a robust authentication flow including email confirmation, password resets via token, and profile management (password changes/updates).
