Inspiration

By Dr.Logee

What it does

Park & Ride Sri Lanka lets commuters leave their car outside Colombo and finish the trip by metro bus, all in one app.

  • Smart parking: book a slot at Makumbura, Kadawatha, Kesbewa or Pettah. The app places you by your return time (back late → corner slot, back soon → front line), offers charger slots for EVs and accessible slots near the gate, and gives you a signed QR gate pass. You can see your slot in a 3D parking yard before you walk to it.
  • Live buses and seat booking: buses move live on our own city map across 3 routes. Pick a bus, choose your pickup and drop stops, and book a seat. Seats are counted per segment, so a seat freed at Borella can be sold again for the rest of the trip, and stops the bus has already passed can't be booked.
  • QR boarding and getting off: scan the stop QR to board, and again to get off. Repeated scans are ignored, bookings that are never scanned are auto-cancelled when the bus leaves, and anything that doesn't add up raises a mismatch alert for the admin.
  • Traffic-aware rerouting: buses find the fastest path over 53 real roads and reroute around crashes, jams and closed roads. They only switch when it saves at least 1 minute or 10%, so they don't zig-zag. Drivers see the new instruction and can report incidents from the cab.
  • Admin control room: a live map of every bus, each bus's driver and conductor, a next-stop panel (ETA, people getting off, bookings to board, stop QR), a live alert feed, traffic scenarios, and time controls (1×–30×) to show the whole system to judges in minutes. ## How we built it
  • Jac (Jaseci) for almost everything: 81% of our code. The backend is a graph: terminals, slots, buses, stops and roads are nodes and edges, and 22 walkers are our API. The frontend uses Jac's client side for the UI.
  • Our own map instead of Google Maps: 34 junctions and 53 roads with real distances and road classes, so we could simulate traffic ourselves. Routing is Dijkstra, with each road's travel time depending on road type and traffic level.
  • A simulated city clock drives the buses, stop visits, auto-cancels and alerts, so the whole day can be sped up for a demo.
  • Security basics: HMAC-signed QR tokens that expire, a unique ID on every scan, and role checks on admin walkers.
  • Libraries: three.js for the 3D yard, qrcode.react and html5-qrcode for QR codes, and Tailwind for the UI.
  • Team: 3 developers, each paired with an AI coding agent (Claude Code and Google Antigravity). We wrote one shared rulebook (AGENTS.md plus skills) that both agents follow: folder ownership, written walker contracts, mock data so each person could run their part on localhost alone, conventional commits, and a CI check that enforces the Jac share. ## Challenges we ran into
  • The Jac version maze. pip install jaseci gave us an old release, while the features we needed were in Jac 0.37, which installs differently. Some patterns from the docs we started with had changed (for example, :priv walkers are no longer served at all), so we had to relearn auth and file conventions mid-hackathon.
  • Four builders, one codebase, one day. Three humans and their agents worked in parallel, and merges broke main more than once: duplicated folders, leftover older-version screens that broke the build, and conflicting UI kits. Written contracts and mock data let everyone keep moving while the backend caught up.
  • Getting AI agents to finish, not polish. Early on, our agents spent too long on planning, full QA runs and type-checker errors. We switched to a "speed mode": critical path first, tests only for the hard logic, merge as soon as CI is green.
  • Venue Wi-Fi truncated large package downloads until we lowered the network MTU inside WSL.
  • Getting the scan rules right: boarding, getting off, duplicates, walk-ins, no-shows and mismatches all interact. We wrote the rules as an ordered table before coding process_scan.

Accomplishments that we're proud of

  • A full journey that works end to end: park, book a seat, board by QR, watch the bus reroute around a crash, and get off.
  • Buses that actually make routing decisions, and don't flip-flop on small slowdowns.
  • 81% Jac, well above the 80% target, with tests for journeys, routing and contracts.

What we learned

  • Graph thinking fits transport naturally. Modelling roads, stops and buses as nodes and edges made routing, seat counting and the admin views far simpler than tables would have.
  • Contracts and mocks first. Agreeing on walker inputs and outputs early is what let three people build in parallel.
  • AI agents move fast but need clear limits: ownership of folders, a single source of truth for data, and an explicit definition of "done".
  • Merge early and often. Our worst hours came from branches that drifted apart.

What's next for Park and ride system

  • Real data: live GPS from buses and real slot sensors at the terminals, in place of the simulation.
  • Sinhala and Tamil across the whole app.
  • Payments: a combined parking + bus ticket with card and mobile wallet payment.
  • A seat forecast from past trips, so passengers know how full a bus will be before it arrives.
  • More terminals and routes, and an operator dashboard for the transport authority.
  • A pilot with one route (Makumbura–Pettah) to test with real commuters.

Built With

  • jac
Share this project:

Updates

Submission history