A simple feedback management system built with FastAPI, SQLite, SQLAlchemy, and Bootstrap.
This project allows users to submit feedback and enables administrators to review and update the status of submitted feedback through a dashboard.
The application was developed as a small end-to-end product, focusing on simplicity, maintainability, and rapid delivery.
Seyyedeh Fargol Nazemzadeh
- Submit feedback
- Provide a title and message
- Automatic feedback status assignment
- Secure Authentication for dashboard access
- View all submitted feedback
- Track feedback status
- Update feedback status
- Registered (default status when feedback is created)
- Under Review
- Resolved
To enhance security and prevent unauthorized status changes, a simple authentication system has been implemented:
-
Admin Login: Users must enter a username and password to access the admin dashboard
-
Route Protection: Unauthenticated users are automatically redirected to the login page when attempting to access the dashboard
-
Session Management: Upon successful login, user information is stored in the session; clicking the logout button clears the session
-
Simple Validation: Currently uses hardcoded credentials, with the flexibility to extend to a database-based authentication system in the future
- FastAPI - Modern, high-performance web framework for building APIs
- SQLAlchemy - Powerful ORM for database interaction
- SQLite - Lightweight, zero-configuration database
- Jinja2 Templates - Server-side template rendering engine
- Bootstrap 5 - Responsive CSS framework for clean UI design
- Docker - Containerization for consistent development and deployment
- Docker Compose - Multi-container orchestration for easy management
FastAPI provides a lightweight and modern framework that allows rapid backend development while keeping the codebase clean and maintainable.
SQLite is sufficient for the scope of this project and requires zero external configuration, making the setup process simple.
Since the project requirements are relatively small, Jinja2 templates provide a simpler solution than introducing a separate frontend framework.
Using sessions for authentication management is a simple and effective approach for small projects that don't require JWT or OAuth implementation. It integrates seamlessly with Jinja2 templates and provides a straightforward user experience.
Docker ensures the application runs consistently across any system, eliminates complex manual setup, and isolates the app from your host environmentβallowing you to run the project with just a few simple commands.
feedback-board/
β
βββ app/
β βββ crude.py
β βββ database.py
β βββ main.py
β βββ models.py
β βββ routes.py
β βββ schemas.py
β β
β βββ templates/
β β βββ dashboard.html
β β βββ feedback.html
β β βββ login.html
β β
β βββ static/
β βββ css/
β βββ style.css
β
βββ screenshots/
β
βββ .dockerignore
βββ .gitignore
βββ docker-compose.yml
βββ Dockerfile
βββ README.md
βββ requirements.txt
The easiest way to run the application without installing Python or any dependencies on your system.
Docker Desktop installed and running.
1. Clone the repository
git clone https://github.com/Fargolnz/Feedback-Board.git
cd Feedback-Board2. Build the Docker image
docker-compose build3. Start the container
docker-compose up -d4. Access the application
Open your browser and navigate to:
http://localhost:8000
5. Stop the container (when done)
docker-compose down1. Clone Repository
git clone https://github.com/Fargolnz/Feedback-Board.git
cd Feedback-Board2. Create Virtual Environment
python -m venv venv3. Activate Environment
Windows:
venv\Scripts\activateLinux / macOS:
source venv/bin/activate4. Install Dependencies
pip install -r requirements.txt5. Run Application
uvicorn app.main:app --reload6. Open in Browser
http://127.0.0.1:8000
-
Username:
admin -
Password:
verystrongpass
- The database is automatically created on the first run (in both Docker and local modes)
- Status changes can only be performed by authenticated administrators
- All feedback entries are stored with their creation timestamp
- The application follows a simple, clean architecture that can be easily extended


