Data Fixer.
A web app where signed-in users upload a CSV, preview it with incomplete rows removed, and download the cleaned file.
- ROLE
- Full-Stack Developer: design, frontend, API
- TEAM
- Solo
- DATE
- Sep 2024 to Oct 2024
- TRACK
- Full-StackData
- STACK
- React, TypeScript, Python, Flask, SQLite
FIG. 03A ARCHITECTURE
- React + TypeScript, frontend. Connects to Flask API (HTTPS + JWT).
- Flask API, backend. Connects to SQLite (users) (SQL), pandas cleaner (CSV UPLOAD). See note 1.
- SQLite (users), storage.
- pandas cleaner, backend. Connects to Temp CSV on disk (WRITE). See note 2.
- Temp CSV on disk, storage. See note 3.
NOTES
Decision
I put every CSV route behind Flask-JWT-Extended, and the React client sends the token as a Bearer header. The API stays stateless, and users live in one SQLAlchemy table with Werkzeug-hashed passwords.
Trade-off
The only cleaning rule is pandas dropna(): any row with a missing value is removed. It's predictable and easy to show in the preview table, but one empty cell costs a whole row, and users can't fill values or pick columns.
What I got wrong
The server writes every user's result to the same temp_cleaned_data.csv, so two people cleaning at once overwrite each other's file. Next time I'd stream the CSV back in the response or key the file by user and request.
PROJECT 05 / 08