*This project is part of Aalto University's Designing and Building Scalable Web Applications course (completed in spring 2024).
This project is a Question and Answer web application designed for coursework discussions. It allows users to:
The system demonstrates scalability and best practices, integrating multiple services, caching, end-to-end testing, and performance testing.
Database
Caching
End-to-End Tests
Performance Tests
User Interactions
questionLike, answerLike).Styling & Framework
qa-api service, with a focus on simplicity and performance.Rate Limiting
userUuid) can post at most one question and one answer per minute.Separate Configurations for Development and Production
A brief overview of the main directories (subject to change as the project evolves):
├── e2e-playwright
│   └── tests/                  # End-to-end tests (Playwright)
├── flyway
│   └── sql/                    # Database migration scripts (Flyway)
├── k6                          # Performance testing scripts (k6)
├── llm-api                     # LLM API client for generating answers
├── nginx                       # NGINX configuration for routing
├── qa-api
│   ├── controllers             # API controllers for courses, questions, answers, users
│   ├── database                # PostgreSQL interactions for Deno
│   ├── services                # Business logic (caching, LLM calls, etc.)
│   └── util                    # Utility functions (cache proxies, etc.)
├── qa-ui                       # User interface (Astro, Svelte and Tailwind)
├── redis                       # Redis configuration (redis.conf)
├── docker-compose.prod.yml     # Production Docker Compose setup
├── docker-compose.yml          # Development Docker Compose setup
├── DATABASE.md                 # Database schema and caching strategy
├── PERFORMANCE_TEST_RESULTS.md # Performance testing results
├── REFLECTION.md               # Key design decisions and potential improvements
├── RUNNING.md                  # Deployment and testing instructions
└── README.md                   # This file
For details on deploying the application locally, along with instructions for running the end-to-end tests and performance tests, see RUNNING.md. This file outlines:
My performance testing results can be found in PERFORMANCE.md.
A short discussion of the applications database schema and caching strategy can be found in DATABASE.md.
A short discussion of the application’s key design decisions (e.g., normalized database schema, caching approach, LLM integration) and potential improvements for performance can be found in REFLECTION.md.