π Website: https://gaile.ee/
A comprehensive web application featuring AI-powered chat, language learning tools, and various interactive features. Built with Spring Boot, Angular, and integrated with Ollama for AI capabilities.
- AI Chat System: Interactive chat with AI models supporting English and Estonian languages
- Language Learning: English vocabulary building and grammar checking
- Speech Processing: Text-to-speech and speech-to-text capabilities
- Blog System: Content management and publishing
- Proxy Management: Proxy list management and monitoring
- Statistics: Visit statistics and user analytics
- Interactive Games: Minesweeper and learning-to-count modules
- User Authentication: Secure JWT-based authentication system
- Java 25 with Spring Boot 4.0.5
- Spring Security - JWT authentication
- Spring Data JPA - Database access
- Spring WebFlux - Reactive programming
- Liquibase - Database migrations
- PostgreSQL with pgvector extension - Vector database for AI embeddings
- Ollama - AI model integration (GPU & CPU versions)
- MapStruct - Bean mapping
- Lombok - Code generation
- Apache POI - Document processing
- Swagger/OpenAPI - API documentation
- Angular 21 with Angular Material
- Bootstrap 5 - UI framework
- Socket.IO - Real-time communication
- Chart.js - Data visualization
- ngx-translate - Internationalization
- Docker & Docker Compose - Containerization
- Nginx - Reverse proxy and static file serving
- PostgreSQL Backup - Automated database backups
- Java 25 or higher
- Maven 3.8+
- Node.js 22+ and npm
- Docker and Docker Compose
- PostgreSQL 18 with pgvector extension
- NVIDIA GPU (for GPU-accelerated Ollama, optional)
CV/
βββ common/ # Shared utilities and models
βββ persistence/ # Database layer (entities, repositories)
βββ security/ # Security configuration and JWT
βββ services/ # Business logic layer
β βββ blog/ # Blog service
β βββ chat/ # AI chat service
β βββ email/ # Email service
β βββ english/ # English learning service
β βββ proxy/ # Proxy management
β βββ statistics/ # Statistics service
β βββ user/ # User management
βββ web-api/ # REST API controllers
βββ frontend/ # Angular application
βββ docker-compose.yml # Docker services configuration
βββ Dockerfile # Backend Docker image
βββ pom.xml # Maven configuration
git clone <repository-url>
cd CVCreate a .env file in the root directory:
# Database
SPRING_DATASOURCE_URL=jdbc:postgresql://cv-postgres/db
SPRING_DATASOURCE_USERNAME=your_username
SPRING_DATASOURCE_PASSWORD=your_password
POSTGRES_DB=cv_db
# Security
SECURITY_JWT_KEY=your_jwt_secret_key
# Email (optional)
SPRING_MAIL_USERNAME=your_email@gmail.com
SPRING_MAIL_PASSWORD=your_app_password
# Ollama
OLLAMA_MODEL=hf.co/kyx0r/L3-Evil-Stheno-v3.2-8B-GGUF:Q8_0
OLLAMA_MODEL_EMBEDDING=qwen3-embedding:4bdocker network create kokoro-netdocker-compose up -d# Start all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down# Build the project
mvn clean install
# Run the application
cd web-api
mvn spring-boot:runThe backend API will be available at http://localhost:8399/api/v1
cd frontend
# Install dependencies
npm install --legacy-peer-deps
# Start development server
npm startThe frontend will be available at http://localhost:4405
- Frontend: http://localhost:4488 (HTTP) or https://localhost:4489 (HTTPS)
- Backend API: http://localhost:8399/api/v1
- API Documentation: http://localhost:8399/api/v1/swagger-ui.html
- PostgreSQL: localhost:5442
- Ollama GPU: http://localhost:11434
- Ollama CPU: http://localhost:11435
The application uses Swagger/OpenAPI for API documentation. Once the backend is running, access the Swagger UI at:
http://localhost:8399/api/v1/swagger-ui.html
- Authentication:
/api/v1/auth/* - Chat:
/api/v1/chat/* - Blog:
/api/v1/blog/* - User:
/api/v1/user/* - Statistics:
/api/v1/statistics/* - Proxy:
/api/v1/proxy/*
- JWT-based authentication
- Token expiration: 30 minutes (access token), 60 minutes (refresh token)
- Password encryption
- CORS configuration
- Role-based access control
The project uses Liquibase for database migrations. Migration files are located in:
persistence/src/main/resources/db/changelog/
Automatic backups are scheduled daily at 2:00 AM (Europe/Tallinn timezone) and retained for 60 days.
mvn testcd frontend
npm testmvn clean package -Dmaven.test.skipThe executable JAR will be created at web-api/target/cv-exec.jar
cd frontend
npm run build --configuration productionThe production build will be in the dist/ directory.
# Build backend image
docker build -t cv-app:latest .
# Build frontend image
cd frontend
docker build -t cv-ui:latest .- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Main configuration is in web-api/src/main/resources/application.properties:
- Server Port: 8399
- Context Path: /api/v1
- File Upload Limit: 20MB
- Database: PostgreSQL with connection pooling
- Async Request Timeout: 600 seconds (for AI operations)
- GPU Instance: Supports NVIDIA GPUs with CUDA
- CPU Instance: Fallback for systems without GPU
- Parallel Requests: 4 concurrent requests
- Thread Count: 8 threads
- Model Keep Alive: 30 minutes
- Port already in use: Change ports in
docker-compose.yml - Database connection failed: Check PostgreSQL container logs
- Ollama not responding: Verify Ollama container is running and model is downloaded
- Frontend build fails: Try using
--legacy-peer-depsflag with npm install
# All services
docker-compose logs
# Specific service
docker-compose logs cv-app
docker-compose logs cv-postgres
docker-compose logs cv-ollamaThis project is licensed under the MIT License.
- Gaile - Project Owner
- Spring Boot team
- Angular team
- Ollama project
- PostgreSQL community
- All open-source contributors