- My Task is to build two apps ... Admin & User apps.
- I created the features as Flutter packages to be reusable in any project.
- I used Melos to handle the mono repo logic and implement two apps in the same repo.
- I used Supabase to handle authentication & handle validation [Admin or User]
- I used Supabase as a backend server side to store & handle data.
- User Can view available cars & can book them with a specific Date.
- The Car can't be booked twice for the same date range.
- Admin Can apply (CRUD) operations for the car.
- Allow users to search for available cars.
- Car Can't be booked twice at the same time.
- Admin can view all booking history but user can view only his booking history.
- If the admin deletes a car, all the related bookings will be canceled.
- Reference booking_table to car_table using car_id as a foreign key.
- Melos - To Implement mono repos concept
- Free & Open Source
- Very Easy to use
- Amazing UI
- Animation using Custom Painter
- Supabase Authentication (Login, Register & Logout)
- Validation to not allowing users in any app to log to the other app
- Supabase Storage
- Cubit as State Mangement
- Implement Features as a Flutter Packages.
- The Admin can do (CRUD) operation on car_table.
- The User Can manage bookings with filter Dates.
- Search feature.
- Hydrated bloc to cache the user state.
- Cloud functions to trigger the car_table with booking_table.
Screen.Recording.2024-07-27.at.12.31.59.AM.mov
user.mov
Screen.Recording.2024-07-27.at.12.34.46.AM.mov
![Screenshot 2024-07-27 at 12 38 45 AM](https://private-user-images.githubusercontent.com/98196426/352671295-9eab803b-b20a-4856-8e3b-2a2c1def0be9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzU4MzYsIm5iZiI6MTczOTU3NTUzNiwicGF0aCI6Ii85ODE5NjQyNi8zNTI2NzEyOTUtOWVhYjgwM2ItYjIwYS00ODU2LThlM2ItMmEyYzFkZWYwYmU5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMjUzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMzYWYzMjQ5ZjQxMWU5NDI4ZGYzNjhmNWIwNDUyMGFkY2YxOGVmZDFiNDNlMTVlZjE2ZmYxNzg3NDg3YmY2YjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.dBepvSfljtoodEhSBr5MhwgfpRmZ7l46TzYSX-Xo3ug)
![Screenshot 2024-07-27 at 12 38 56 AM](https://private-user-images.githubusercontent.com/98196426/352671287-20151520-7b22-4ac4-88a5-de381607c145.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzU4MzYsIm5iZiI6MTczOTU3NTUzNiwicGF0aCI6Ii85ODE5NjQyNi8zNTI2NzEyODctMjAxNTE1MjAtN2IyMi00YWM0LTg4YTUtZGUzODE2MDdjMTQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMjUzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFkZTNiYmY4Y2FiMDE4NzMwNTIyZWIwNDRmMWNmYmMzNzU5NTE0MGYzZjYwN2FjMGUwMTJhZmQ5MWE5ZWZmNjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.1mayFWwjy6_xusLwQdZxSeDCafmNHIUFLI7hgmt9d6o)
![Screenshot 2024-07-27 at 12 39 02 AM](https://private-user-images.githubusercontent.com/98196426/352671284-3a7a74c2-a183-4a0d-a754-06803a09e569.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzU4MzYsIm5iZiI6MTczOTU3NTUzNiwicGF0aCI6Ii85ODE5NjQyNi8zNTI2NzEyODQtM2E3YTc0YzItYTE4My00YTBkLWE3NTQtMDY4MDNhMDllNTY5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMjUzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg1OWQzMDUzYjRjMjEyZjc0Y2U1MWFkYTVkODk5NTlhNzhiYjgwMTNjNWE0YmMyNjViMGE2NWMxYTY5OThmYTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.fsqAb8H4Oec1L8yQyxDENQmmvArwY-3AZz2c4yM6zVY)
![Screenshot 2024-07-27 at 12 39 27 AM](https://private-user-images.githubusercontent.com/98196426/352671278-c2fa91c3-0e2c-4fd4-9f07-b482203aea61.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzU4MzYsIm5iZiI6MTczOTU3NTUzNiwicGF0aCI6Ii85ODE5NjQyNi8zNTI2NzEyNzgtYzJmYTkxYzMtMGUyYy00ZmQ0LTlmMDctYjQ4MjIwM2FlYTYxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMjUzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA1MjNkN2M4NDIwMmI2MDgzYjM2M2VhZjFmZGE1NDk3MjgwMDg5ZTZlYzMxMDM4YTk4YjNjN2FjZTcyMmQ4MjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vduksKRNyzw_Mt6mbDicddLKPn8rgo6oHmdmrSKUpjg)
You will notice here that each user is stored with his role [admin - user] and authorized access to which app based on his rule
![Screenshot 2024-07-27 at 12 40 38 AM](https://private-user-images.githubusercontent.com/98196426/352671273-54016344-3945-49b8-856a-ab16f661ec7a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzU4MzYsIm5iZiI6MTczOTU3NTUzNiwicGF0aCI6Ii85ODE5NjQyNi8zNTI2NzEyNzMtNTQwMTYzNDQtMzk0NS00OWI4LTg1NmEtYWIxNmY2NjFlYzdhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMjUzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQwZGY4MTM1ZTU4YWNlNzEwMjc4MjRiMzc0ZDgwZGE0ODgyMzVmMWM4NTNkZjU1M2VlYTY4MGRmMDAyYmU2ZjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.pn5S4CeonrAv297rTvcvK-aFuCbhcL8VgQQDFwyAtt8)
![Screenshot 2024-07-27 at 12 40 49 AM](https://private-user-images.githubusercontent.com/98196426/352671267-db4244e8-7df5-40db-9867-2c30db9cbb6d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NzU4MzYsIm5iZiI6MTczOTU3NTUzNiwicGF0aCI6Ii85ODE5NjQyNi8zNTI2NzEyNjctZGI0MjQ0ZTgtN2RmNS00MGRiLTk4NjctMmMzMGRiOWNiYjZkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIzMjUzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJiNzc3YWY5YzAzYzY5ZWYzMDZhODkwMzNiMTNlNWEyYzI0YzEzMmI2MDY4MzZiMDVhZWYzYzVjMzU2MzIxMzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.WaFs6q3qFXxbNO9agBVWoBF5u8Saxu6I1bn_kQiZRoQ)