FullCourtFiesta is a React Native Expo application, serving as a basketball social network where users can connect, chat, create posts, and discover nearby basketball courts based on their location. It's a personal project in the MVP phase, built with a hexagonal architecture, providing flexibility to switch between backend frameworks—currently powered by Supabase with future plans to explore alternatives like Spring Boot.
-
Customized Profile: Create your profile, add information about your basketball skills, and share your achievements.
-
Social Connection: Find and connect with other basketball enthusiasts. Expand your network!
-
Real-time Chat: Chat with other users in real-time. Organize games, share tips, or just have fun.
-
Content Posting: Share your basketball-related experiences, photos, and videos. Inspire others and be part of the community.
-
Court Locator: Discover nearby basketball courts based on your current location.
FullCourtFiesta is built using a hexagonal architecture to ensure flexibility in choosing the backend. It currently integrates with Supabase, but you can easily experiment with other backend frameworks like Spring Boot.
- Node.js and npm
- Expo CLI
- Clone the repository:
git clone https://github.com/Guuri11/FullCourtFiesta
cd FullCourtFiesta
- Install dependencies:
npm install
- Start the application:
npx expo start
- Scan the QR code with the Expo Go app on your mobile device.
If you wish to switch the backend, follow these steps:
Go to src/infrastructure
folder and create the repository for that will connect with your specific backend. Then go to src/ui/store/app/index.ts
and add the repository like others
The Hexagonal Architecture structured is inspired on this video from CodelyTV https://www.youtube.com/watch?v=eNFAJbWCSww&t=203s&pp=ygUdaGV4YWdvbmFsIHR5cGVzY3JpcHQgY29kZWx5dHY%3D
The FullCourtFiesta application follows a modular hexagonal architecture, emphasizing separation of concerns and flexibility. The project structure is organized into the following main directories:
-
assets: Contains assets such as Lottie animations.
-
src:
-
application: Business logic layer containing application services.
-
domain: Defines the core domain entities and aggregates:
- Authentication
- Court
- Event
- Friendship
- Message
- Player
- Post
-
infrastructure: Infrastructure and configuration details:
- config: Configuration settings for the application.
- locales/resources: Localization resources for multilingual support.
- persistance/repositories: Data repositories for different domain entities:
- Authentication
- Court
- Chat
- Friendship
- Player
- Post
-
types: Shared type definitions used across the application.
-
ui: User Interface components and layout-related modules:
- components/core: Core reusable UI components.
- design/common: Common design elements like Chat and Form components.
- design/layout/Notifications: Notification-related layout components.
- router: Navigation logic organized by application sections:
- Authentication/OnBoarding
- Community
- Home
- Profile
- Search
-
constants: Application-wide constants.
-
context: Context providers for state management.
-
hooks/store: Custom hooks for state management.
-
stores: Application state stores for various concerns:
- app/authentication
- app/authorization
- app/location
- app/ui
-
interfaces: Interfaces used throughout the application.
-
This structure facilitates maintainability, testability, and future adaptability by separating concerns at both the domain and infrastructure levels.
![Screenshot 1](https://private-user-images.githubusercontent.com/48799796/298670932-f26f8f56-a3cc-41c9-8c46-7c3d9d599206.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQzMDcyNzUsIm5iZiI6MTcyNDMwNjk3NSwicGF0aCI6Ii80ODc5OTc5Ni8yOTg2NzA5MzItZjI2ZjhmNTYtYTNjYy00MWM5LThjNDYtN2MzZDlkNTk5MjA2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIyVDA2MDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE4MDJjZjc3Y2ZkYjFjMzg4NTY4MTcxNzBjN2QxNjBkNTYzNTVjZDY2ODFkYzE5M2MyNjg2NzZiMDFhYjk4ODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.oS5W6k1_Ardpy4iKHcrTm-iHcCU5z06JQ9mndOrS080)
![Screenshot 2](https://private-user-images.githubusercontent.com/48799796/298670929-f05d8803-e46c-49b2-bb69-a2a0ac3c8db1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQzMDcyNzUsIm5iZiI6MTcyNDMwNjk3NSwicGF0aCI6Ii80ODc5OTc5Ni8yOTg2NzA5MjktZjA1ZDg4MDMtZTQ2Yy00OWIyLWJiNjktYTJhMGFjM2M4ZGIxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIyVDA2MDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgzYTdmNWMyYzE4ZGQxNDkxNDZhODBlYWYyNWZmYjk3ZDQ4ZmI2NjBiZTBhMDk4ODU1YTlhZmJkNjEyMWZkMDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.yqbqmuYs6TEYRz9k2_dZptgiVNlE8FNxuCosBmnfZGE)
![Screenshot 3](https://private-user-images.githubusercontent.com/48799796/298670923-88fbdc59-a947-4766-a605-32e981909259.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQzMDcyNzUsIm5iZiI6MTcyNDMwNjk3NSwicGF0aCI6Ii80ODc5OTc5Ni8yOTg2NzA5MjMtODhmYmRjNTktYTk0Ny00NzY2LWE2MDUtMzJlOTgxOTA5MjU5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIyVDA2MDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE1ZjViNjBlODQzNWM4YzJmZTI1ZjBkNzg3M2Y2ZTEzNjQ1ZjRiNjlkNjRmMTQ5ZTU3YzZkMjVhMWI1OWY2YzUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.IqFnlZmQrU6X8QNhjvYW21-h56Ws7MrJvDk3LdQ7-0k)
This project is licensed under the MIT License. See the LICENSE file for more details.