Wild Oasis is a web application for managing cabin bookings, providing features for checking availability, booking management, and user settings. The project leverages modern tools and a modular design for scalability.
- User Authentication: Secure login, signup, and password management with Supabase.
- Booking Management: View, create, and manage bookings with status updates.
- Context & Compound Components: Used to manage shared state and reusable UI elements.
- React Router: For smooth, dynamic navigation across pages.
- Search and Filtering: Search Params allow precise filtering in the booking dashboard.
- State Management: Implemented Context API to manage global state effectively across components, ensuring data consistency.
- Real-Time Data Syncing: Integrated React Query and Supabase for efficient, real-time data updates.
- Modular Design: Utilized compound components and styled-components to streamline UI while maintaining flexibility.
- Scalability: Built a maintainable structure for easy scaling and feature addition.
βββ Wild-Oasis/
βββ README.md
βββ index.html
βββ package-lock.json
βββ package.json
βββ public
β βββ default-user.jpg
β βββ logo-dark.png
β βββ logo-light.png
β βββ vite.svg
βββ src
β βββ App.jsx
β βββ data
β β βββ Uploader.jsx
β β βββ cabins
β β β βββ cabin-001.jpg
β β β βββ cabin-002.jpg
β β β βββ cabin-003.jpg
β β β βββ cabin-004.jpg
β β β βββ cabin-005.jpg
β β β βββ cabin-006.jpg
β β β βββ cabin-007.jpg
β β β βββ cabin-008.jpg
β β βββ data-bookings.js
β β βββ data-cabins.js
β β βββ data-guests.js
β βββ features
β β βββ authentication
β β β βββ LoginForm.jsx
β β β βββ SignupForm.jsx
β β β βββ UpdatePasswordForm.jsx
β β β βββ UpdateUserDataForm.jsx
β β β βββ UserAvatar.jsx
β β βββ bookings
β β β βββ BookingDataBox.jsx
β β β βββ BookingDetail.jsx
β β β βββ BookingRow.jsx
β β β βββ BookingTable.jsx
β β β βββ BookingTableOperations.jsx
β β β βββ useBookings.js
β β βββ cabins
β β β βββ AddCabins.jsx
β β β βββ CabinRow.jsx
β β β βββ CabinTable-v1.jsx
β β β βββ CabinTable.jsx
β β β βββ CabinTableOperations.jsx
β β β βββ CreateCabinForm.jsx
β β β βββ useCabins.js
β β β βββ useCreateCabin.js
β β β βββ useDeleteCabin.js
β β β βββ useEditCabin.js
β β βββ check-in-out
β β β βββ CheckinBooking.jsx
β β β βββ CheckoutButton.jsx
β β β βββ TodayActivity.jsx
β β β βββ TodayItem.jsx
β β βββ dashboard
β β β βββ DashboardBox.jsx
β β β βββ DashboardFilter.jsx
β β β βββ DashboardLayout.jsx
β β β βββ DurationChart.jsx
β β β βββ SalesChart.jsx
β β β βββ Stat.jsx
β β βββ settings
β β βββ UpdateSettingsForm.jsx
β β βββ useSettings.js
β β βββ useUpdateSettings.js
β βββ hooks
β β βββ useLocalStorageState.js
β β βββ useMoveBack.js
β β βββ useOutsideClick.js
β βββ main.jsx
β βββ pages
β β βββ Account.jsx
β β βββ Bookings.jsx
β β βββ Cabins.jsx
β β βββ Dashboard.jsx
β β βββ Login.jsx
β β βββ PageNotFound.jsx
β β βββ Settings.jsx
β β βββ Users.jsx
β βββ services
β β βββ apiBookings.js
β β βββ apiCabins.js
β β βββ apiSettings.js
β β βββ supabase.js
β βββ styles
β β βββ GlobalStyles.js
β βββ ui
β β βββ AppLayout.jsx
β β βββ Button.jsx
β β βββ ButtonGroup.jsx
β β βββ ButtonIcon.jsx
β β βββ ButtonText.jsx
β β βββ Checkbox.jsx
β β βββ ConfirmDelete.jsx
β β βββ DataItem.jsx
β β βββ Empty.jsx
β β βββ ErrorFallback.jsx
β β βββ FileInput.jsx
β β βββ Filter.jsx
β β βββ Flag.jsx
β β βββ Form.jsx
β β βββ FormRow.jsx
β β βββ Header.jsx
β β βββ Heading.jsx
β β βββ Input.jsx
β β βββ Logo.jsx
β β βββ MainNav.jsx
β β βββ Menus.jsx
β β βββ Modal.jsx
β β βββ Pagination.jsx
β β βββ Row.jsx
β β βββ Select.jsx
β β βββ Sidebar.jsx
β β βββ SortBy.jsx
β β βββ Spinner.jsx
β β βββ SpinnerMini.jsx
β β βββ Table.jsx
β β βββ TableOperations.jsx
β β βββ Tag.jsx
β β βββ Textarea.jsx
β βββ utils
β βββ helpers.js
βββ vite.config.js
WILD-OASIS/
__root__
package-lock.json β― REPLACE-ME
vite.config.js β― REPLACE-ME
package.json β― REPLACE-ME
index.html β― REPLACE-ME
src
App.jsx β― REPLACE-ME
main.jsx β― REPLACE-ME
features
cabins
CabinTableOperations.jsx β― REPLACE-ME
CabinRow.jsx β― REPLACE-ME
useCabins.js β― REPLACE-ME
CreateCabinForm.jsx β― REPLACE-ME
CabinTable-v1.jsx β― REPLACE-ME
CabinTable.jsx β― REPLACE-ME
useCreateCabin.js β― REPLACE-ME
useEditCabin.js β― REPLACE-ME
AddCabins.jsx β― REPLACE-ME
useDeleteCabin.js β― REPLACE-ME
bookings
BookingTable.jsx β― REPLACE-ME
BookingDetail.jsx β― REPLACE-ME
useBookings.js β― REPLACE-ME
BookingTableOperations.jsx β― REPLACE-ME
BookingDataBox.jsx β― REPLACE-ME
BookingRow.jsx β― REPLACE-ME
authentication
UserAvatar.jsx β― REPLACE-ME
SignupForm.jsx β― REPLACE-ME
LoginForm.jsx β― REPLACE-ME
UpdatePasswordForm.jsx β― REPLACE-ME
UpdateUserDataForm.jsx β― REPLACE-ME
settings
useUpdateSettings.js β― REPLACE-ME
useSettings.js β― REPLACE-ME
UpdateSettingsForm.jsx β― REPLACE-ME
dashboard
SalesChart.jsx β― REPLACE-ME
DashboardLayout.jsx β― REPLACE-ME
DurationChart.jsx β― REPLACE-ME
Stat.jsx β― REPLACE-ME
DashboardFilter.jsx β― REPLACE-ME
DashboardBox.jsx β― REPLACE-ME
check-in-out
TodayItem.jsx β― REPLACE-ME
CheckinBooking.jsx β― REPLACE-ME
TodayActivity.jsx β― REPLACE-ME
CheckoutButton.jsx β― REPLACE-ME
styles
GlobalStyles.js β― REPLACE-ME
hooks
useOutsideClick.js β― REPLACE-ME
useLocalStorageState.js β― REPLACE-ME
useMoveBack.js β― REPLACE-ME
pages
Settings.jsx β― REPLACE-ME
Account.jsx β― REPLACE-ME
Login.jsx β― REPLACE-ME
Dashboard.jsx β― REPLACE-ME
PageNotFound.jsx β― REPLACE-ME
Cabins.jsx β― REPLACE-ME
Users.jsx β― REPLACE-ME
Bookings.jsx β― REPLACE-ME
utils
helpers.js β― REPLACE-ME
services
apiSettings.js β― REPLACE-ME
apiBookings.js β― REPLACE-ME
supabase.js β― REPLACE-ME
apiCabins.js β― REPLACE-ME
ui
Input.jsx β― REPLACE-ME
Tag.jsx β― REPLACE-ME
ButtonGroup.jsx β― REPLACE-ME
ErrorFallback.jsx β― REPLACE-ME
Menus.jsx β― REPLACE-ME
Empty.jsx β― REPLACE-ME
Button.jsx β― REPLACE-ME
Header.jsx β― REPLACE-ME
Pagination.jsx β― REPLACE-ME
AppLayout.jsx β― REPLACE-ME
ConfirmDelete.jsx β― REPLACE-ME
Filter.jsx β― REPLACE-ME
MainNav.jsx β― REPLACE-ME
Modal.jsx β― REPLACE-ME
Table.jsx β― REPLACE-ME
Logo.jsx β― REPLACE-ME
Sidebar.jsx β― REPLACE-ME
Flag.jsx β― REPLACE-ME
SortBy.jsx β― REPLACE-ME
TableOperations.jsx β― REPLACE-ME
Textarea.jsx β― REPLACE-ME
ButtonIcon.jsx β― REPLACE-ME
SpinnerMini.jsx β― REPLACE-ME
Heading.jsx β― REPLACE-ME
Form.jsx β― REPLACE-ME
Spinner.jsx β― REPLACE-ME
ButtonText.jsx β― REPLACE-ME
FileInput.jsx β― REPLACE-ME
Select.jsx β― REPLACE-ME
Checkbox.jsx β― REPLACE-ME
DataItem.jsx β― REPLACE-ME
FormRow.jsx β― REPLACE-ME
Row.jsx β― REPLACE-ME
Before getting started with Wild-Oasis, ensure your runtime environment meets the following requirements:
- Programming Language: JavaScript
- Package Manager: Npm
Install Wild-Oasis using one of the following methods:
Build from source:
- Clone the Wild-Oasis repository:
β― git clone https://github.com/TheXro/Wild-Oasis
- Navigate to the project directory:
β― cd Wild-Oasis
- Install the project dependencies:
β― npm install
Run Wild-Oasis using the following command:
Using npm
Β
β― npm run dev
- π¬ Join the Discussions: Share your insights, provide feedback, or ask questions.
- π Report Issues: Submit bugs found or log feature requests for the
Wild-Oasis
project. - π‘ Submit Pull Requests: Review open PRs, and submit your own PRs.
Contributing Guidelines
- Fork the Repository: Start by forking the project repository to your github account.
- Clone Locally: Clone the forked repository to your local machine using a git client.
git clone https://github.com/TheXro/Wild-Oasis
- Create a New Branch: Always work on a new branch, giving it a descriptive name.
git checkout -b new-feature-x
- Make Your Changes: Develop and test your changes locally.
- Commit Your Changes: Commit with a clear message describing your updates.
git commit -m 'Implemented new feature x.'
- Push to github: Push the changes to your forked repository.
git push origin new-feature-x
- Submit a Pull Request: Create a PR against the original project repository. Clearly describe the changes and their motivations.
- Review: Once your PR is reviewed and approved, it will be merged into the main branch. Congratulations on your contribution!