*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.