Usput.ba
A travel guide to Bosnia and Herzegovina, from the Una to the Drina, built from real places, with audio tours and mine safety built in.
- Role
- My own product: I build it and run it on my own
- What
- Places, experiences, plans and audio tours across Bosnia and Herzegovina
- Built with
- Rails 8.1, Hotwire, Tailwind, Solid Queue, RubyLLM, PostgreSQL, Kamal
- Languages
- 16 interface languages; content in Bosnian and English
Why I built it.
Usput means “along the way”. It is a guide to the whole of Bosnia and Herzegovina, not only its best-known landmarks: find what to see near you or in a city, put it into a plan, walk it, and keep what you saw.
It is also where I try AI features on real users first. Everything a model writes for Usput is about a real place, so every record has to stay true to that place.
What it does.
-
Every place has its story, read aloud.
A place gets its own page with its history, photos, reviews and the practical details, and many have an audio tour. An AI writes the script from the place’s own record, and ElevenLabs reads it. Put places into a plan, walk it, and check in at each stop.


Baščaršija in Sarajevo, on a phone, and its audio tour. -
Mine safety, built in.
Bosnia and Herzegovina still has recorded mine-suspected areas. Every place’s coordinates are checked against them, and a place within 500 metres of one cannot be saved. The public mine check takes your position, coordinates or a tap on the map, and answers in bands only: within 500 metres, within 2 kilometres, or nothing recorded, which it never calls safe. When its data is missing it fails closed and points to BHMAC, the only authoritative source.
Usput’s minesweeper teaches what the data means, on real map tiles. The same game, Minolovac, runs on this site as a static page that can be played with a keyboard.
-
AI that is checked before it is trusted.
Content is drafted through RubyLLM behind a wrapper with structured output enforced by a schema, layered retries, JSON repair and versioned prompts. Before a new place is created it is checked: that it exists, that it lies inside the country’s border, that the name and the city make sense.
-
Agents welcome.
bin/usput mcpserves eighteen commands to an agent over MCP, and a read-only endpoint serves admins who hold a token. A validator catches records a model made up. -
A small product, run by one person.
Rails 8.1 with Hotwire and Tailwind, Solid Queue for background work, Rails Event Store, Avo for the curators’ admin, two PostgreSQL databases, deployed with Kamal. Curators, trusted volunteers, edit places, experiences, plans and audio tours.
The mine checks, launched in half a minute.
The launch video, made with Remotion from screenshots of the site. On-screen text in Bosnian; there is no sound.
What it shows about how I work.
I build products end to end and run them: the product, the data, the AI and the deploys. Usput is where I try AI features on real users before I bring them to a team, which is why a model’s output there passes checks that do not depend on the model being right.
- usput.balive, in 16 interface languages
- Source on GitHubmisabegovic/usput.ba
- Mine checkis this point near a recorded mine-suspected area?
- Minesweeperthe game, on real map tiles
- Minolovacthe same game, as a static, keyboard-friendly page on this site