2.9 KiB
2.9 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Development Commands
- Development server:
npm run dev- Starts Next.js development server on http://localhost:3000 - Build:
npm run build- Creates production build - Production server:
npm run start- Starts production server (requires build first) - Lint:
npm run lint- Runs Next.js ESLint checks
High-Level Architecture
This is a Next.js 15 application built with React 19 that creates an interactive map visualization with a custom WebGL timeline component.
Core Architecture Components
Map System:
- Uses MapLibre GL JS for interactive mapping
app/map-context.tsxprovides global map state management via React Contextcomponents/map-component.tsxhandles map rendering and initialization- Default map center: Singapore (103.851959, 1.290270) at zoom level 11
- Custom map style from MapTiler API
Timeline Visualization:
app/timeline.tsxis a complex WebGL-powered timeline component using custom shaders- Uses vesica piscis (lens-shaped) geometry rendered via WebGL2
- Custom GLSL shaders in
app/glsl/timeline/for vertex and fragment processing - Supports interactive features: dragging, zooming, panning, custom time markers
- Dual-canvas architecture: WebGL canvas for vesica shapes, 2D canvas overlay for UI elements
UI Framework:
- Tailwind CSS with Radix UI components
- Theme system with dark/light mode support via
components/theme-provider.tsx - shadcn/ui component library in
components/ui/ - Sidebar layout using
components/ui/sidebar.tsx
Key Technical Details
WebGL Timeline:
- Renders vesica piscis shapes as timeline markers
- Supports high-DPI displays with proper pixel ratio handling
- Interactive controls for zoom (mouse wheel), pan (drag), and custom time selection
- Real-time shader uniform updates for responsive interactions
State Management:
- Map state centralized in
MapProvidercontext - Timeline uses internal React state with refs for performance-critical interactions
- Custom hooks in
hooks/for map location, zoom, timeline, and mobile detection
Styling:
- Tailwind CSS v4 with PostCSS
- Custom animations via
tw-animate-css - Component styling via
class-variance-authorityandclsx
Build Configuration:
- Next.js 15 with App Router
- Custom webpack config for GLSL file loading via
raw-loader - TypeScript with strict mode enabled
- Absolute imports using
@/*path mapping
File Structure Notes
app/- Next.js App Router pages and componentscomponents/- Reusable React componentshooks/- Custom React hookslib/- Utility functionstypes/- TypeScript type definitionspublic/- Static assets
The application combines modern web mapping with custom WebGL visualization to create an interactive timeline-driven map interface.