Building Veyro on a Moving Kochi Metro: From a Two-Hour Codex Sprint to a Live Product
There are hackathons where you build inside a classroom, an auditorium or a coworking space.
Then there was Codex Nightline.
On 18 July 2026, I joined 100 solo builders for a two-hour build sprint inside a moving Kochi Metro train. The route itself became the timer: Vyttila to Aluva, then towards Thrippunithura and back to Vyttila.
Codex Nightline was an OpenAI Build Week community hackathon in Kochi. The sprint happened onboard, followed by showcasing and judging at Vyttila after we left the train.
No separate team room. No fixed desk. No long development window. Just a laptop, a moving train and an idea that had to become a working product before the journey ended.

That idea became Veyro.

“Veyro turns every metro ticket into motivation to travel, explore and participate.”
Today, Veyro is a live, privacy-first public-transport engagement and city-discovery platform built around Kochi Metro journeys.
It started with a simple question: What happens to the passenger experience after a metro ticket has served its purpose?
The problem I chose to solve
A metro journey is usually treated as a transaction. A passenger buys a ticket, completes the trip and leaves. The ticket may contain useful journey information, but the relationship between the passenger and the transport experience normally ends at the station gate.
There is no personal history of the places reached through the network. There is no sense of progress, no travel streak, no station Passport and no community challenge attached to everyday metro usage.
City-discovery platforms can recommend places, while fitness and mobility applications can track movement. However, many of them depend on continuous location access.
I wanted to explore a different model. Could an application use the ticket a traveller already possesses to create a meaningful journey record without continuously following that person?
That became the foundation of Veyro.
One scan powers the Veyro experience
The primary Veyro flow begins with a single ticket image. A signed-in traveller can either take a photo using the phone’s native camera or choose an existing image. The image is processed inside the browser.
- Detects the QR code.
- Reads the visible origin and destination using OCR.
- Matches the names against verified Kochi Metro stations.
- Calculates the route distance and number of stations.
- Shows the detected journey for confirmation.
- Creates the journey and ticket claim atomically in Firestore.
The traveller does not need to manually enter the stations. If the OCR result is uncertain, Veyro asks for a clearer image instead of silently storing an unreliable journey.
Veyro is also deliberately not presented as a ticket validator. It does not generate tickets, unlock Metro gates or claim that a journey is an official Kochi Metro record. It creates a ticket-backed personal journey record.
Moving beyond journey history
A basic journey logger would have solved only one part of the problem. I wanted every recorded ride to contribute to something larger.
- Veyro Passport
- Community Leaderboard
- Veyro Explore
Together, they turn a one-time scan into a continuing engagement loop.
Travel
↓
Scan a ticket
↓
Build personal progress
↓
Maintain streaks and community rank
↓
Discover places around the network
↓
Contribute useful local recommendationsVeyro Passport: turning journeys into progress
Veyro Passport transforms private journey records into a visual travel profile.
- Total recorded journeys
- Distance travelled
- Metro network coverage
- Origin and destination station stamps
- Current travel streak
- Longest historical streak
- Six-month activity
- Monthly comparisons
- Favourite stations and routes
- Personal journey records
A station is stamped only when it was the origin or destination of a journey. Veyro does not assume that the traveller visited every intermediate station just because the train passed through it.
Passport can also generate a shareable traveller-created recap. The recap contains only safe aggregate information such as public display name, kilometres, journeys, streak and network coverage.
It does not include the traveller’s email, Firebase UID, ticket QR, ticket image, journey ID or exact travel time.
Community competition without publishing travel history
The Veyro Community Leaderboard adds a lightweight competitive layer. Participation is optional, and travellers can join or leave whenever they choose.
- Distance
- Journeys
- Best Streak
A public leaderboard entry contains a display name, optional profile image and aggregate statistics. It does not expose the traveller’s individual routes or private journey records.
The top five users are displayed for each category. A participating traveller can also see their own position even when they are outside the top five.
The intention is not to create an official or cheat-proof transport ranking. It is a community motivation feature that encourages people to travel more consistently.
Veyro Explore: connecting travel with city discovery
Explore is where Veyro develops beyond journey tracking. Every traveller receives a personalised feed of real places and small experiences around Kochi Metro stations. These recommendations are called Veyro Finds.
The recommendation system considers signals such as:
- Frequently used origin stations
- Frequently used destination stations
- Recently used stations
- Stations along common routes
- Categories the traveller has saved
- Categories the traveller has loved
- Community popularity
- Recently published Finds
- Stations the traveller has not explored yet
The ranking is deterministic and explainable. Veyro does not use an external AI recommendation API.
A card may explain why it appeared using messages such as:
- Because you often travel to Edappally
- Along one of your frequent routes
- Similar to places you loved
- Popular near a station you use
- Discover a new station
- Veyro Curated
This makes the recommendation useful without exposing the user’s complete travel profile.
A metro journey does not automatically mean a place visit
One important product decision was separating station travel from place visits. Suppose a traveller records a journey ending at Edappally.
Veyro may recommend a café, park, shopping destination or cultural venue near Edappally Metro. However, it does not automatically claim that the traveller visited any of them. The traveller must explicitly select Mark as Visited.
- Loved It
- Not for Me
Loved It contributes to the public community-love count. Not for Me remains private and helps personalise only that user’s future feed. There is no public dislike counter.
Travellers can also save a Find, hide a suggestion, report incorrect information or open its coordinates in Google Maps.
Local Explorer: earning the ability to contribute
Veyro Explore is not intended to be an unrestricted social feed. A traveller unlocks Local Explorer submission access only after recording at least:
- Five valid journeys
- Twenty-five kilometres of travel
Once unlocked, the traveller can submit a real place near an operational Metro station. Every community submission begins as pending and cannot be published directly by the contributor.
A Veyro administrator can:
- Review the location
- Open it in Maps
- Approve the Find
- Reject it with a reason
- Hide published content
- Restore content
- Remove misleading entries
- Review user reports
Published edits return to pending review. This creates a simple trust loop:
Use the Metro
↓
Build genuine Veyro activity
↓
Unlock Local Explorer
↓
Submit useful discoveries
↓
Pass moderation
↓
Help other travellers exploreThe current curated dataset contains researched real locations across operational Kochi Metro stations. Their evidence and source records are kept private for administration rather than exposed inside public recommendation documents.
Building within the Firebase Spark tier
A major technical constraint was keeping Veyro deployable without requiring a billing-enabled backend.
The application uses:
- Next.js App Router
- TypeScript
- Tailwind CSS
- Firebase Authentication
- Cloud Firestore
- Firebase Hosting
- Tesseract.js
- BarcodeDetector and ZXing
- Zod
- GSAP
- Static Next.js export
It does not use:
- Cloud Functions
- Firebase App Hosting
- Cloud Storage
- Next.js API routes
- Server Actions
- Paid map APIs
- External AI APIs
- Continuous GPS tracking
- Permanent Firestore listeners
OCR and QR processing happen in the browser. Explore uses bounded, one-time Firestore queries instead of downloading the complete collection. Journey history is paginated, and reusable statistics are calculated from the traveller’s private journey documents.
The architecture demonstrates that a substantial mobility product can be built while remaining conscious of infrastructure cost and user privacy.
Being honest about the prototype’s limits
Firebase Spark does not provide Veyro with a trusted application backend. That means a technically skilled person who modifies the client could attempt to manipulate deterministic ticket keys, leaderboard summaries, Local Explorer eligibility or engagement values.
Firestore Security Rules still enforce ownership, schema restrictions, atomic writes and allowed state transitions. Community Find moderation also reduces the impact of a forged Local Explorer submission.
For the hackathon version, I chose to build a functional no-cost architecture while clearly documenting where a production partnership would strengthen it.
How Codex changed my development process
The most useful part of working with Codex was not generating individual lines of code. It was using it as a structured development partner.
- Break the product into independent systems
- Analyse architecture decisions
- Create implementation phases
- Review Firestore access boundaries
- Test edge cases
- Find privacy risks
- Separate public and private data models
- Validate responsive behaviour
- Organise the repository into understandable modules
- Improve documentation and deployment instructions
The quality of the output depended heavily on the quality of the instructions. A vague request produced generic implementation. A structured prompt containing the product goal, technical limitations, data model, security requirements, test cases and acceptance criteria produced much stronger results.
“AI coding tools increase execution speed, but product clarity still determines what gets built.”
What I learned from building inside a moving Metro
Constraints can define the product
The moving Metro was not just the location of the sprint. It influenced the idea itself. The time limit encouraged me to focus on the smallest meaningful interaction: photograph a ticket and turn it into something useful.
Privacy should shape the architecture early
Adding privacy after completing a product is difficult. Choosing browser-side image processing, private journey records and opt-in public summaries at the beginning made later decisions clearer.
A working feature is not automatically a product
Ticket scanning was a feature. Passport, competition, discovery and contribution transformed it into a connected product experience.
Technical honesty improves credibility
It would have been easy to describe Veyro as fully verified or cheat-proof. Documenting the limitations creates a more realistic path towards production.
The best hackathon projects can continue after the deadline
The onboard sprint created the foundation, but I continued refining Veyro after the event. The goal was not simply to preserve the demo shown that night. It was to turn the concept into a usable, publicly accessible product.
What comes next
Veyro currently works as an independent traveller-focused prototype. Its broader model could support:
- College public-transport challenges
- Employee sustainable-commute programmes
- Event-based Metro campaigns
- Station exploration challenges
- Community-curated local discovery
- Multi-city transit systems
- Future transport-operator partnerships
- Stronger trusted journey validation
The larger opportunity is to make public transport feel less like an isolated transaction and more like an ongoing habit.
Try Veyro
The event began with one Metro, one laptop and two hours to build. It ended with a product idea I intend to keep developing.
“Veyro — Every ride leaves a mark.”