Skip to content

Repository files navigation

GuidePath

A Next-Generation Study Abroad Mentorship & Academic Networking Platform

Connecting prospective international students with verified university mentors for real-world admissions guidance, custom academic roadmaps, and community insights.

Next.js React TypeScript Tailwind CSS TanStack Query Zustand Framer Motion PostHog Vercel License: MIT


Architecture β€’ Engineering Highlights β€’ Tech Stack β€’ Project Structure β€’ Getting Started β€’ Static Analysis β€’ Deployment


GuidePath Hero & Discovery
πŸ“Έ Click to expand Application UI & Workflow Showcase (6 Screenshots)
GuidePath Explore & Filtering

Explore Guides β€” Multi-dimensional faceted filtering and responsive card grid


GuidePath Mentor Profile

Mentor Profile β€” Tabbed biography, chronological milestones roadmap, and expertise tags


GuidePath Direct Connect

Community Connection β€” Direct mentor engagement and Telegram channel bridge


GuidePath Authenticated Dashboard

Authenticated Dashboard β€” User status tracking, role identification, and community gateway


GuidePath Mobile Filter Drawer

Mobile Viewport β€” Spring-animated touch filter drawer with body scroll locking


GuidePath Dark Mode

Design System β€” HSL theme engine with zero-FOUC dark/light mode switching


πŸ› System Architecture

The following diagram illustrates the unidirectional data flow, reactive state containers, server cache management, transport abstraction, and client telemetry pipeline:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                             CLIENT BROWSER / USER                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                         β”‚
                                         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   NEXT.JS 16 APP ROUTER (REACT 19 SERVER/CLIENT)                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Landing & Discovery   β”‚ β”‚ Search & Exploration   β”‚ β”‚ Dashboard & Profile   β”‚  β”‚
β”‚  β”‚  app/page.tsx         β”‚ β”‚  app/explore/page.tsx  β”‚ β”‚  app/dashboard/       β”‚  β”‚
β”‚  β”‚  Hero, FeaturedGuides β”‚ β”‚  FilterSidebar, Grid   β”‚ β”‚  app/profile/[id]/    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚                           β”‚                           β”‚
             β–Ό                           β–Ό                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     UI & MOTION         β”‚ β”‚   CLIENT STATE (ZUSTAND)β”‚ β”‚  TELEMETRY (POSTHOG)    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Framer Motion 12  β”‚  β”‚ β”‚  β”‚ authStore (Persistβ”‚  β”‚ β”‚  β”‚ PostHogProvider    β”‚  β”‚
β”‚  β”‚ Spring Physics    β”‚  β”‚ β”‚  β”‚ Token & User Info)β”‚  β”‚ β”‚  β”‚ Route Pageviews    β”‚  β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚ β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚ β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚
β”‚  β”‚ Tailwind CSS 3.4  β”‚  β”‚ β”‚  β”‚ filterStore (URL) β”‚  β”‚ β”‚  β”‚ Analytics Events   β”‚  β”‚
β”‚  β”‚ CSS Custom Props  β”‚  β”‚ β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚ β”‚  β”‚ (Search, Funnel)   β”‚  β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚ β”‚  β”‚ toastStore (Queue)β”‚  β”‚ β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  β”‚ Radix UI Primitivesβ”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                         β”‚
                                         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 SERVER STATE & CACHE LAYER (TANSTACK QUERY V5)                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  useGuides() β€’ useGuide(id) β€’ useConnections() β€’ useRequestConnection()    β”‚  β”‚
β”‚  β”‚  Cache Policies (staleTime: 60s, Single Retry, Automated Invalidation)     β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                         β”‚
                                         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    API TRANSPORT & DUAL-MODE DISPATCH LAYER                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Axios Client (Interceptors: Bearer Auth Injection, 401 Session Handling)  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                      β”‚ [NEXT_PUBLIC_API_URL set]           β”‚ [Fallback / Local]  β”‚
β”‚                      β–Ό                                     β–Ό                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Production Backend REST API           β”‚  β”‚  Deterministic Mock Gateway    β”‚  β”‚
β”‚  β”‚  /api/guides β€’ /api/connections        β”‚  β”‚  Simulated Latency (600-800ms) β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  Local In-Memory Mutations     β”‚  β”‚
β”‚                                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

