The purpose of this project is to build a tightly scoped, full-stack prototype in 6-8 hours to bridge the gap between my current expertise (Flutter, general web development) and the specific technology stack required for my upcoming developer interview.
This prototype will serve as a tangible artifact to demonstrate:
- Adaptability: My ability to quickly pick up and implement a new stack (React, Python/FastAPI, Postgres).
- Domain Interest: My eagerness to work with and visualize K-12 educational data.
- UI/UX Sensibility: My strong eye for design and ability to create clean, user-friendly interfaces.
- Full-Stack Comprehension: My fundamental understanding of how data flows from a relational database, through a RESTful API, and into a frontend client.
- Database: PostgreSQL (Relational data storage)
- Backend: Python with FastAPI (RESTful API creation)
- Frontend: React (Component-based UI)
- Styling: Modern CSS (Vanilla CSS modules)
- Data Visualization: Chart.js via
react-chartjs-2
To save time, the database will be manually seeded via a SQL script. No POST/PUT/DELETE routes are required for this prototype.
students:id(PK),first_name,last_name,grade_levelassessments:id(PK),student_id(FK),subject(Math, Reading, Science),score(0-100),date
GET /api/students: Returns a joined list of students and their most recent assessment scores.GET /api/assessments/averages: Returns the aggregate average scores across all students grouped by subject (used specifically for the chart).
- State Management: React
useStateanduseEffecthooks for data fetching. - Components:
DashboardLayout: Main container with a clean header and responsive grid.MetricsOverview: Top-level cards showing high-level stats (e.g., "Total Students", "Class Average").PerformanceChart: A Chart.js Bar chart consuming the/averagesendpoint.StudentTable: A clean, well-designed HTML table consuming the/studentsendpoint.
- Install/Run PostgreSQL locally.
- Create the database.
- Execute an LLM-generated
.sqlscript to create tables and insert ~20 dummy K-12 students with 3 assessment scores each.
- Set up a Python virtual environment.
- Install
fastapi,uvicorn, and a Postgres driver (psycopg2orasyncpg). - Write database connection logic.
- Create and test the two
GETendpoints using FastAPI's automatic Swagger UI (/docs).
- Scaffold a new React app (e.g., using Vite:
npm create vite@latest). - Build the static UI layout (focusing on ample whitespace, readable typography, and clean design).
- Implement data fetching using
fetchoraxiosto connect to the FastAPI backend. - Render the student data into the UI table.
- Install
chart.jsandreact-chartjs-2. - Create the
PerformanceChartcomponent. - Map the API data to the Chart.js dataset format.
- Style the chart tooltips and colors to match the UI's design system.
- Clean up code (remove
console.logs, format files). - Review the codebase to ensure I can confidently explain how state moves and how the API connects to the database.
- Practice my "translation" points (e.g., "In Flutter I do X, which helped me understand React's Y").
The project is successful if, by the end of the weekend, I can run npm run dev and uvicorn main:app --reload, open localhost:5173, and see a beautiful dashboard populated by real database data that I can confidently talk about in my interview.