How pppp575/halfway works
Halfway is a daily geography game: players choose the great-circle halfway point for five city-pair rounds, then see the route and score. The browser game coordinates daily or practice puzzles, map interaction, scoring, saved progress, and optional online results. Its documented capabilities also include archives, hard mode, achievements, sharing, daily and all-time leaderboards, and private leagues. The main flow and several dependencies are visible in excerpts and the source index; unsampled feature wiring is shown only where documented or explicitly referenced.
Main entry points: game.js Game coordinator · puzzles.js Puzzle generation · map.js Interactive map · backend.js Backend client
Components 21
Game play
- App entry
src/main.js - Game coordinator
src/game.js
Puzzle domain
- City dataset
src/data/cities.js - Daily schedule
src/data/schedule.json - Puzzle generation
src/lib/puzzles.js - Date and archive rules
src/lib/dates.js - Geographic calculations
src/lib/geo.js - Deterministic random
src/lib/random.js - Game constants
src/lib/constants.js - Scoring
src/lib/scoring.js - Achievements
src/lib/achievements.js - Player callsigns
src/lib/callsigns.js
Interface
- Interactive map
src/ui/map.js - Scoreboard flaps
src/ui/flaps.js - Leaderboard and leagues UI
src/ui/board.js - Share card
src/ui/shareCard.js
Persistence and services
- Local save store
src/lib/storage.js - Backend client
src/services/backend.js - Ad integration
src/services/ads.js
Other components
- Player
- Supabase service
Connections 25
- Player → App entry: opens game
README.md - App entry → Game coordinator: starts
src/main.js - Game coordinator → Puzzle generation: builds rounds
src/game.js - Game coordinator → City dataset: uses city data
src/game.js - Game coordinator → Daily schedule: reads schedule
src/game.js - Game coordinator → Date and archive rules: resolves game day
src/game.js - Puzzle generation → City dataset: selects pairs
src/lib/puzzles.js - Puzzle generation → Date and archive rules: checks schedule day
src/lib/puzzles.js - Puzzle generation → Geographic calculations: filters routes
src/lib/puzzles.js - Puzzle generation → Deterministic random: seeds generation
src/lib/puzzles.js - Puzzle generation → Game constants: uses round count
src/lib/puzzles.js - Game coordinator → Interactive map: runs map rounds
src/game.js - Player → Interactive map: places midpoint
src/ui/map.js - Interactive map → Geographic calculations: measures error
src/ui/map.js - Game coordinator → Scoring: scores results
src/game.js - Game coordinator → Local save store: saves progress
src/game.js - Game coordinator → Achievements: checks badges
src/game.js - Game coordinator → Player callsigns: validates identity
src/game.js - Game coordinator → Scoreboard flaps: updates display
src/game.js - Game coordinator → Leaderboard and leagues UI: opens standings
src/game.js - Leaderboard and leagues UI → Backend client: requests standings
src/ui/board.js - Game coordinator → Backend client: submits rounds
src/game.js - Backend client → Supabase service: calls RPCs
src/services/backend.js - Game coordinator → Share card: creates share image
src/game.js - Game coordinator → Ad integration: uses ad service
src/game.js