Skip to content

TheXro/Wild-Oasis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

58 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

WILD-OASIS

license last-commit repo-top-language repo-language-count


πŸ”— Table of Contents


πŸ“ Overview

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.

πŸ‘Ύ Features

  • 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.

πŸ“Œ Challenges

  1. State Management: Implemented Context API to manage global state effectively across components, ensuring data consistency.
  2. Real-Time Data Syncing: Integrated React Query and Supabase for efficient, real-time data updates.
  3. Modular Design: Utilized compound components and styled-components to streamline UI while maintaining flexibility.
  4. Scalability: Built a maintainable structure for easy scaling and feature addition.

πŸ“ Project Structure

└── 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

πŸ“‚ Project Index

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

πŸš€ Getting Started

β˜‘οΈ Prerequisites

Before getting started with Wild-Oasis, ensure your runtime environment meets the following requirements:

  • Programming Language: JavaScript
  • Package Manager: Npm

βš™οΈ Installation

Install Wild-Oasis using one of the following methods:

Build from source:

  1. Clone the Wild-Oasis repository:
❯ git clone https://github.com/TheXro/Wild-Oasis
  1. Navigate to the project directory:
❯ cd Wild-Oasis
  1. Install the project dependencies:

Using npm Β 

❯ npm install

πŸ€– Usage

Run Wild-Oasis using the following command: Using npm Β 

❯ npm run dev

πŸ”° Contributing

Contributing Guidelines
  1. Fork the Repository: Start by forking the project repository to your github account.
  2. Clone Locally: Clone the forked repository to your local machine using a git client.
    git clone https://github.com/TheXro/Wild-Oasis
  3. Create a New Branch: Always work on a new branch, giving it a descriptive name.
    git checkout -b new-feature-x
  4. Make Your Changes: Develop and test your changes locally.
  5. Commit Your Changes: Commit with a clear message describing your updates.
    git commit -m 'Implemented new feature x.'
  6. Push to github: Push the changes to your forked repository.
    git push origin new-feature-x
  7. Submit a Pull Request: Create a PR against the original project repository. Clearly describe the changes and their motivations.
  8. Review: Once your PR is reviewed and approved, it will be merged into the main branch. Congratulations on your contribution!
Contributor Graph


Releases

No releases published

Packages

No packages published