KOEBELT
All projects
Projects

Facix

An activity booking app for French associations, taken to a beta with pilot associations: Flutter, in-app payments and a serverless AWS backend.

EntrepreneurialFlutterAWSPayments
The booking flow: find an activity, register participants, pay in the appThe same booking flow on mobile and on the webBrowsing activities, searching and an activity’s details on one phone; confirming the participants, paying with a saved card and the confirmation on the other; and the web version on the laptop.
RoleCo-founder and mobile team lead
StackFlutter · Dart · flutter_stripe · AWS Lambda · Cognito · DynamoDB · S3
The problem

Associations run sports and cultural activities but take bookings through forms, phone calls and cash at the door. Facix gave them one place to publish an activity, and gave the public one place to find it, pick a date, register every participant and pay, on mobile and on the web. That meant handling money on behalf of organisations that had never taken a payment online.

Constraints
  • Built alongside our studies, with a mobile team of two to three developers
  • Card payments inside a Flutter app, where Stripe support was a community plugin rather than an official SDK
  • Several participants per booking, each with their own details
  • Running costs had to stay near zero before there was any revenue
Decisions

Serverless on AWS from the start

Lambda, Cognito, DynamoDB and S3 meant no server to patch and a bill that followed usage, which for a startup with no revenue was close to nothing. DynamoDB also pushed us to design around how the data would be read, by activity, by user and by date, before writing the screens.

Keep payment in the app, even with a weak plugin

Sending people to a web checkout would have been easier to build and worse to use, at the one step where hesitation costs a booking. We kept payment native with flutter_stripe and worked around its gaps rather than leave the app.

Design every state before building it

The Figma file covers each flow in all its states: no account, no saved card, an existing card, success and error. Agreeing on them up front let a small team build screens in parallel without rediscovering the edge cases one by one.

What I'd change

The app worked; the market did not. Associations were not ready to pay for a service, and we spent our time polishing the product instead of testing that assumption. I would put a paid pilot in front of a handful of associations before writing a single payment screen.