⚑ Key Architectural & Engineering Highlights

  • Decoupled Dual-Mode Transport Layer & Offline Mock Sandbox: API services in src/lib/api/guides.ts and src/lib/api/connections.ts implement transparent runtime duality. When NEXT_PUBLIC_API_URL is omitted, requests are fulfilled by a deterministic mock engine that simulates realistic network latency (600–800ms) and persists connection mutations in memory. This enables zero-backend local execution, rapid UI iteration, and isolated CI testing without mock servers.

  • Bidirectional Deep-Link State Synchronization: The faceted search engine in src/components/explore/FilterSidebar.tsx and src/lib/store/filterStore.ts bridges Next.js App Router query parameters (useSearchParams) with Zustand store state. Filters update the browser URL via shallow navigation (router.push(..., { scroll: false })), ensuring shareable search URLs, browser history preservation, and immediate state restoration on page reloads without unnecessary component remounts.

  • Concurrent-Safe Event Deduplication & Telemetry Latching: Telemetry tracking in src/components/explore/GuideGrid.tsx utilizes a ref-based execution latch (trackedRef) to guarantee idempotent PostHog search_executed event dispatches. This prevents redundant analytics calls during React 19 Concurrent Mode renders, filter transitions, and dynamic data re-fetches.

  • Hardened Edge Security Interceptors & Production Obfuscation: The Axios instance in src/lib/api/client.ts centralizes Bearer token injection from zustand/persist state and executes automated session invalidation on 401 Unauthorized responses. The edge perimeter is hardened via vercel.json with strict HTTP headers (X-Frame-Options: DENY, X-Content-Type-Options: nosniff, X-XSS-Protection), while next.config.ts strips framework identification headers (poweredByHeader: false) and suppresses production source maps to shield proprietary code in developer tools.


πŸ›  Tech Stack

Layer / Domain Technologies / Version Description / Purpose
Framework & Core Next.js 16.1.6 β€’ React 19.2.3 App Router architecture, React Server Components, Suspense boundaries, and zero-bundle layouts.
Language & Typing TypeScript 5.x Strict type checking, domain models, generic API wrappers, and type-safe schema resolvers.
Server State & Caching @tanstack/react-query 5.90.21 Declarative asynchronous queries, optimistic mutations, automatic query cache invalidation.
Client State Management Zustand 5.0.11 Atomic stores with persist middleware for session auth, multi-facet filtering, and toast queues.
Styling & Design System Tailwind CSS 3.4.19 β€’ next-themes Utility-first CSS engine, HSL CSS Custom Properties, and zero-FOUC dark/light theme switching.
Motion & Micro-Interactions Framer Motion 12.34.3 Layout animations, spring transitions, morphing navigation pills, and interactive tab switches.
Form Management & Schema React Hook Form 7.71.2 β€’ Zod 4.3.6 High-performance uncontrolled form inputs paired with type-inferred validation schemas.
Network & Transport Axios 1.13.5 Centralized HTTP client configured with Bearer token injection, request logging, and 401 error handlers.
Telemetry & Analytics PostHog JS 1.355.0 Client-side privacy-first telemetry with route-change tracking and customized conversion funnels.
Icons & Design Tokens Lucide React 0.575.0 Accessible tree-shakeable SVG icon primitives.
Edge Deployment & Hosting Vercel Edge network delivery, HTTP response header hardening, and API rewrite routing.

πŸ“ Project Structure

