Navio is an intelligent travel planning platform designed to help users create personalized itineraries with features like budget tracking, route optimization, and social sharing. This platform is perfect for travelers who want to plan their trips efficiently and share their experiences with a community of fellow adventurers.
- Personalized Itinerary Creation: Generate custom travel plans based on your interests, budget, and time constraints.
- Budget Tracking: Keep track of your expenses to stay within your budget.
- Route Optimization: Find the most efficient routes for your travels to save time and money.
- Social Sharing: Share your travel plans and experiences with friends and other travelers.
- Community-Sourced Recommendations: Discover new destinations and activities through recommendations from the Navio community.
| Area | Technology |
|---|---|
| Backend | Spring Boot 3 (Java 21), Spring Data JPA |
| Frontend | React (Vite), TypeScript |
| Database | PostgreSQL |
| Container | Docker, Docker Compose |
| Orchestration | Kubernetes |
| CI/CD | GitHub Actions |
This project is a monorepo that includes the backend, frontend, and all necessary configuration files.
/backend: A Spring Boot application built following Clean Architecture principles./frontend: A single-page application built with React (Vite)./docker: Contains theDockerfilefor building both services and adocker-compose.ymlfor local development./kubernetes: Includes Kubernetes manifests for deployment (deployment.yaml,namespace.yaml)./nginx: Nginx configuration for serving the frontend./.github: Contains the GitHub Actions workflow for CI/CD./scripts: Includes helper scripts for managing the application (e.g., starting, stopping, deploying).
For a more detailed file structure, please refer to project_structure.txt.
To run the entire application stack locally, you need to have Docker and Docker Compose installed.
-
Create Environment File: Copy the example environment file and fill in your details (e.g., passwords, tokens).
cp .env.example .env
-
Run Docker Compose: From the project root, you can use the provided script to start all services. This will build the Docker images for the backend and frontend and start all necessary services (backend, frontend, database).
./scripts/start-docker.sh
Alternatively, you can run Docker Compose manually:
docker-compose -f docker/docker-compose.yml up --build
- The frontend will be available at
http://localhost:80. - The backend API will be available at
http://localhost:8080.
- The frontend will be available at
The project is configured for deployment to a Kubernetes cluster.
-
Create Namespace:
kubectl apply -f kubernetes/namespace.yaml
-
Create ConfigMap: Ensure your
.envfile is up-to-date, then create the ConfigMap in the cluster.kubectl create configmap app-config --from-env-file=.env -n navio-dev
-
Apply Deployments: This command will create the PostgreSQL, backend, and frontend deployments and services.
kubectl apply -f kubernetes/deployment.yaml
Note: Before applying, make sure to replace the placeholder image paths in
deployment.yamlwith your actual image paths from your container registry (e.g.,ghcr.io/your-username/navio-backend:latest).
You can also use the provided script to deploy the application:
./scripts/start-k8s.shThis project uses GitHub Actions for continuous integration and deployment.
- On push to
mainordevbranches: The workflow defined in.github/workflows/ci.ymlis triggered. - Jobs:
build-backend: Compiles and tests the Spring Boot application.build-frontend: Lints and builds the React application.build-docker-images: Builds the final Docker images for both the backend and frontend and pushes them to GitHub Container Registry (ghcr.io).
We welcome contributions from the community! If you'd like to contribute, please follow these steps:
- Fork the repository.
- Create a new branch for your feature or bug fix.
- Make your changes and ensure they follow the project's coding style.
- Write tests for your changes.
- Submit a pull request with a clear description of your changes.
This project is licensed under the MIT License. See the LICENSE file for more details.