Welcome to the Course Review Platform, a comprehensive solution designed to empower students to share and discover reviews about courses they've attended. This platform is built using Svelte for the frontend, providing a modern and reactive user interface, and Spring Boot for the backend, ensuring a robust and scalable API.
- Features
- Technology Stack
- Architecture Overview
- Getting Started
- Development
- Hosting
- Deployment Process
- Contributing
- Contact
- Mentions
- Course Reviews: Users can post reviews for courses they've attended, providing ratings and experience.
- Search and Filter: Easily search for courses or filter them based on reviews, difficulty level, and more.
- Authentication and Authorization: Secure user registration and login functionality.
- Responsive Design: A user-friendly interface that adapts to different screen sizes and devices.
- Caching and Performance Optimization: Utilizes Redis for caching frequently accessed data, reducing database load and improving response times.
- Frontend: SvelteKit
- Backend: Spring Boot
- Database: MongoDB
- Caching and Session Management: Redis
- Authentication: JWT for secure token-based authentication
The platform adopts a microservices architecture for scalability and maintainability:
- Frontend Service: Built with Svelte, it communicates with the backend via RESTful APIs.
- Backend Service: Developed with Spring Boot, handles business logic, data processing, and server-side operations.
- Database: MongoDB is used for storing course information, user profiles, reviews, and more.
- Redis: Employed for caching and storing blacklisted JWT tokens for logout functionality.
- Node.js and npm
- Java JDK 17+ and Maven
- Docker
- Clone the repository
git clone https://github.com/Tsounguinzo/concordia-courses.git
- Start MongoDB and Redis using Docker Compose
The repository includes a docker-compose.yml file that defines the MongoDB and Redis services. Use Docker Compose to start these services:
docker-compose up -d
- Backend Setup
Navigate to the backend directory. Before running the application, ensure it's configured to connect to the MongoDB and Redis instances started by Docker Compose. Then, run the Spring Boot application in the dev profile to initialize the database with any required seed data:
cd backend
./mvnw clean install
Comment out the following lines in the SecurityConfig.java
file to https enforcement:
//.requiresChannel(channel -> channel.anyRequest().requiresSecure())//enforce https
To generate new seeding data for the database, run the main method in the SeedRunner.java
file:
./mvnw exec:java -Dexec.mainClass="com.concordia.courses.backend.SeedData"
- Frontend Setup
Install the necessary npm packages and start the Svelte development server:
cd ../ui
npm install
npm run build
- Start the Backend Service
cd backend
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
- Serve the Frontend
cd ../ui
npm run dev
The frontend application will be accessible at http://localhost:5173, and it will communicate with the backend API for operations.
When developing locally, use the dev profile for backend development to take advantage of any development-specific configurations, such as detailed logging and database seeding.
For frontend development, the Svelte development server provides hot reloading to immediately reflect changes in the browser.
concordia.courses is hosted across various cloud services to leverage the strengths of each and ensure optimal performance and reliability. Here's how each component is hosted:
The Svelte-based frontend is hosted on Vercel, which provides a seamless deployment process and excellent support for Svelte applications. Vercel offers automatic deployments from Git, enabling easy updates and rollbacks. Access the frontend at your Vercel project URL.
The MongoDB database is hosted on an M0 tier AWS cluster via MongoDB Atlas. This fully managed cloud database is configured for high availability and scalability. The M0 tier on AWS offers a free solution with sufficient resources for development and initial production use. Ensure your Spring Boot backend is configured with the connection string provided by MongoDB Atlas.
The spring boot backend application is hosted on Railway. This setup provides the flexibility needed for server-side operations and allows for custom configurations as required. The server runs the Spring Boot JAR file, with environment variables configured for database and Redis connections.
Session management and caching are powered by Redis, hosted on Redis Cloud via the Redis Enterprise Cloud Essentials plan. This setup offers a managed Redis instance with automatic scaling, backups, and end-to-end security. The Redis Cloud instance is configured as a cache and for storing blacklisted tokens, with connection details provided to the Spring Boot backend.
- Frontend Deployment to Vercel:
- Push the latest changes to your GitHub repository connected to Vercel for automatic deployment.
- MongoDB Atlas Configuration:
- Ensure your MongoDB Atlas cluster is up and running. Configure IP whitelisting and retrieve your connection string for the Spring Boot application.
- Spring Boot Application Deployment:
- Push the latest changes to your GitHub repository connected to Railway for automatic deployment.
- Set environment variables or use an
application.yml
file for production configurations, including MongoDB and Redis connection strings.
- Redis Cloud Setup:
- Create a new Redis database in Redis Cloud and configure your Spring Boot application to connect to this instance for caching and token management.
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
Beaudelaire @ [email protected]
mcgill.courses have led to the inspiration of concordia.courses with regard to its functionality and design.