What this site is
This is a personal portfolio and travel tracking site built from scratch on AWS infrastructure. The centrepiece is an interactive world map that visualises every country visited, colour-coded by how many times it's been visited, with individual city markers and live progress tracking toward the goal of visiting every country on Earth.
The site includes a password-protected admin panel for updating country and city data without touching any code, backed by a REST API with JWT authentication. All data is served dynamically — changes made in the admin panel are reflected on the map immediately.
The stack
Technologies were chosen for being lightweight, proven, and appropriate to the scale of the project — no unnecessary frameworks, no over-engineering.
Hosted on AWS
The site runs on a single AWS EC2 instance — a deliberate choice to keep the architecture simple, cost-effective, and fully within my control.
What was built
- Interactive world map — D3 Natural Earth projection with drag-to-pan and scroll-to-zoom
- Visit frequency colour coding — four tiers from "visited once" through to "5+ visits", giving an honest picture of familiarity with each country
- City & region markers — purple dot markers for specific cities visited within countries, with hover tooltips
- Live stats header — countries, cities, continents and percentage progress toward 195 countries, all computed dynamically from the data
- Country rules — a displayed standard for what qualifies as a visited country (overnight stay or 24+ hours)
- Password-protected admin panel — a full CRUD interface to add/remove countries and cities, set visit tiers, and save changes — no code edits required
- JWT authentication — the admin API is secured with signed tokens; sessions expire after 24 hours
- REST API — clean separation between data and presentation; the map fetches live data on every load
- Responsive & resilient — the map re-renders on window resize; if the API is unreachable, the map still loads in a graceful fallback state
- Social profile links — LinkedIn, GitHub, and Salesforce Trailhead linked directly from the homepage for quick access to professional profiles
- "Chat with Dan" RAG chatbot — a floating AI assistant on the homepage, powered by the Claude API, that answers questions about Dan's experience, travel, and projects using a curated knowledge base (website content, LinkedIn summary, GitHub profile, and uploaded documents)
- Knowledge base document ingestion — a server-side knowledge folder that automatically parses and indexes .txt, .pdf, and .docx files dropped onto the server, feeding them into the chatbot context
- Steam gaming page — live data from the Steam Web API showing top 10 games by playtime, total library stats (1,153 games, 11,877+ hours), and achievement counts; server-side cached and proxied via Flask to keep the API key private
- GitHub integration — full version-controlled codebase in a public repo at github.com/danscod/danscodellaro.com, with secrets kept out of git via .gitignore
How Claude was used
Claude served as a hands-on technical collaborator throughout the build. Every feature started with a clear brief — what it should do, how it should look, and what constraints to observe — and Claude translated those requirements into working code.
The process was genuinely iterative. Requirements were refined through conversation, implementations were reviewed and adjusted, and technical approaches were discussed before committing to them. Claude suggested options; I made the calls.