Planning a spontaneous day trip around Stockholm usually means opening several tourist sites and blog lists, then manually working out how far each place is, whether it suits the weather and whether it fits the kind of day you want. The information exists - it is just scattered and slow to compare.
This is an AI-assisted build. I used an AI agent as an implementation partner while I defined the concept and requirements, directed the UX, content and prioritisation, iterated on and tested the experience, and reviewed the technical decisions and code. My contribution centred on product thinking, UX and content direction, quality assurance and technical judgement.
- Curated content, not a scraped feed
A smaller, consistently structured selection of destinations beats an automated feed of uneven quality. It keeps descriptions useful and comparable.
- Explainable rules instead of an AI chatbot
Daily recommendations come from transparent weather and season rules, so the user can see why a place is suggested today rather than trusting a black box.
- Filters that match how people actually decide
Mood filters use OR semantics - any of the moods you pick is fine. Practical requirements use AND, because 'easy by public transport' and 'food available' are conditions, not preferences.
- Filter state lives in the URL
Filters are persisted and shareable through the URL, so a result set can be sent to a friend or reopened later without redoing the work.
- No account, no database
Saved trips are kept in localStorage. For this use case that is enough, and it avoids sign-up friction and unnecessary personal data.
- Swedish and mobile-first by design
The app is used on a phone, often on the way out the door, and by people planning trips in Swedish. Both were design constraints from the start, not translations added later.
The app is built with React 19, TypeScript and Tailwind CSS v4. Filter choices are synchronized to the URL, so a result set can be shared or reopened. External APIs provide current event and weather data, which supports the daily recommendation rules. The app also includes an interactive map, and saved trips are stored locally in the browser.
28 unit tests run in Vitest, alongside TypeScript and production build verification. Accessibility work includes a skip link, a semantic main landmark and heading structure, aria-pressed states on filter toggles and visible focus styles for keyboard users. Query parsing is deliberately tolerant of malformed or outdated URLs, and error and 404 states are written in Swedish like the rest of the interface.
The destination content is curated by hand, so coverage is intentionally narrow rather than exhaustive. Recommendations are rule-based and will not capture every nuance of a good day out. Saved trips live in one browser and do not follow the user between devices. The app is Swedish-only for now.
Widen the destination set with the same editorial standard, add lightweight analytics to see which filters people actually use, and run a full accessibility review on the map and filter interactions with a screen reader.
