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.jsWILD-OASIS/
__root__
package-lock.json ❯ REPLACE-MEvite.config.js ❯ REPLACE-MEpackage.json ❯ REPLACE-MEindex.html ❯ REPLACE-ME
src
App.jsx ❯ REPLACE-MEmain.jsx ❯ REPLACE-MEfeatures
cabins
CabinTableOperations.jsx ❯ REPLACE-MECabinRow.jsx ❯ REPLACE-MEuseCabins.js ❯ REPLACE-MECreateCabinForm.jsx ❯ REPLACE-MECabinTable-v1.jsx ❯ REPLACE-MECabinTable.jsx ❯ REPLACE-MEuseCreateCabin.js ❯ REPLACE-MEuseEditCabin.js ❯ REPLACE-MEAddCabins.jsx ❯ REPLACE-MEuseDeleteCabin.js ❯ REPLACE-MEbookings
BookingTable.jsx ❯ REPLACE-MEBookingDetail.jsx ❯ REPLACE-MEuseBookings.js ❯ REPLACE-MEBookingTableOperations.jsx ❯ REPLACE-MEBookingDataBox.jsx ❯ REPLACE-MEBookingRow.jsx ❯ REPLACE-MEauthentication
UserAvatar.jsx ❯ REPLACE-MESignupForm.jsx ❯ REPLACE-MELoginForm.jsx ❯ REPLACE-MEUpdatePasswordForm.jsx ❯ REPLACE-MEUpdateUserDataForm.jsx ❯ REPLACE-MEsettings
useUpdateSettings.js ❯ REPLACE-MEuseSettings.js ❯ REPLACE-MEUpdateSettingsForm.jsx ❯ REPLACE-MEdashboard
SalesChart.jsx ❯ REPLACE-MEDashboardLayout.jsx ❯ REPLACE-MEDurationChart.jsx ❯ REPLACE-MEStat.jsx ❯ REPLACE-MEDashboardFilter.jsx ❯ REPLACE-MEDashboardBox.jsx ❯ REPLACE-MEcheck-in-out
TodayItem.jsx ❯ REPLACE-MECheckinBooking.jsx ❯ REPLACE-METodayActivity.jsx ❯ REPLACE-MECheckoutButton.jsx ❯ REPLACE-MEstyles
GlobalStyles.js ❯ REPLACE-MEhooks
useOutsideClick.js ❯ REPLACE-MEuseLocalStorageState.js ❯ REPLACE-MEuseMoveBack.js ❯ REPLACE-MEpages
Settings.jsx ❯ REPLACE-MEAccount.jsx ❯ REPLACE-MELogin.jsx ❯ REPLACE-MEDashboard.jsx ❯ REPLACE-MEPageNotFound.jsx ❯ REPLACE-MECabins.jsx ❯ REPLACE-MEUsers.jsx ❯ REPLACE-MEBookings.jsx ❯ REPLACE-MEutils
helpers.js ❯ REPLACE-MEservices
apiSettings.js ❯ REPLACE-MEapiBookings.js ❯ REPLACE-MEsupabase.js ❯ REPLACE-MEapiCabins.js ❯ REPLACE-MEui
Input.jsx ❯ REPLACE-METag.jsx ❯ REPLACE-MEButtonGroup.jsx ❯ REPLACE-MEErrorFallback.jsx ❯ REPLACE-MEMenus.jsx ❯ REPLACE-MEEmpty.jsx ❯ REPLACE-MEButton.jsx ❯ REPLACE-MEHeader.jsx ❯ REPLACE-MEPagination.jsx ❯ REPLACE-MEAppLayout.jsx ❯ REPLACE-MEConfirmDelete.jsx ❯ REPLACE-MEFilter.jsx ❯ REPLACE-MEMainNav.jsx ❯ REPLACE-MEModal.jsx ❯ REPLACE-METable.jsx ❯ REPLACE-MELogo.jsx ❯ REPLACE-MESidebar.jsx ❯ REPLACE-MEFlag.jsx ❯ REPLACE-MESortBy.jsx ❯ REPLACE-METableOperations.jsx ❯ REPLACE-METextarea.jsx ❯ REPLACE-MEButtonIcon.jsx ❯ REPLACE-MESpinnerMini.jsx ❯ REPLACE-MEHeading.jsx ❯ REPLACE-MEForm.jsx ❯ REPLACE-MESpinner.jsx ❯ REPLACE-MEButtonText.jsx ❯ REPLACE-MEFileInput.jsx ❯ REPLACE-MESelect.jsx ❯ REPLACE-MECheckbox.jsx ❯ REPLACE-MEDataItem.jsx ❯ REPLACE-MEFormRow.jsx ❯ REPLACE-MERow.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 installRun 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-Oasisproject. - 💡 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!