guidepath/
β”œβ”€β”€ public/                         # Static assets and vector illustrations
β”‚   β”œβ”€β”€ favicon.ico                 # Application favicon
β”‚   └── placeholder.svg             # Asset fallback graphics
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                        # Next.js App Router (Pages, Layouts, Routing boundaries)
β”‚   β”‚   β”œβ”€β”€ auth/                   # Authentication route group
β”‚   β”‚   β”‚   β”œβ”€β”€ login/page.tsx      # Sign-in page with credential authentication
β”‚   β”‚   β”‚   └── signup/page.tsx     # Sign-up page with role selection (Seeker / Guide)
β”‚   β”‚   β”œβ”€β”€ dashboard/page.tsx      # Authenticated user dashboard & community portal
β”‚   β”‚   β”œβ”€β”€ explore/page.tsx        # Guide discovery page with Suspense loading boundaries
β”‚   β”‚   β”œβ”€β”€ profile/[id]/page.tsx   # Dynamic mentor profile route with tabbed views
β”‚   β”‚   β”œβ”€β”€ globals.css             # HSL color variables, typography, and glass utilities
β”‚   β”‚   β”œβ”€β”€ icon.svg                # Vector brand application icon
β”‚   β”‚   β”œβ”€β”€ layout.tsx              # Root HTML shell with provider tree & font injection
β”‚   β”‚   └── page.tsx                # Marketing landing page with modular sections
β”‚   β”œβ”€β”€ components/                 # Reusable component architecture
β”‚   β”‚   β”œβ”€β”€ explore/                # Discovery & filter components
β”‚   β”‚   β”‚   β”œβ”€β”€ FilterSidebar.tsx   # Responsive desktop sidebar and mobile filter drawer
β”‚   β”‚   β”‚   └── GuideGrid.tsx       # Animated grid with Skeleton loaders and empty states
β”‚   β”‚   β”œβ”€β”€ landing/                # Conversion-oriented landing sections
β”‚   β”‚   β”‚   β”œβ”€β”€ CTASection.tsx      # Call-to-action banner
β”‚   β”‚   β”‚   β”œβ”€β”€ FeaturedGuides.tsx  # Curated mentor highlight section
β”‚   β”‚   β”‚   β”œβ”€β”€ Hero.tsx            # Hero value proposition with quick-action links
β”‚   β”‚   β”‚   └── HowItWorks.tsx      # 3-step platform journey visualizer
β”‚   β”‚   β”œβ”€β”€ layout/                 # Layout structure components
β”‚   β”‚   β”‚   β”œβ”€β”€ Footer.tsx          # Site footer with social links & copyright
β”‚   β”‚   β”‚   β”œβ”€β”€ Navbar.tsx          # Glassmorphic header with spring-animated active pills
β”‚   β”‚   β”‚   └── Sidebar.tsx         # Collapsible dashboard navigation
β”‚   β”‚   β”œβ”€β”€ profile/                # Mentor profile detail components
β”‚   β”‚   β”‚   β”œβ”€β”€ ProfileCard.tsx     # Mentor overview card with status badges and flags
β”‚   β”‚   β”‚   └── ProfileDetail.tsx   # Tabbed view (Bio, Roadmap Milestones, Expertise)
β”‚   β”‚   └── ui/                     # Primitives & design system elements
β”‚   β”‚       β”œβ”€β”€ Avatar.tsx          # Resilient avatar with image fallback handling
β”‚   β”‚       β”œβ”€β”€ Badge.tsx           # Semantic status and tag pills
β”‚   β”‚       β”œβ”€β”€ Button.tsx          # Polymorphic button primitive with variant styling
β”‚   β”‚       β”œβ”€β”€ Input.tsx           # Accessible form input with focus ring tokens
β”‚   β”‚       β”œβ”€β”€ Logo.tsx            # Dynamic SVG brand mark
β”‚   β”‚       β”œβ”€β”€ Modal.tsx           # Accessible dialog overlay with Framer Motion transitions
β”‚   β”‚       β”œβ”€β”€ Skeleton.tsx        # Pulse-animated loading placeholder primitive
β”‚   β”‚       β”œβ”€β”€ ThemeToggle.tsx     # Theme switcher with smooth icon morphing
β”‚   β”‚       └── Toast.tsx           # Global notification toast container and render items
β”‚   β”œβ”€β”€ lib/                        # Core utilities, API clients, stores, and hooks
β”‚   β”‚   β”œβ”€β”€ analytics/              # Telemetry tracking modules
β”‚   β”‚   β”‚   └── events.ts           # Type-safe PostHog custom funnel event definitions
β”‚   β”‚   β”œβ”€β”€ api/                    # HTTP and data transport layer
β”‚   β”‚   β”‚   β”œβ”€β”€ client.ts           # Configured Axios instance with request/response interceptors
β”‚   β”‚   β”‚   β”œβ”€β”€ connections.ts      # Connection request endpoints with dual-mode mock fallback
β”‚   β”‚   β”‚   └── guides.ts           # Mentor query endpoints with simulated latency filtering
β”‚   β”‚   β”œβ”€β”€ hooks/                  # Custom React hooks & React Query wrappers
β”‚   β”‚   β”‚   β”œβ”€β”€ useConnections.ts   # TanStack Query hook for connection requests and mutations
β”‚   β”‚   β”‚   └── useGuides.ts        # TanStack Query hooks for mentor listing and detail retrieval
β”‚   β”‚   β”œβ”€β”€ mock/                   # In-memory deterministic mock datasets
β”‚   β”‚   β”‚   └── data.ts             # Comprehensive mentor profiles, roadmaps, and connections
β”‚   β”‚   β”œβ”€β”€ store/                  # Zustand reactive state stores
β”‚   β”‚   β”‚   β”œβ”€β”€ authStore.ts        # Persistent authentication store with local storage sync
β”‚   β”‚   β”‚   β”œβ”€β”€ filterStore.ts      # Multi-facet search and filter state
β”‚   β”‚   β”‚   └── toastStore.ts       # Global notification queue and auto-dismiss dispatcher
β”‚   β”‚   β”œβ”€β”€ utils/                  # Shared helper functions
β”‚   β”‚   β”‚   β”œβ”€β”€ cn.ts               # ClassName merge utility (`clsx` + `tailwind-merge`)
β”‚   β”‚   β”‚   └── formatters.ts       # Date, string, and number formatting utilities
β”‚   β”‚   └── constants.ts            # Global application constants and external links
β”‚   β”œβ”€β”€ providers/                  # Client-side React context providers
β”‚   β”‚   β”œβ”€β”€ PostHogProvider.tsx     # Analytics provider with route-change tracking
β”‚   β”‚   β”œβ”€β”€ QueryProvider.tsx       # TanStack Query client provider with caching defaults
β”‚   β”‚   └── ThemeProvider.tsx       # `next-themes` dark/light mode context wrapper
β”‚   └── types/                      # TypeScript type declarations and domain models
β”‚       β”œβ”€β”€ api.ts                  # Query filter contracts and API response envelopes
β”‚       β”œβ”€β”€ connection.ts           # Mentorship connection data structures
β”‚       β”œβ”€β”€ guide.ts                # Guide entity, roadmap milestones, and detail schemas
β”‚       β”œβ”€β”€ message.ts              # Direct messaging contracts
β”‚       └── user.ts                 # User identity and profile contracts
β”œβ”€β”€ .gitignore                      # Git exclusion rules
β”œβ”€β”€ .prettierrc                     # Prettier formatting specifications
β”œβ”€β”€ eslint.config.mjs               # ESLint configuration with Next.js rules
β”œβ”€β”€ next.config.ts                  # Next.js build configuration and header hardening
β”œβ”€β”€ package.json                    # Project manifests, scripts, and runtime dependencies
β”œβ”€β”€ pnpm-lock.yaml                  # Deterministic dependency lockfile
β”œβ”€β”€ pnpm-workspace.yaml             # Workspace boundary definition
β”œβ”€β”€ postcss.config.mjs              # PostCSS plugins configuration
β”œβ”€β”€ tailwind.config.ts              # Tailwind CSS theme extensions and design tokens
β”œβ”€β”€ tsconfig.json                   # TypeScript compiler options (Strict mode, path aliases)
└── vercel.json                     # Edge deployment rules, security headers, and API rewrites

