Inspiration

History games often rely on text questions and memorized facts. PastPoint explores a more visual approach: architecture, clothing, vehicles, objects, landscapes, and human activity become the clues. We wanted players to investigate a historical moment before answering instead of selecting an option from a quiz.

What it does

PastPoint is a complete 10-round, GeoGuessr-style history game. Players explore AI-assisted 360° historical reconstructions, identify the event, choose the year, and place the location on a world map. The chronological session runs from the fall of Constantinople in 1453 to the Apollo 11 Moon landing in 1969.

Every round asks the player to:

  1. Explore a full-screen panorama.
  2. Enter the historical event without multiple-choice answers.
  3. Select a year on a draggable ruler.
  4. Place a marker on Earth—or explicitly identify the Moon for Apollo 11.
  5. Review the correct event, year difference, geographic distance, and a prepared explanation.
  6. Continue to a final completion state and restart the full session.

How we built it

PastPoint uses Next.js 16, React 19, and TypeScript. A reusable, data-driven session engine stores each scene's panorama, accepted event aliases, year, date, location, explanation, camera view, and year range.

Photo Sphere Viewer provides 360° navigation. A custom year ruler supports mouse, touch, wheel, and keyboard input. Leaflet with CARTO tiles handles Earth-location guesses and result maps. Apollo 11 uses a dedicated off-world flow instead of projecting a false coordinate onto Earth. Haversine distance produces geographic results, and deterministic session state clears every input, marker, panorama, and result between rounds.

AI image generation helped create and refine historical reconstruction assets before release. The player-facing runtime is deterministic: all panoramas and scene data are local, with no runtime AI requests.

Challenges

The central challenge was balancing historical recognizability, panorama quality, and development speed. Each scene needed useful visual clues, a readable opening view, a continuous horizontal wrap, and clean spherical poles.

We also had to isolate state across ten consecutive rounds, fit the panorama, event, year, and map controls into a scene-first interface, support a 390 × 844 mobile viewport, represent the Moon honestly, and provide clear panorama and map failure states.

Accomplishments

  • Shipped ten distinct playable historical rounds.
  • Built one reusable session engine and HUD for the complete roster.
  • Added deterministic progression, session completion, and full restart.
  • Added raw event correctness, year difference, and geographic distance.
  • Created an explicit Moon-specific input and result path for Apollo 11.
  • Kept all panorama assets local with no runtime generation calls.
  • Completed desktop and mobile full-session QA, seam/pole review, 34 unit tests, TypeScript, ESLint, and a production Webpack build.
  • Deployed the release to Vercel production.

What we learned

A broad, coherent playable session can be more valuable than polishing one scene indefinitely. Manual content work is a valid MVP strategy when automation does not directly improve the player experience, and difficult scenes are sometimes better replaced than used to justify new infrastructure.

The project also reinforced a clear AI boundary: AI can assist with scene composition and pre-release visual production, while the final game remains deterministic, explainable, and free of runtime answer judging.

What's next

Next steps include stronger historical review and provenance, optimized high-resolution panorama delivery, additional curated events, deterministic scoring and daily sessions, multiplayer rooms, multi-panorama historical routes, and an internal Scene Studio for larger-scale content production.

Built With

Share this project:

Updates