← All work

Dribe

Car subscription app for the Danish market. End-to-end mobile product covering vehicle browsing, booking, physical pickup with PIN-based unlock, and return. Membership tiers, co-drivers, loyalty rewards, and Stripe payments.

Overview

Dribe was a Danish car subscription platform built around a real market problem: in Denmark, owning a car costs roughly twice the purchase price once taxes and insurance are factored in. Dribe's answer was a membership-based fleet model that let people drive without owning. The mobile app was the primary consumer touchpoint, sitting alongside a B2B portal and admin tooling as part of a larger platform.

In the app, members browsed available vehicles, booked them, physically located and unlocked the car using an in-app PIN, drove, and returned it, all without talking to a person. I built this at Mutual Mobile, the agency that designed and shipped the product for Dribe, working alongside a large international team across engineering, design, and product.

Three membership tiers shaped the experience: guests could book without registering, warm members had a basic profile, and hot members completed identity verification for instant booking access. The pickup and return flows were the most technically involved, with geofencing to confirm the user was near the car, a checklist-driven inspection sequence, PIN entry for lock and unlock, and a confirmation that the vehicle was safely back in the system.

The app shipped on iOS and Android with six deployment environments, 110 screens, and deep third-party integrations for payments, identity verification, and push notifications.

At a glance

Role
Engineer at Mutual Mobile
Era
2017–2018
Platform
iOS · Android · React Native 0.49
Stack
React Native · MobX · Stripe · Firebase · NemID · Jumio · Lottie
Dribe vehicle browsing grid showing available car inventory
Dribe date and vehicle type filter panel

Key features

  • Vehicle gallery and booking. Browse everyday cars and special ride categories with a snap carousel, filter by date and vehicle type, review a commercial agreement, and confirm with Stripe payment, all in one flow.
  • Geofenced pickup. The pickup flow used GPS geofencing to detect when a user was physically near their car before issuing the unlock PIN. Location confirmation gated the entire sequence.
  • PIN-based lock/unlock. Vehicles were accessed via a time-sensitive PIN displayed in-app. The flow guided users through locating the car, completing a pre-trip inspection checklist, entering the PIN, and receiving confirmation the vehicle was mobilized.
  • Return flow. Structured return checklist, door-lock confirmation, PIN entry, and a receipt screen. Required the user to physically close the loop in the same sequence as pickup.
  • Multi-tier membership. Guest checkout, basic (warm) onboarding, and a premium (hot) tier requiring NemID identity verification and Jumio document scanning. Each tier unlocked different booking capabilities.
  • Co-drivers. Members could add additional drivers to active bookings, with their own verification requirements.
  • Loyalty rewards. Dribers Club earn-and-redeem points program, with its own UI flow for tracking and spending points.
  • Subscription management. My Garage view (upcoming, current, history) gave members a full picture of their rentals and membership status.
Dribe vehicle list view showing a VW Golf booking option

Technical highlights

  • MobX with singleton flow controllers. State management was MobX with six stores for domain areas (user, vehicles, garage, guest order, filters). Each major flow (order, pickup, return, hot-user onboarding) had its own singleton FlowStateController that owned navigation transitions, intermediate form state, and API calls for that flow. This made complex multi-step sequences debuggable and independently testable.
  • 110 screens organized by flow. Screens lived in flow-based directories (orderFlow/, pickupFlow/, returnFlow/, hotUserFlow/, etc.) rather than a flat structure. Navigation used React Native Router Flux with route modules per flow.
  • Real integration depth. Stripe for payments, Firebase for push notifications, Jumio for KYC selfie and document scanning, NemID (Danish government e-ID) via iframe-based integration, HockeyApp for crash reporting and OTA distribution, AWS S3 for photo uploads, Google Maps for geofencing.
  • 179-component UI kit with Storybook. The design system lived in a standalone Storybook setup, isolated from app logic. Every component was browsable and testable in isolation.
  • Six environments. Development, QA, staging, staging-internal, and production environments, each with their own API endpoints, service credentials, and analytics keys, wired through react-native-config.
  • Lottie animations. Complex transition animations used Lottie (Airbnb's format) for smooth, designer-authored motion without custom code.
  • Localization infrastructure. Full Lokalise integration for Danish/English string management, with CLI tooling for pulling updated translations.

Team

Creative Director
Orlando Ramirez
UX Lead
Ruidi Tan
UI Lead
Eric White
UI Design
Carlos Menchaca
Animation
Danny Garcia
Lead Engineer
David Dulak