-
Notifications
You must be signed in to change notification settings - Fork 0
Research
This section documents our research, evaluation, and final decisions regarding the technologies used in our project: a Course Comparison Web Application using Sentence Transformers
| Area | Final Technology | Alternatives Considered | Justification Summary |
|---|---|---|---|
| Backend | FastAPI | Flask, Django REST | Fast, async, OpenAPI built-in |
| Frontend | React | Svelte | Large ecosystem, reusable components |
| Hosting | Render | Firebase, Vercel | Supports full-stack apps, simple setup |
| NLP Model | Sentence Transformers | OpenAI Embedding, BERT variants | Pretrained, task-optimized, accessible |
FastAPI is a modern Python web framework optimized for APIs and asynchronous operations. It auto-generates OpenAPI documentation and offers high performance
| Framework | Pros | Cons |
|---|---|---|
| Flask | Lightweight, easy to learn | Manual setup for async, no built-in docs |
| Django REST | Built-in admin, full-featured | Heavier setup, less flexible for APIs only |
- Async support for handling multiple concurrent API calls efficiently
- Swagger documentation auto-generated by FastAPI
- Well-documented and developer-friendly syntax
- Growing community and production use by companies like Netflix and Microsoft
React is a declarative JavaScript library for building user interfaces. It uses components and a virtual DOM for efficient updates.
| Framework | Pros | Cons |
|---|---|---|
| Svelte | Very lightweight and fast | Less widely adopted, limited libraries |
- Familiarity and strong community support
- Reusable components and modular structure
- Ideal for single-page applications
- Compatible with many third-party tools and libraries
Render is a cloud platform for hosting full-stack applications with support for both frontend and backend deployments.
| Platform | Pros | Cons |
|---|---|---|
| Firebase | Great for static hosting, built-in DB | Not ideal for FastAPI backend |
| Vercel | Great for frontend hosting | Backend/serverless functions are limited |
- Supports both FastAPI backend and React frontend
- Provides custom domains, SSL, Git integration
- Simplifies CI/CD pipeline for full-stack deployment
- Free tier suitable for development purposes
Sentence Transformers provide state-of-the-art performance for semantic search and sentence similarity.
| Model | Pros | Cons |
|---|---|---|
| OpenAI Embedding | Powerful, easy to use | Requires paid API usage |
| BERT via HuggingFace | Flexible | More setup and tuning needed |
- Pretrained models for semantic search and ranking
- Available via HuggingFace and
sentence-transformersPython package - Easily integrates with Python backends like FastAPI
- Active research and academic support
- https://fastapi.tiangolo.com/
- https://render.com/docs/deploy-fastapi
- https://reactjs.org/docs/getting-started.html
- https://sbert.net/
- https://huggingface.co/sentence-transformers
- https://vitejs.dev/guide/
- https://render.com/docs/deploy-react
All team members engaged in independent exploration of new technologies not covered in class (e.g., FastAPI). The decision process included:
- Comparing multiple tools through documentation and benchmarks
- Watching tutorials and reading guides
- Finalizing stack based ease of use, and long-term suitability
SQLite is a lightweight, file-based relational database that requires no separate server process. It stores all data in a single .db file, making it simple to set up and deploy with minimal configuration.
| Database | Pros | Cons |
|---|---|---|
| PostgreSQL | Scalable, robust, advanced features | Requires server setup, more complex to manage |
| MySQL | Widely used, good performance | Requires server process, heavier maintenance |
- Zero configuration — no separate database server required
- Portable — database file can be committed to version control for quick setup after cloning the repo
- Lightweight — ideal for small to medium datasets like ours
- Fast for read-heavy operations such as our course search endpoint
- Fully supported by Python’s built-in
sqlite3module - Easy transition path — if needed, we can migrate to PostgreSQL later without major schema changes