Inspiration
Travelling down the West Coast in New Zealand, we ran into a road closure in Haast Pass which is a bottleneck on New Zealand’s South Island. With little to no internet connection, we asked ourselves: Will we make it in time to our next stop in Wanaka? What are our most convenient alternatives? Do we need to take another route? Do we need to rebook our accommodation?
NoFrustrationVacation solves those problems. It is an agentic assistant that combines up-to-date official traffic data with booking preferences to make the best of vacation troubles. The AI agent proactively prepares the best route and accommodation options. With PayPal, you are only charged once a booking is fully confirmed, and you get a refund if you cancel or need to change your plan again.
Learnings
Besides getting to know new services/"how-tos" for payment, traffic information, and accomodation search, we gathered insights while pushing agent-based development in a multi-developer setting to the limit.
A clear core model and architecture remain important in agent-assisted software development. The reference architecture was crafted by hand and key guidelines where made accessable to coding agents on different develop machines. Surely this is a hackathon, but investing a lot of thought into those aspects helped us to quickly produce working results with Claude-Code - plus it remains a creative and fun part in software engineering. However, we could see the structural quality deteriorate once we did less reviews. Especially the domain model received a lot of new dependencies interconnection subdomains.
Building the project
Once we had an idea of what we want to deliver, we started with multiple brainstorming sessions. Results included a domain model, major use cases and workflows, backend architecture and a rough UI/navigation structure. Next we initialized the application projects and implemented the backend architecture in a vertical slice for reference.
We setup a CI/CD pipeline soon after, so we could collect quick feedback on our implementations - Claude did most of the coding while we were travelling, collecting ideas, reviewing, and refining the next concepts. Our development process in a nutshell:
- Concept refinement
- Implementation (assisted/delegated to Claude Code)
- Local tests if helpful
- Push to feature branch + PR creation
- CI/CD pipeline runs tests
- Merge to main. CI/CD pipeline builds application artifacts (docker images). Successful builds are automatically deployed.
- Test changes against the deployed server environment using the PWA installed on a smartphone.
Challenges we faced
Testing complexity, which was expected though with the selected scope and available time.
We did decide on Graphhopper for routing, but still the routing of alternatives is not always optimal yet and can be improved.
Another main challenge was a UI with an individual touch that doesn’t look AI-generated. We are no designers :), but small changes, such as removing very commonly used stylings, helped a lot.
Built With
- cicd
- claude-code
- docker-swarm
- flyway
- github-actions
- graphhopper
- hibernate
- intellij-idea
- java
- liteapi-booking
- nz-traffic-api
- oauth2
- openai
- openapi-spec
- openstreetmap
- paypal
- postgis
- pwa
- react
- springboot
- typescript
- webstorm