All Projects
5 projects

Schengen Visa Calculator
A calculator that tracks Schengen Area visa-free stay limits under the 90/180-day rule, correctly rolling the 180-day window as trips are added. Also includes a scraped API, pulling travel data from the U.S. Department of State into a queryable JSON endpoint anyone can hit with a simple curl command.

Searchable Academic Database
A searchable database of 3,000+ academic journal articles from Asian Ethnology's full publication history. I scraped and structured the archive with BeautifulSoup, stored it as JSON, and built a React search interface that lets users filter by scholar, geographic region, or keyword and jump straight to the original article.

Sky Check — Personalized Outdoor Conditions Dashboard
A weather dashboard designed for people managing respiratory or heat-sensitive health conditions who need more than a generic forecast to decide whether it's safe to go outside. Aggregates live data from three separate government sources (the National Weather Service, EPA's AirNow, and Open-Meteo) and rates each metric against configurable personal thresholds, deliberately avoiding a single combined score so no one factor can mask another. Includes a server-side caching layer to minimize redundant API calls and graceful fallback handling if any data source is temporarily unavailable.

Jeopardy Study — AI-Assisted Trivia Wiki
A personal trivia study tool built with Django. Good for generating and studying trivia. While watching Jeopardy users can look up anything unfamiliar on the spot. Entries can be created manually or generated automatically via the OpenRouter API, which drafts a set of study facts from just a topic name. Entries link to each other automatically wherever one entry's name appears in another's text, and any highlighted phrase can be turned into a new entry in a click. Includes categories and full-text search.

Hot Hotels — Full-Stack Booking Platform
A hotel and experiences booking platform in the style of Hotels.com, built end-to-end with FastAPI and server-rendered Jinja2 templates. Supports session-based auth, real-time room availability (computed from confirmed bookings rather than a stored flag, to avoid drift), a host dashboard for managing properties and experience listings, and a request-based booking flow for experiences where hosts confirm or decline guest requests. Originally built on SQLite for rapid iteration, then migrated to PostgreSQL — including a custom data-migration script preserving all relational integrity — as the schema and feature set matured.