Skip to content
Back to projects

Mobile app · Flutter

Barbú, barbershop app

Booking app for a barbershop, built by a team of 4: Flutter, Firebase Auth and Firestore, booked slots checked in real time and an email confirmation through n8n.

My role
Most of the app: Firebase, first screens, login, booking and n8n
Period
2026 · Mobile Devices course
Status
in progress
Stack
Flutter · Firestore · Firebase Auth · n8n · Dart

30-second summary

Goal
An app to organize and automate haircut bookings for a local barbershop, as a project for the Mobile Devices course.
Solution
Login with Firebase Auth, a 3-step booking flow that checks Firestore for slots already taken, a phone reminder 1 hour before and a webhook so n8n sends the confirmation email.
Result
A prototype with the full booking flow, history and notices. Loyalty and Products were still in progress. There are no usage metrics.

Context

Barbú is an app prototype for a local barbershop: customers create an account, pick a service, a barber and a free slot, and follow their bookings on their phone.

It was a team project for the Mobile Devices course, built by Carlos, Gustavo Alves, Henrique and Kendy.

My role

I built most of the app: the Firebase integration (Auth and Firestore), the first screens, login, booking and the n8n integration.

How it works

  1. 01LoginFirebase Auth with email and password
  2. 02BookingService, barber, day and time
  3. 03FirestoreReads booked slots and writes to bookings
  4. 04ReminderLocal notification 1 hour before
  5. 05n8nThe webhook becomes the confirmation email
From login to the confirmation email.
  • Account. Sign-up creates the user in Firebase Auth and stores name and phone in users/{uid}. The Firestore rules let each person read and change only their own data and bookings.
  • Real-time slots. When a day is picked, the app queries bookings for that barber on that date and only shows free slots.
  • On confirm. The app writes the booking to bookings, creates a notice in notifications/{uid}/items (shown in the Notices tab), schedules the local reminder and sends the n8n webhook the name, email, date, time, barber and service.
  • Afterwards. The history lets you cancel (the status changes to "cancelado"), and past bookings show as done.

Try it

The booking app we built with Flutter and Firebase, recreated for the browser. Sign in as a guest, book a slot and see what the app saves to Firestore, the reminder it schedules and the webhook it sends to n8n.

Web prototype recreated from the Flutter app · fictional data

What matches the app and what is simulated

  • Same as the app: the screens, colors, services, barbers, time slots, the 3-step booking and the format of the bookings document and the n8n webhook.
  • Simulated: login accepts anything, booked slots are drawn per barber and day, and nothing leaves your browser. The data is gone when the page reloads.
  • Unlike the app: in the demo, today's slots that have already passed are disabled, and booked slots are struck through instead of disappearing from the grid.
  • The confirmation email is an illustrative preview: the n8n workflow is not in the repository.
  • Loyalty and Products show as in progress, as in the app.
  • The original app is in Portuguese; this version is translated.

Limits and next steps

  • Loyalty, Products and the admin panel were left as "coming soon" in the app.
  • The webhook points to a local n8n (localhost), so the confirmation email only goes out with n8n running on the same machine.
  • The slot query doesn't filter by status, so a cancelled slot still shows as booked. And the write doesn't use a transaction: two customers confirming the same slot at the same moment would both be saved. Those are the first fixes I'd make.