Skip to content

Repository files navigation

🌍 VisitedPlaces

An interactive world travel tracker β€” mark countries and regions you've visited, explore your travel analytics, and compare maps with friends using serverless shareable codes.

Version License: AGPL-3.0 TypeScript


πŸ“Έ Overview & Interface Preview

πŸ—ΊοΈ Interactive World Map

Track visited places, bucket-list destinations, revisit goals, and avoided regions with smooth zooming, panning, and microstate support.

Interactive World Map


⬑ Hexagonal Grid View

A stylized honeycomb grid visualization providing equal visual weight to nations and territories across the globe.

Hexagonal Honeycomb Map


πŸ“Š Travel Analytics & Traveler Persona

Deep dive into your travel footprint with continent coverage breakdowns, progress toward world exploration milestones, regional comparison charts, and gamified traveler badges.

Travel Analytics Dashboard


🀝 Social Compare Mode

Compare travel maps side-by-side with friends using compact, serverless share codes. Identify mutual destinations, discover trip recommendations, and see travel overlaps in real time.

Social Compare Mode


πŸ›οΈ Sub-Region Drill-Down & Territory Exploration

Drill down into sub-national states, provinces, and territories (US states, Canadian provinces, UK counties, and admin-1 divisions worldwide) directly on the interactive map or through the dedicated sub-regions explorer panel.

Interactive Regional Drill-down (US States) Sub-regions Explorer Drawer
Regional Drill-down Sub-region Explorer

πŸ“‹ Searchable Country Directory

Browse 199+ countries grouped by continent with progress bars, sorting options, and quick status actions.

Country Directory


✨ Features

Feature Description
πŸ—ΊοΈ Interactive World Map Click countries to open a context menu to change their status or drill into sub-regions (US states, UK counties, and admin-1 sub-divisions globally).
⬑ Hexagon Map Alternative hexagonal honeycomb visualization for an equalized, stylized view of global coverage.
πŸ“‹ Country Directory Searchable directory of 199+ countries grouped by continent, with sub-region expansion, sorting, and stats.
πŸ“Š Analytics Dashboard Coverage stats, continent breakdowns, regional distribution charts, and gamified milestone levels.
🀝 Compare Mode Paste friends' share codes to see a merged map highlighting common destinations, individual travels, and overlaps.
πŸ”„ Zero-Server Share Codes Export your map as a compact, URL-safe base64 code. Import codes from friends to compare or restore backups.
πŸŒ“ Dark & Light Mode Sleek modern dark mode interface with light theme support.
πŸ”’ Privacy First Zero servers, zero telemetry, zero accounts. 100% of your data remains in your browser's local storage.

Status Types

  • 🟒 Visited β€” Places you have traveled to
  • 🟣 Wishlist β€” Bucket-list destinations you plan to visit
  • 🟠 Revisit β€” Places you've loved and want to return to
  • πŸ”΄ Avoid β€” Places you do not wish to visit

πŸ—ƒοΈ Data Sources

VisitedPlaces utilizes high-quality, open-source datasets to power interactive maps, country metadata, and sub-national flags:

  • World Map Geometries: TopoJSON boundaries from the world-atlas project (110m resolution).
  • Global Sub-division Geometries: Natural Earth admin-1 (states and provinces) 10m resolution GeoJSON from the nvkelso/natural-earth-vector repository.
  • National Flags: High-resolution vector flags served by Flagpedia / FlagCDN.
  • Sub-National Flags: Sub-national state, province, and regional flag assets from amckenna41/iso3166-flags.
  • Country Metadata: Static country metadata (names, codes, continents, regions) compiled from the REST Countries API.

πŸš€ Quick Start

Prerequisites

Install & Run

git clone https://github.com/your-username/VisitedPlaces.git
cd VisitedPlaces
npm install
npm run dev

Open http://localhost:5173 in your browser.

Automated Screenshots

Generate the latest high-resolution screenshots with demo travel data automatically:

# With dev server running on localhost:5173
npm run screenshots

Build for Production

npm run build     # TypeScript check + Vite production bundle β†’ dist/
npm run preview   # Preview the production build locally

The dist/ folder is a static site β€” deploy it to GitHub Pages, Netlify, Vercel, or any static host. No backend required.


πŸ—οΈ Tech Stack

Layer Technology Version
Framework React 19 + TypeScript (strict mode) React 19.2
Build Vite 7 Vite 7.3
Styling TailwindCSS 4 + Vanilla CSS Variables Tailwind 4.3
State Zustand 5 + localStorage persistence Zustand 5.0
Routing React Router 7 React Router 7.13
Maps react-simple-maps + D3 (TopoJSON & Hexbin) react-simple-maps 3.0
Charts Recharts Recharts 3.8
Icons Lucide React Lucide 0.577
Testing & Automation Vitest + Playwright Vitest 4.1 / Playwright 1.62

πŸ“ Project Structure

src/
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ common/          # Reusable UI components (FlagImage)
β”‚   β”œβ”€β”€ layout/          # AppLayout, Navbar, SettingsModal
β”‚   └── map/             # StandardMap, HexagonMap, CompareMap, MapContainer, TerritoryListPanel
β”œβ”€β”€ config/              # Constants, url endpoints, drill-down registry
β”œβ”€β”€ data/                # Static countries data, territories, UK/US regional mappings
β”œβ”€β”€ hooks/               # useDrilldownGeography, useMapAnimation
β”œβ”€β”€ pages/               # Home, List, Analytics, Compare, About
β”œβ”€β”€ store/               # Zustand store (places, theme, actions)
└── utils/               # Map utilities, serialization, CacheStorage, TopoJSON processing

🀝 How Sharing Works

  1. Open Settings β†’ your travel map is encoded as a compact, URL-safe base64 string
  2. Copy the code and share it with a friend
  3. Your friend pastes it into the Compare page
  4. A merged visualization shows mutual destinations, unique travels, and trip overlaps

No server or database involved β€” your travel state is stored directly within the compact share code.


πŸ§‘β€πŸ’» Contributing

Contributions are welcome! Please read the AGENTS.MD file for:

  • Architecture overview and design decisions
  • Coding standards (TypeScript strict mode, BEM CSS, Zustand patterns)
  • Step-by-step guides for adding new features
  • Testing strategy and quality gates

Development Workflow

npm run dev       # Start dev server with HMR
npm run lint      # Run ESLint
npm run test:run  # Run Vitest unit tests
npm run build     # Type-check + production build

Commit Convention

We use Conventional Commits:

feat: add trip dates to country data
fix: resolve projection error on UK drill-down
chore: update dependencies
refactor: extract map tooltip into component

πŸ“„ License

This project is licensed under the GNU Affero General Public License v3.0 β€” see the LICENSE file for details.

About

An interactive world travel tracker and passport visualizer. Mark visited countries and sub-regions, view in standard or hexagonal maps, explore travel analytics, and compare maps with friends using serverless share codes.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages