๐จ Booking App
February 8, 2026 ยท View on GitHub
A full-stack hotel booking application built with Flutter (Frontend) and Dart Frog (Backend) with PostgreSQL database. This application allows users to search for hotels, view details, make bookings, and leave reviews.
๐ Table of Contents
- Features
- Architecture
- Database Schema
- Prerequisites
- Installation & Setup
- Running the Application
- Technologies Used
- Troubleshooting
โจ Features
User Features
- ๐ Hotel Search - Search hotels by location with radius-based filtering
- ๐จ Hotel Listings - Browse hotels with detailed information
- ๐๏ธ Room Categories - View different room types and availability
- ๐ Booking System - Book rooms with check-in/check-out dates
- โญ Reviews & Ratings - Read and write hotel reviews
- ๐ฏ Advanced Filters - Filter by star rating, property type, price, and more
- ๐ฑ Multi-Platform - Runs on iOS, Android, Web, and Windows
Admin Features
- ๐๏ธ Hotel Management - Add, update, and delete hotels
- ๐ Data Seeding - Generate fake data for testing (1000+ hotels)
- ๐ API Secret Key - Admin operations protected by secret key
๐๏ธ Architecture
This application follows a 3-tier architecture:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PRESENTATION LAYER โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Flutter Frontend (BLoC Pattern) โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Auth Page โ โ Hotel List โ โ Hotel Details โ โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Auth Bloc โ โ Hotel Bloc โ โ Repositories โ โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ HTTP/REST API
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ APPLICATION LAYER โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Dart Frog Backend (RESTful API) โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ API Routes (v1) โ โ โ
โ โ โ /auth/signup /auth/signin /hotels /search โ โ โ
โ โ โ /hotels/:id/room /hotels/:id/review โ โ โ
โ โ โ /hotels/:id/room/:id/booking โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Middleware Layer โ โ โ
โ โ โ Auth โ DB Connection โ Services โ Logging โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Controllers & Services โ โ โ
โ โ โ AuthController HotelController BookingService โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ SQL Queries
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DATA LAYER โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ PostgreSQL Database โ โ
โ โ โโโโโโโโ โโโโโโโโโ โโโโโโโโ โโโโโโโโโโโ โโโโโโโโโ โ โ
โ โ โUsers โ โHotels โ โRooms โ โBookings โ โReviewsโ โ โ
โ โ โโโโโโโโ โโโโโโโโโ โโโโโโโโ โโโโโโโโโโโ โโโโโโโโโ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโโโโโ โ โ
โ โ โAddress โ โContact โ โDetails โ โLocalities โ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโโโโโ โ โ
โ โ โ โ
โ โ Triggers: Auto-update hotel ratings โ โ
โ โ Functions: Distance calculation (geolocation) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Frontend Architecture (Flutter BLoC)
apps/frontend/
โโโ lib/
โ โโโ app/
โ โ โโโ <feature>/ # Feature-based organization
โ โ โ โโโ bloc/ # State management (BLoC)
โ โ โ โโโ view/ # UI components & pages
โ โโโ data/
โ โ โโโ client/ # HTTP clients (e.g., Dio)
โ โ โโโ model/ # Data models
โ โ โโโ repository/ # Data repositories
โ โโโ config/ # App configuration (routes, theme)
โ โโโ l10n/ # Internationalization
Backend Architecture (Dart Frog)
apps/backend/
โโโ routes/
โ โโโ api/v1/
โ โ โโโ <resource>/ # Resource endpoints
โ โ โ โโโ index.dart # GET / POST
โ โ โ โโโ [id].dart # Dynamic routes
โ โโโ index.dart # Root endpoint
โโโ lib/
โ โโโ controller/ # Request handlers & validation
โ โโโ service/ # Business logic
โ โโโ middleware/ # Auth, logging, injection
โ โโโ models/ # Re-exports from shared packages
โ โโโ database/
โ โโโ extensions/ # *Db classes (HotelDb, UserDb, etc.)
โ โโโ tables.dart # Table name constants
Shared Packages
packages/
โโโ models/ # booking_models: Shared DTOs (Hotel, User, Booking, etc.)
โ โโโ lib/src/ # common model files
โโโ utils/ # booking_utils: Shared utilities & API constants
โโโ lib/src/
โโโ endpoints.dart # API endpoint constants
โโโ rating_utils.dart
๐๏ธ Database Schema (ER Diagram)
erDiagram
users ||--o{ bookings : makes
users ||--o{ reviews : writes
hotels ||--o{ rooms : contains
hotels ||--o{ reviews : receives
hotels ||--|| address : has
hotels ||--|| contact : has
hotels ||--|| details : has
rooms ||--o{ bookings : has
users {
varchar id PK
varchar name
varchar email
varchar password
varchar access_token
varchar profile_image
bigint phone
date date_of_birth
varchar city
varchar state
varchar country
bigint pincode
}
hotels {
integer id PK
varchar name
text description
varchar property_type
varchar chain
integer star
real rating
integer rooms_starting_price
varchar cover_image
}
address {
serial id PK
varchar street
varchar city
varchar state
varchar country
bigint pincode
real latitude
real longitude
integer hotel_id FK
}
contact {
serial id PK
bigint phone
varchar email
varchar website
integer hotel_id FK
}
details {
serial id PK
text[] amenities
text[] rules
text[] preferences
text[] hotel_images
integer hotel_id FK
}
rooms {
serial id PK
varchar category
text description
integer price
integer count
integer capacity
text[] amenities
text[] room_images
integer hotel_id FK
}
bookings {
serial id PK
varchar status
date booking_date
date checkin
date checkout
integer rooms
integer guests
integer room_id FK
varchar user_id FK
}
reviews {
serial id PK
real rating
text review
text[] guest_images
integer hotel_id FK
varchar user_id FK
}
localities {
serial id PK
text name
real latitude
real longitude
}
Key Relationships
- Users can make multiple Bookings and write multiple Reviews
- Hotels have one Address, one Contact, and one Details record
- Hotels contain multiple Rooms and receive multiple Reviews
- Rooms can have multiple Bookings
- Localities are used for geolocation-based search
Database Functions & Triggers
distance()- Calculates distance between two coordinates (geolocation search)update_hotel_rating()- Automatically updates hotel rating when a review is added
๐ Prerequisites
Before you begin, ensure you have the following installed:
- Flutter SDK: >= 3.35.0
- Dart SDK: >= 3.9.0 (comes with Flutter)
- PostgreSQL: >= 15.x
- Docker & Docker Compose: (Optional, for containerized setup)
- Melos: Install with
dart pub global activate melos - Dart Frog CLI: Install with
dart pub global activate dart_frog_cli - Very Good CLI: Install with
dart pub global activate very_good_cli
System Requirements
- OS: macOS, Linux, or Windows
- RAM: Minimum 8GB recommended
- Storage: 5GB free space
๐ Installation & Setup
1. Initialize Workspace
Step 1.1: Clone the Repository
git clone https://github.com/G1Joshi/Booking-App.git
cd Booking-App
Step 1.2: Bootstrap Workspace
This command installs dependencies for all packages and links them.
melos run install
2. Backend Setup
Step 2.1: Initialize Database Schema
To initialize the database, you first need to start the backend services (which includes the database container).
- Start Backend: Follow the instructions in Running the Application to start the backend.
- Initialize Schema: Once the backend is running, run the following SQL scripts in order:
apps/backend/queries/
โโโ drop/
โโโ tables/
โโโ functions/
โโโ triggers/
โโโ seed/
๐ฎ Running the Application
This project uses Melos to manage scripts. You can run the backend and frontend using the following commands from the root of the project.
Start Backend Server
melos run run:backend
This command will:
- Start the Docker containers (PostgreSQL).
- Start the Dart Frog development server on port
8090.
Server will start at: http://localhost:8090
Start Frontend Application
melos run run:frontend
This command will run the frontend in Chrome (Web) with the development flavor.
๐ ๏ธ Technologies Used
Frontend
| Technology | Purpose |
|---|---|
| Flutter | Cross-platform UI framework |
| Dart | Programming language |
| flutter_bloc | State management (BLoC) |
| Dio | HTTP client for API calls |
| shared_preferences | Local storage for tokens |
| flutter_rating_bar | Rating UI component |
| shimmer | Loading shimmer animations |
| equatable | Value equality for BLoC |
| intl | Internationalization & formats |
Backend
| Technology | Purpose |
|---|---|
| Dart Frog | Backend REST API framework |
| Dart | Programming language |
| PostgreSQL | Relational database |
| postgres | PostgreSQL driver for Dart |
| uuid | UUID v4 for access token generation |
DevOps
| Technology | Purpose |
|---|---|
| Docker | Containerization |
| Docker Compose | Multi-container orchestration |
| Adminer | Database management tool |
| Melos | Monorepo management |
๐งช Testing
Backend Tests
melos run test:backend
Frontend Tests
melos run test:frontend
Shared Models Tests
melos run test:models
Shared Utils Tests
melos run test:utils
๐ Troubleshooting
Backend Issues
Issue: Database connection failed
Solution:
1. Check if PostgreSQL is running: pg_isready
3. Ensure database exists: psql -l
Frontend Issues
Issue: Cannot connect to backend
Solution:
1. Verify backend is running on localhost:8080
2. Check API_URL in lib/config/apis.dart
3. For physical devices, use network IP instead of localhost
๐จโ๐ป Author
Jeevan Joshi (@G1Joshi)
๐ Acknowledgments
- Very Good Ventures for Flutter best practices
- Dart Frog Team for the amazing backend framework
- Invertase for
Melosto manage monorepo - Flutter Community for continuous support
Happy Coding! ๐