This is a submission for the MLH x DEV Writing Challenge
What I Built
TimiSight — discover Timișoara, one flower at a time.
Timișoara is nicknamed the City of Flowers, and TimiSight turns that
nickname into a reality. We place physical flowers around the city — 3D-printed
for now, with sculptures and installations planned — and each one carries an
NFC tag. You tap a flower with your phone to "pick it up" and add it to your
'garden', the way you'd catch a Pokémon.
Every flower stands for a real place, event, or business. Tap the one outside
the Opera House and an animated, educational popup tells you the opera's
story; tap one at a café, a museum, or a festival stall and you learn about
that spot the same way. Each scan earns points, and points convert into
real-world perks — discounts and offers from partner businesses. The city
stops being something you walk past and becomes something you explore and
collect.
There are three kinds of people in the ecosystem:
- Explorers walk the city, scan flowers, build a collection, and spend points on perks. We especially wanted kids and families connecting with the city's history while they play.
- Businesses adopt a flower, choose how it looks and what it represents, and manage the perks attached to it.
- Artists design the flowers, and the platform connects them with businesses that want one brought to life.
The end goal has always been: to strengthen the communities whithin TimiȘoara, connect people with the culture and history of the city and, why not, create a new community.
How it's built. It's a monorepo with two front ends over a shared
backend. The explorer experience is a mobile app in Expo / React Native
(Expo Router for navigation, Reanimated for the animated popups,
expo-secure-store for tokens). The presentation of the app is a Next.js
web app. Both talk to Supabase for data, with Auth0 handling identity
across the whole platform.
What I learned. The biggest lesson was that a physical hook changes
everything about how you design an app. Once "using the app" means finding a
real flower in the city and tapping it, the whole product has to pull people
outside and reward exploration — the screen is the smaller half of the
experience. That reframed decisions we'd otherwise have made by habit, from what
a "collection" feels like to why points and perks matter (they close the loop
back to real places and real businesses).
Building for three different audiences — explorers, businesses, and artists — on
one platform was the other big one. They want genuinely different things, and
the temptation is to bolt a second experience onto the first. We learned to lean
on the shared backend (one identity, one data model) while keeping the
explorer, business, and artist flows as distinct experiences, so each one stays
simple instead of becoming a compromise.
And on the engineering side: wiring one identity cleanly across a React Native
app and a Next.js web app taught us how much "boring" infrastructure — auth,
data, a shared source of truth — quietly determines whether the fun parts are
even possible. Getting that foundation right early is what let us spend the rest
of the time on the flower-collecting experience itself.
Demo
Partner Technologies
We built TimiSight on two MLH partner technologies: Auth0 for identity and
GitHub for how we actually ran the project day to day.
Auth0 — identity across the whole platform
Auth0 is the single source of truth for who a user is, and both our apps
trust it:
-
Mobile (Expo / React Native): sign-in runs through
expo-auth-sessionagainst Auth0, with tokens stored securely inexpo-secure-store. A new user then picks a role — explorer, business, or artist. - Web (Next.js): the same Auth0 identity backs the business and account experience.
-
The interesting part — Auth0 as a third-party provider for Supabase.
Instead of Supabase's built-in auth, we run Supabase in third-party auth mode:
every request carries the Auth0 access token, Supabase validates it against
Auth0's JWKS, and our row-level-security policies read the user's identity
straight from the Auth0
subclaim. One login, one identity, enforced all the way down at the database row level.
My experience: the happy path was fast — Auth0 handled the OAuth flow, token
issuance, and hosted login UI so we didn't build any of it. The depth came from
the Supabase integration: Auth0 has to issue a proper signed JWT for the API
audience Supabase expects. When that audience wasn't authorized, Auth0 returned
an opaque token and Supabase rejected it — a great forcing function to actually
understand what a JWT is. Once the audience and JWKS validation lined up, one
Auth0 session drove both apps and secured the database.
GitHub — how we stayed organized
A hackathon can easily turn into everyone editing the same files at 3 a.m. We
avoided that by treating GitHub as our project-management backbone, not just a
place to push code.
The repo: https://github.com/Saltspeddy/TimiSight
- GitHub Projects was our source of truth for work. We tracked everything as issues on a project board, so at any moment it was clear what was done, in progress, and still up for grabs — no one stepped on anyone else's task. (Our board.)
- A branch per feature. Every feature got its own branch off main, so work in progress never destabilized what already worked and we could review changes before merging.
- Progressive, scoped commits. We committed in small, meaningful steps rather than dumping everything at the end, which kept history readable and made it easy to trace when and why something changed — and to back out cleanly when a change didn't pan out.
My experience: the GitHub Projects ↔ issues ↔ branches loop gave a small
hackathon team the discipline of a much larger one. Tying branches to issues
meant our commit history doubled as a record of why each change happened, and
the board kept parallel work from colliding. For a time-boxed event, that
structure was the difference between momentum and chaos.
Hackathon Experience
Our team:
- Andrei Orbulescu
- Christian Micea
- Daniel Radu
- Dragoș Mâțu
This submission is for the 2026 Unihack hackathon. More specifically, our team participated in the MuseumsQuartier Immersive Arts track.
After basically living here for the last 48 hours, working, laughing, having fun, and getting frustrated over things that probably shouldn’t have been that serious, I can safely say that Unihack 2026 was a unique experience, worth living. It is a thoughtfully designed community project that is needed and will be here for many years to come. The late nights spent collaborating with my team, learning, and innovating will surely remain a very dear memory.
What I’ll remember most is the atmosphere: the energy in the room, the shared snacks and fun activities and workshops, and the quiet satisfaction of presenting something we’d built from scratch in just two days. Unihack gave me friendships, and confidence I didn’t have before, and I’m already looking forward to being part of it again.
Thank you to the organizers, mentors, and sponsors for making this possible. If you enjoyed reading this, please share the post. It really helps our submission get seen.
Top comments (0)