This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
나들이 (nadeuri.today) — Real-time accessibility facility status monitoring for Seoul Metro. Tracks 9 types of accessibility facilities (elevators, escalators, moving walks, wheelchair lifts, safety boards, disabled restrooms, sign language phones, wheelchair chargers, mobility helpers) across 300+ stations on lines 1–9 and S-line.
cd web && npm install
npm run dev # Dev server on localhost:3000
npm run build # Static export to web/out/cd scripts && npm install
npm run collect # Collect real-time facility data
npm run collect-static # Collect static facility data (daily)
npm run build-latest # Aggregate into data/latest.json
npm run validate # Validate data integritySEOUL_API_KEY— Seoul Open Data API key (required for live data collection)RECAPTCHA_SECRET— reCAPTCHA v3 secret (contact form verification)
Seoul Open Data API → GitHub Actions (cron) → Node.js scripts → data/*.json → build-latest.js → data/latest.json → Next.js static site → GitHub Pages
- Real-time collection runs every 1.5 hours via GitHub Actions (
collect-realtime.yml) - Static facility data collected daily at 3:15 PM KST (
collect-static.yml) - Realtime data stored in
data/realtime/(overwritten on each collection) - Frontend reads
data/latest.json(aggregated snapshot)
- Next.js 14 with App Router, TypeScript, Tailwind CSS
- Static export (
output: 'export') deployed to GitHub Pages - Path alias:
@/*→src/* app/page.tsx— Main station list with search/filterapp/station/[code]/— Station detail page (dynamic route)lib/data.ts— Data fetching with cachinglib/stations.ts— Station metadata (names, lines, coordinates)lib/hangul.ts— Korean Hangul decomposition for search (supports chosung matching)lib/mock-data.ts— Mock data for development (toggled via DevSettingsPanel)types/index.ts— Core type definitions (FacilityStatus,FacilityType, etc.)
- ES modules (
"type": "module"in package.json) scripts/api/— One module per facility type (elevator.js, escalator.js, etc.)scripts/config/api-endpoints.json— API endpoint definitions with field mappingsscripts/api/client.js— HTTP client wrapper for Seoul Open Data API
- Google Apps Script deployed as web app
- reCAPTCHA v3 verification, honeypot, duplicate detection
- Stores submissions in Google Sheets
- Korean-first content: All UI text in Korean. Follow tone/voice guide in
docs/tone-voice-uiux-guide.md— "neighbor-like" warmth, clarity over formality. - Brand guidelines: Colors, typography in
docs/brand-identity-guidelines.md. Metro line colors defined inweb/tailwind.config.ts. - Facility statuses:
OPERATING | FAULT | MAINTENANCE | UNKNOWN - Facility types split: Real-time (
elevator,escalator,moving_walk,wheelchair_lift,safety_board) vs. Static (disabled_restroom,sign_language_phone,wheelchair_charger,helper) - Theme system: Light/dark via CSS variables and ThemeProvider component
- Mobile-first: TabBar for mobile navigation, responsive layouts