# Changelog ## 0.5.0 - 2026-03-26 - Added anonymous backend visit logging in SQLite: - New `visit_logs` table records timestamp, hashed visitor id, and country metadata. - New `ip_country_cache` table caches IP-to-country lookups to reduce external geo requests. - Added simple geolocation for public IPs (best-effort) with localhost/private IP fallback labeling. - Added localhost-only stats endpoint: `GET /stats`. - `/stats` response now includes: - `countries`: visit and unique visitor counts grouped by country (last 5 days window). - `lastHour`: total visits and unique visitors in the last 60 minutes. - `last5Days`: daily visits and unique visitors for the last 5 UTC calendar days. - Wired visit recording to `GET /api/catalog` so app opens contribute to stats. - Updated `/stats` access control to allow localhost and LAN/private IP clients, while still blocking public internet IPs. ## 0.1.0 - 2026-03-25 - Created initial frontend-only React + TypeScript project scaffold with Vite. - Added typed Marathon API client for fetching/searching items from `/api/items/all`. - Implemented initial app features: - Item search by name. - Top 5 relevant search results with icons. - Click-to-add items into to-do list. - Quantity editing per item. - Completed state toggle. - Item deletion. - Added simple, minimal UI styling. - Added `README.md` documentation and local setup instructions. ## 0.2.0 - 2026-03-25 - Fetched faction upgrades data from `https://marathondb.gg/js/data/faction-upgrades.js` and added it to app data sources. - Extended search results with faction upgrades that include salvage requirements in their levels. - Added upgrade click behavior: clicking an upgrade adds all mapped salvage items to the to-do list and increases quantity when an item already exists. - Added image URL fallback candidates for search/list icons with extension order ending in `.webp`. ## 0.3.0 - 2026-03-25 - Added a local proxy server (`proxy/server.js`) using Node + SQLite (`proxy/catalog.db`). - Proxy now fetches Marathon items and faction upgrades from source URLs, builds a combined searchable catalog, and serves it at `GET /api/catalog`. - Added automatic catalog refresh every 24 hours and a manual refresh endpoint `POST /api/catalog/refresh`. - Frontend data loading now uses `/api/catalog` instead of hitting external source endpoints directly. - Added Vite dev proxy configuration for `/api` and `/health` to `http://localhost:8787`. - Added a right-side faction upgrade tag in search results, using faction color and ` upgrade` label text. - Added temporary faction-color highlight animation on affected to-do items when clicking an upgrade search result. ## 0.4.0 - 2026-03-25 - Reorganized repository into explicit `frontend/` and `backend/` directories. - Moved React app files to `frontend/` and proxy API to `backend/server.js`. - Moved SQLite catalog storage path to `backend/data/catalog.db`. - Added `backend/references/` for source reference files (`api.js`, faction upgrades snapshots). - Updated scripts/config/docs for the new structure (`dev:frontend`, `dev:backend`, Vite root set to `frontend`). - Added `dev:all` script to start backend and frontend together with one command. - Replaced inline `dev:all` command with `scripts/dev-all.mjs` for reliable Windows process spawning. - Upgrade search results now use faction assets from `backend/data/faction-assets/*.png` via `/api/faction-assets/:file`. - Upgrade search result rows now have border color based on faction color. - Upgrade search results now expose per-level salvage and require clicking a level button (`L1`, `L2`, ...) to add items. - Faction-color border is now applied around the upgrade icon frame (not the whole search row).