Bike repair in Sweden still runs on phone calls, paper tags and memory.
It started in October 2025, while I was building a website for a local bike repair shop. Sitting in the workshop, I watched the phone ring nonstop, paper tags pile up, and the mechanic stop mid-repair to answer the same question again.
Cyclists have no idea when their bike is ready or what it will cost. Mechanics lose time answering the same questions with greasy hands. One Uppsala workshop takes after-hours drop-offs as a paper note in a plastic bag, pushed through the mail slot.
I set out to design something both sides would actually use during a busy spring season: a cyclist app that asks only what a mechanic needs, and a mechanic app that works one-handed between two repairs.
Independent workshops lose time and trust to phone calls and guesswork, while cyclists wait without knowing when or what they will pay. No tool on the market is built for a mechanic’s hands and a walk-in customer’s patience.

Two apps, one job: get the bike fixed without anyone picking up the phone.
Each side gets its own app because each side has a different job to do. The cyclist wants to know where is my bike. The mechanic wants to get to the next bike. One shared job record connects them.
Status is the product
- Book a repair or drop in with a QR code, no install needed
- Approve the mechanic’s price proposal in one tap
- See where the bike is in the process, without calling
- Get a proper digital receipt you can find again

Thumb-first, glove-tolerant
- Inbox → assignments → done, nothing more
- Every primary action in a bottom sheet, 40 px+ targets
- Walk-in jobs arrive by themselves from the counter QR
- Set or change the price with the customer kept in the loop

I didn’t run a study. I stood at the counter and watched.
From October 2025 to January 2026 I interviewed and observed mechanics in five bike workshops around Uppsala, then kept testing in the field: watching mechanics take walk-ins, listening to what cyclists ask, and shipping changes the same week. Five things surprised me.
- Mechanics never sit down.Anything needing two hands or more than three taps gets skipped. The app has to work like a stamp, not a form.
- Silence is scarier than price.Not knowing whether the bike was ready worried cyclists most. Status beats features.
- Walk-ins are the real volume.A booking app that only handles pre-booked jobs misses the customer already at the counter.
- University towns are international.Around a third of walk-ins at one shop were students with non-Swedish phone numbers.
- Shops feared losing customers.Mechanics worried the app would show their customers other workshops. That fear shaped a whole feature.


Six questions narrowed a year of ideas to three bets.
- HMW register a walk-in without putting down the tool in their hand?
- HMW give mechanics control over price without making the customer wait?
- HMW tell a cyclist exactly where their bike is, without anyone calling?
- HMW make a Swedish app welcoming to someone who arrived last week?
- HMW keep the marketplace open while making loyalty effortless?
- HMW get a first-time customer from QR code to confirmed job in under a minute, with no install?
Design for the walk-in first, the pre-booking second.
Status updates are the product. The booking form is the price of entry.
Never lock the cyclist in. Win loyalty with a better way back.
The product that shipped is mostly the product that broke in a real shop and got fixed.
A customer at the counter, a wheel in the stand
Observed: version one assumed every job started as a booking. In the shop, most started as a person walking in, while the mechanic had both hands busy.
Decided: flip the entry point. A QR code at the counter opens a short web form on the customer’s own phone, and the job appears in Cykelworkshop without the mechanic touching anything.
Changed: the mechanic’s part of a walk-in went from about two minutes of typing to zero. The first real customer used it within an hour of the sign going up.


Loyalty without lock-in
Observed: two workshops asked if the app could hide other shops from their customers. The fear was real, but restricting cyclists would make the app worse for the people it serves.
Decided: keep the marketplace open and make the way back effortless. The last workshop a cyclist used becomes “your workshop”: pre-selected, one tap to book again, and shown to the mechanic as a returning customer.
Changed: mechanics got the reassurance they asked for, and cyclists kept their freedom.
“Didn’t I just type that?”
Observed: a new customer typed her name and number at the counter, then the app asked her to create an account and type both again. She laughed, the mechanic apologised, and I felt it in my stomach.
Decided: what a person has told us travels with them. Verification should feel like a confirmation, not a second form.
Changed: the code is sent the moment they press send, and the only next step is “confirm your number”.


Welcoming someone who arrived last week
Observed: a workshop near the university said international students couldn’t sign up. The phone field assumed Sweden and rejected everything else with a vague error.
Decided: one phone component everywhere, with a country selector that puts Sweden and its neighbours first and accepts numbers from anywhere. The apps also follow the phone’s language: Swedish or English.
Changed: a whole group of customers went from “can’t use it” to “works like every other app”, within a week of the feedback.
The wrong number on a walk-in
Observed: when a customer mistyped their number at the counter, the job could land on a stranger’s phone, and neither side had a way to say so.
Decided: design the recovery on both sides. The cyclist gets a clear “Not my bike?” way out. The mechanic sees the job flagged as a wrong number, with a one-tap way to correct it.
Changed: a silent failure became a visible, fixable state, without a phone call.


Good Swedish, not just correct Swedish
Observed: good Swedish for a non-native speaker isn’t the same as good Swedish. Native speakers flagged phrases that were correct but stiff.
Decided: every string a cyclist reads on the way to paying gets native review, and the cyclist’s words stay separate from the mechanic’s.
Changed: eight strings in the first round, and the cyclist side now reads like it was written in Sweden.
From a shop visit to two live apps.
- Oct 2025Spark
Spotted the problem while building a local bike shop’s website.
- Oct 2025 – Jan 2026Research
Interviews and observation in five bike workshops around Uppsala.
- Feb 2026Design
Flows, screens and the design system for both apps in Figma.
- May 2026Web build
Built the web app with AI-assisted tools and tested it in the field.
- Aug 2026Native apps
Wrapped both apps for iOS and Android.
- Sept 2026Pilot & launch
Two Uppsala workshops onboarded as pilots. Live on the App Store, Google Play and web, in Swedish and English.
- NowGrow
Visiting independent workshops across Uppsala to learn how jobs come in today.
Early, real, and under NDA. Here’s what I can share.
Live on the App Store, Google Play and web within twelve months of the first sketch, as a solo, non-engineering founder.
From the QR sign going up to the first self-service walk-in customer.
Mechanic effort per walk-in, down from typing a full form.
From pilot feedback to shipped fix, most of the time. The number I’m proudest of.
Designing for a shop counter is nothing like designing at a desk.
The second time a user has to type the same thing is the moment you lose them. And saying no to a customer’s request can be the best product decision of the year, if you replace it with something they need more.
My role, honestly: I owned research, UX, UI, copy, testing and go-to-market, and used AI-assisted development tools to build and iterate the product myself. That meant I could put design decisions in front of real mechanics quickly, instead of waiting on a build cycle.
Built with: Figma for design, AI-assisted development for the build, and native wrappers for iOS and Android.