Note: When a client books a master and the system shows the slot as occupied, that's a conversion loss. A typical mistake: parallel fetching of service, master, and time. Result – booking conflict. In our years of work, we've implemented 20+ projects for salons and studios, and without a properly designed booking flow, the app doesn't work. According to project statistics, up to 30% of bookings are lost due to slot conflicts – we reduce that to 2%.
How We Solve the Booking Conflict Problem
We implement the soft reserve pattern. When a user selects a slot, it is locked for 3 minutes – a countdown timer is displayed on the screen. If the time expires, the state resets, and the user must choose a new slot. In Flutter, this is done via FutureBuilder with a timer: the TimeSlotChosen state locks the slot, Timer.run resets it on expiration. This eliminates double booking without extra API calls. Thanks to soft reserve, the number of lost bookings decreases significantly.
| Without soft reserve | With soft reserve |
|---|---|
| Booking conflicts | Slot locked for 3 minutes |
| Double bookings | Timer reset |
| Repeated API calls | One call on selection |
Why the Correct Booking Flow Matters
Step sequence: service → master → time. Each request depends on the previous. On Flutter, we use BLoC with states ServiceSelected, MasterLoaded, TimeSlotChosen. Parallel calls are forbidden. For example, when a service is selected, the system sends /masters?service_id=X, then on master selection – /slots?master_id=Y&service_id=X. This ensures slots match masters and services.
CRM Integration: Reducing Development Time by 30%
We connect the backend to an existing CRM via REST or GraphQL. YCLIENTS and Dikidi have open APIs. For custom CRMs, we implement our own bus on Laravel with queues. This reduces backend development time by 30%. All booking logic stays on the CRM side – the app only displays data. If your salon uses another CRM, contact us – we adapt the solution.
Master Card and Conversion Growth
Photo portfolio is a key element. We use GridView with CachedNetworkImage for lazy loading. Images from CDN, compressed to 200 KB – 5 MB originals kill UX. Rating and reviews load with pagination via ScrollController.addListener. The master profile opens in 1.2 seconds – 15% faster than the market average. Booking conversion increases by 25% with quality photos.
Loyalty System and Promotions
Points are accrued after each visit. State updates via AnimatedCounter and TweenAnimationBuilder. Promotions are delivered through FCM push and In-App Banner. Loyalty data is stored in PostgreSQL separately from CRM – this simplifies scaling. Our clients note a 40% increase in repeat visits after implementing a points system.
How to Implement Push Notifications Without Bugs
- Configure projects in Firebase Console and Apple Developer.
- Create server key FCM and APNs certificate.
- On the client, subscribe to topics (e.g.,
salon_123). - Send pushes via Laravel backend with library
firebase/php-jwt. - Test on real devices – emulator does not pass APNs.
App Store Review Guidelines Section 4.2 require correct handling of push notifications and subscriptions. If you need help setting up push notifications, get a consultation – we'll show you how to avoid common mistakes. An average salon sends over 100,000 push notifications monthly.
Technical Stack
| Component | Technology |
|---|---|
| iOS | Swift 5.9+, SwiftUI |
| Android | Kotlin, Jetpack Compose |
| Cross-platform | Flutter 3.x + BLoC |
| Backend | Laravel + PostgreSQL + Redis |
| Push | Firebase Cloud Messaging |
| Analytics | Firebase Analytics |
| Authentication | Firebase Auth |
| Payments | StoreKit 2 (iOS), Billing 6 (Android) |
Comparison of Flutter and Native Development for Beauty Salons
| Parameter | Flutter (recommended) | Native iOS/Android |
|---|---|---|
| MVP development speed | 8–12 weeks | 12–18 weeks |
| UI performance | Sufficient for catalogs and booking | Higher for complex animations |
| Single codebase | One codebase (Dart) | Two projects (Swift + Kotlin) |
| Budget | Save up to 40% | Higher |
Our Process
- Analysis of salon business processes and current CRM
- Architecture design with soft reserve and queues
- UX/UI design focused on booking conversion
- Development in Flutter or native (iOS/Android)
- Integration with payment systems and push services
- Testing on real scenarios
- Documentation and staff training
- Submission to App Store and Google Play (publication support)
- Post-launch support and code warranty
Contact us for a project estimate. We'll assess infrastructure, timeline, and development cost. Book a consultation – we'll explain how to build an app from scratch or integrate with your current CRM.
Timeline Estimates
- MVP with basic functionality: 8–12 weeks
- Full-featured app with complex CRM integration: 12–18 weeks
- Timeline depends on customization and required integrations; exact estimate after analysis.
Common Mistakes to Avoid
- Parallel fetching of service, master, and time without proper sequencing leads to booking conflicts.
- Not using soft reserve results in double bookings and lost clients.
- Storing large images without compression on CDN degrades UX and conversion.
- Ignoring push notification handling requirements in app store guidelines causes rejection.
- Mixing loyalty data in the same database as CRM can create scalability issues.
Let us help you build a high-converting beauty salon app. Get in touch for a consultation.







