How we worked with AI
Bahn Control Room
Aaltoes Prompt Operations Hackathon · 24–25 Oct 2026
Team: [names]
+ Add photo
Team photo
The short version
2
AI built and checked the tool. Bahn and the judges told us what was true and what mattered.
5
feedback rounds
2 in-person Q&As with Bahn, 2 video demos, 1 online Q&A
14
questions to Bahn
their answers rewrote our risk rules
13
commits in 24 h
each one tested in the running app first
2
AI roles
Claude Code builds it; Claude runs inside it
Every step, including what we threw away, is logged in PROCESS.md in the repo.
Bahn Control Room · How we worked with AI
Our loop: ask, build, check, show, change
3
1
Ask Bahn
What fails in real dispatch? What would a dispatcher act on?
→
2
Brief Claude Code
Read the brief and the data first, then build the smallest version
→
3
Check against the data
Read the agent's traces and every proposal, not "done"
→
4
Show it
Q&A, video demo, live link for judges
→
5
Change the rules
Fix the data or the tool, not just the prompt; log it
…then back to 1. Five times in 24 hours, once per feedback round.
Bahn Control Room · How we worked with AI
Who did what: people and AI
4
+ Add photo
Photo
[Name]
[Role, e.g. questions for Bahn, demo video, testing]
+ Add photo
Photo
[Name]
[Role, e.g. questions for Bahn, demo video, testing]
+ Add photo
Photo
[Name]
[Role, e.g. questions for Bahn, demo video, testing]
AI on the team
Claude Code (Opus 5.5)
Our builder: read the brief and dataset, wrote and reviewed the code, tested in the browser
Claude Opus 5.5 in the app
Investigates flagged orders and proposes one decision for a person
Claude for Finnish
Translated ~690 interface strings once; cached in the repo
Groq gpt-oss
Our first agent; replaced after rate limits and weak Finnish
Bahn Control Room · How we worked with AI
Five rounds of feedback
01
What we heard each time, and what we changed with AI before the next round
Five rounds, five changes
6
1
Q&A with Bahn 1
in person
Only abnormal orders should reach a person
Retuned: 31 % of orders → 10 orders + 1 banner
2
Q&A with Bahn 2
in person
14 questions answered
Rules rewritten: silent driver first, no car-value tiers
3
Video demo 1
judges
"Still visually heavy"
One action per order, with a deadline countdown
4
Online Q&A
remote
[What we heard]
[What we changed]
5
Video demo 2
judges
"Good improvement"
Score your own file, MCP server, filters
Heard
Changed
Bahn Control Room · How we worked with AI
1 · First Q&A with Bahn: what a dispatcher must not see
7
What we heard
"A person must not be distracted by every decision."
"Start with Finland."
"Judges must be able to clone it and run it."
"Don't clutter it like the sample board."
What we did with AI
Bahn Control Room · How we worked with AI
2 · Second Q&A: 14 questions that rewrote our rules
8
What we heard
"A silent driver who has the car is the worst failure."
"The latest arrival time is soft; repeat lateness matters."
"Every driver is trained for every car."
"Travemünde and winter tyres cause trouble."
"We have no EV winter range data."
"We want to see what we caught and what we missed, weekly."
What we did with AI
+ Add photo
Asking Bahn our 14 questions
Bahn Control Room · How we worked with AI
3 · Video demo 1: "still visually heavy"
9
What we heard
"Still quite heavy visually. We want tighter signal to noise."
"The incident rate is around 10–15 %."
What we did with AI
Bahn Control Room · How we worked with AI
4 · Online Q&A
10
What we heard
[What we asked]
[What we heard]
What we did with AI
Also changed around this time (move if it came from elsewhere)
+ Add photo
Screenshot of the online Q&A
Bahn Control Room · How we worked with AI
5 · Video demo 2: "good improvement"
11
What we heard
"Good improvement! Looking forward to the final submission."
Polite but vague. So we asked ourselves: what would a dispatcher need on Monday?
What we did with AI
Bahn Control Room · How we worked with AI
Checking the AI's work
02
Where we didn't take the first answer, and the habits that caught it
Six times we didn't take the first answer
13
1
31 % of orders to a person
First tuning flooded the queue. Retuned to 10 orders + 1 grouped banner.
2
A €113 "ferry" was a train
Our tool dropped a field. We fixed the tool, not the prompt.
3
"12:30" for a 15:30 sailing
The agent got UTC times. Every tool now speaks Helsinki time.
4
"Vela Coast Lines"
A made-up ferry company in the sample data. All invented operators removed.
5
Too many early catches
The back-test used today's clock. Honest result: 2 early, 8 on time, 3 missed.
6
Tampere → Helsinki via Germany
A messy test file exposed it. Missing data now goes to "check the data".
Bahn Control Room · How we worked with AI
How we checked what the AI did
14
1
Read the traces, not "Agent finished"
The first runs "finished" while failing on rate limits and malformed tool calls.
2
Reviewed every proposal against the data
By hand, order by order, before showing anyone.
3
Tested every live source before building on it
Weather, Finnish and German road feeds; Denmark marked "not connected", not faked.
4
Ran it the way judges will
Clean clone, npm start, and a local Vercel simulation before deploying.
5
Merged parallel AI sessions by reading them
Checked each file for both sets of changes, then re-tested.
6
Scanned for secrets before every commit
API keys stay in .env, never in the repo.
Bahn Control Room · How we worked with AI
What the agent may do, and what only a person may
15
The agent may
Only a person may
Answers to a person: at most four bullet points, every fact with its source.
Bahn Control Room · How we worked with AI
The team in pictures
03
Planning, building and asking Bahn
Planning
17
+ Add photo
Planning wall or whiteboard
Bahn Control Room · How we worked with AI
What we learned about working with AI
18
1
Ask the company, not the model
Fourteen answers from Bahn changed more of our rules than any prompt did.
2
Fix the tool, not the prompt
Wrong or missing data makes the AI confidently wrong. We fixed the input.
3
Read what the AI did
Traces, proposals and diffs, every time. "Done" is not a test.
Bahn Control Room · How we worked with AI
Thank you
Live: bahndesk.vercel.app
Code: github.com/tommy2006/bahndesk
Full log: PROCESS.md