πŸš€ Getting Started

Prerequisites

  • Node.js: v18.17.0+ (or v20.x LTS recommended)
  • Package Manager: npm, pnpm (v9.x), or yarn

Environment Configuration

Create a .env.local file in the project root:

# Backend REST API URL (leave blank to run in full offline mock sandbox mode)
NEXT_PUBLIC_API_URL=http://localhost:3001

# PostHog Telemetry (Optional)
NEXT_PUBLIC_POSTHOG_KEY=
NEXT_PUBLIC_POSTHOG_HOST=https://app.posthog.com

Installation & Development

  1. Clone the repository:

    git clone https://github.com/adiletbtrv/GuidePath.git
    cd GuidePath
  2. Install dependencies:

    npm install
    # or with pnpm:
    pnpm install
  3. Launch the development server:

    npm run dev
    # or with pnpm:
    pnpm dev
  4. Access the application: Open http://localhost:3000 in your browser.


πŸ” Static Analysis & Type Verification

GuidePath utilizes TypeScript strict typing and ESLint Next.js standards to guarantee code correctness, type safety, and runtime stability.

Run the static analysis checks locally:

# 1. Type verification without emitting compilation artifacts
npx tsc --noEmit

# 2. Code formatting and linting rules inspection
npm run lint

# 3. Production bundle compilation and asset optimization check
npm run build

🌐 Deployment

Vercel Deployment (Recommended)

  1. Connect the GitHub repository to Vercel.
  2. Configure the build environment:
    • Framework Preset: Next.js
    • Root Directory: ./
    • Build Command: npm run build (or pnpm build)
    • Output Directory: .next
  3. Add environment variables (NEXT_PUBLIC_API_URL, NEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_POSTHOG_HOST).
  4. Click Deploy.

Production Hardening

  • Security Headers: vercel.json injects X-Content-Type-Options: nosniff, X-Frame-Options: DENY, and X-XSS-Protection: 1; mode=block across all routes.
  • Server Identity Masking: next.config.ts explicitly sets poweredByHeader: false to strip the X-Powered-By: Next.js fingerprint and disables client-accessible production source maps (productionBrowserSourceMaps: false).

πŸ“œ License & Author

Distributed under the MIT License. See LICENSE for more information.

Author: Adilet Batyrov β€’ Connect on LinkedIn

About

Study abroad mentorship and academic networking platform built with Next.js 16 App Router, React 19, TypeScript, TanStack Query v5, Zustand, and Framer Motion.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages