E.Huang
Back to projects

HostelHound

Full-stack hostel price tracking platform covering ~14,700 hostels across 795 cities in 117 countries, with a concurrent Rust scraper, time-series price history, ML predictions, and an always-on browser monitor.

RustaxumSvelteKitMapLibrePostgresTimescaleDBLangGraphPlaywrightTerraform
HostelHound screenshot

HostelHound aggregates Hostelworld pricing into actionable history and predictions for budget travelers. It covers roughly 14,700 hostels across 795 cities in 117 countries, with a concurrent Rust scraper recording about 2.8M price rows per day. The system combines a Rust ingestion daemon, a SvelteKit frontend, and TimescaleDB — all running on a single Oracle Ampere A1 VM.

The system has three layers. A Rust daemon runs continuously, polling cities on a schedule and writing availability snapshots to a TimescaleDB hypertable. The SvelteKit frontend serves a calendar-grid search interface where users browse per-city price trends, view property-level price history charts, and see price drop predictions highlighted on the calendar. A paid subscription tier adds email alerts for both threshold-based price drops and ML-predicted drops, with magic-link authentication tied to Ko-fi payments.

The ML pipeline runs daily as a systemd-timed job. A LightGBM binary classifier scores each property-date cell for drop probability, a multiclass model forecasts the direction (down/flat/up), and a quantile regressor estimates the typical magnitude. Results are surfaced as confidence-tiered markers on the calendar.

I also built and self-hosted an always-on agentic browser monitor on dedicated GPU infrastructure. Persistent LangGraph exploration runs across anonymous, free, and paid personas; deterministic Playwright checks validate navigation and workflows; independent model verification reviews the resulting evidence. Provenance checks, duplicate suppression, and supervised browser recovery keep repeated or partially recovered reports from becoming separate incidents. The monitor produced 331 reports that collapsed into 46 unique production defects, driving 39 fixes or mitigations.

Infrastructure is fully managed by Terraform — a single Oracle Ampere A1 VM behind Cloudflare Tunnel (no public inbound IP), with DNS, firewall rules, and VM provisioning all declared as code. PgBouncer pools Postgres connections between the ingestion daemon and web app, Docker containers are managed by Coolify, and Traefik handles reverse proxy. The map view uses MapLibre with globe projection for browsing cities, with custom zoom-interpolated label transitions between continent and country levels.