Upload a CSV, clean headers, trim cells, drop empty columns, remove duplicates, optionally normalize date-ish columns, then download the cleaned CSV. Preview stats are returned via headers and shown in the UI.
- server/: Flask + pandas API (
/api/clean-csv) - client/: Vite + React + Tailwind frontend
Backend
cd server
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python app.py
Frontend
cd client
npm install
npm run dev
Open the Vite dev URL. The proxy sends /api/* to Flask.
Set in your frontend environment:
VITE_API_URL=https://your-backend-domain.com
Locally you can leave it empty because the proxy handles it.
- Build & run both services:
Frontend: http://localhost:4173 (Nginx serving built assets, proxying
docker compose up --build/apito backend). Backend: http://localhost:5000. - Just backend image:
cd server docker build -t csv-cleaner-backend . docker run -p 5000:5000 csv-cleaner-backend