TravelMap is my personal travel archive: an interactive map, trip browser, photo gallery, timeline, and stats dashboard built around the places I have visited, lived in, or plan to visit.
The live app is available at map.pivi.dev.
- Shows visited, lived, and future cities on an interactive world map.
- Draws trip routes and opens city tooltips directly from the map.
- Groups trips by year, with detail pages for route, dates, duration, and cities.
- Displays city photo galleries with a full-screen lightbox.
- Tracks timeline and stats: distance, transport mode rankings with km, airline and ferry company rankings, continents, countries, currencies, timezones, UNESCO sites, and media count.
- Supports English and Italian, light and dark themes, and mobile / desktop layouts.
.
βββ .github
β βββ copilot-instructions.md
βββ AGENTS.md
βββ CLAUDE.md
βββ CODING_GUIDELINES.md
βββ logos
βββ scripts
β βββ uploader
βββ travel-map
βββ public
βββ src
travel-mapis the React application.scripts: Contains a folder with the scripts used to process and upload images/videos and generate the JSON file.- Uploader: generates compressed and thumbnail images from travel photos and videos. It uploads them to bunnyCDN and generates a JSON file with the metadata. This JSON file is then used by the React app to display the galleries.
logoscontains app and README logo assets.CODING_GUIDELINES.mdis the single source of truth for code style and engineering conventions.AGENTS.md,CLAUDE.md, and.github/copilot-instructions.mdconfigure Codex, Claude, and GitHub Copilot to follow those same guidelines for every code file.
cd travel-map
pnpm install
pnpm devUseful commands:
pnpm run check
pnpm run lint
pnpm run format
pnpm run build
pnpm run knip
pnpm run security:auditpnpm run check runs TypeScript checking, ESLint with zero warnings, a Prettier
formatting check, unused-code analysis, and React Doctor. Run it before
committing. The Husky pre-commit hook also checks staged TypeScript, TSX,
JavaScript, styles, markup, and data files.
ESLint uses eslint-plugin-jsdoc to enforce the canonical documentation
layout, including component titles, declaration spacing, typed parameters,
documented destructured props, return values, and documentation for every
named function, class, method, type, interface, and enum.
Dependency installation uses pnpm's seven-day release quarantine. The package
update command also respects peer compatibility, while time-sensitive security
patches are exempted and known-incompatible formatter, linter, and TypeScript
releases are excluded. Transitive overrides replace vulnerable legacy releases.
Run pnpm run security:audit for the JavaScript dependency audit. The uploader's
Python pins can be checked with
uvx pip-audit -r scripts/uploader/requirements.txt from the repository root.
cd travel-map
pnpm run deploygh