CSV Manager is a full-stack TypeScript application that lets users upload a CSV file through a browser interface and instantly search across every row and column of the parsed data. Built with an Express 5 backend and a React + Vite frontend, it eliminates the need for a database by keeping parsed records in server memory for the duration of the session — making it fast to set up, easy to extend, and ideal for ad-hoc data exploration tasks.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/titobrian97/Prueba-tecnica-ts-node---gestion-de-csv/llms.txt
Use this file to discover all available pages before exploring further.
What it does
Upload any comma-delimited CSV file and receive back a structured JSON array. Once uploaded, every field in every row becomes searchable through a single query parameter.
Architecture overview
A CORS-enabled Express 5 server handles file ingestion and search. A Vite-powered React 19 frontend provides the upload form and a debounced live-search interface. No database is required.
API surface
Two REST endpoints cover the full workflow:
POST /api/files to ingest a CSV and GET /api/users?q= to run a case-insensitive full-text search against the parsed rows.Getting started
Clone the repo, install dependencies for the backend and frontend, spin up both dev servers, and upload your first CSV in under five minutes.
Key features
CSV upload via multipart form
The backend accepts
multipart/form-data uploads through Multer, validates the text/csv MIME type, and converts the raw CSV string to a JSON array with convert-csv-to-json.In-memory storage
Parsed rows are stored in a module-level array on the Express server. No database setup is needed — data is available instantly after a successful upload.
Full-text search across all fields
GET /api/users?q= performs a case-insensitive search across every value in every column, filtering rows where any field contains the query string.Debounced React search UI
The frontend uses
use-debounce to throttle API calls as the user types, keeping the experience snappy and preventing unnecessary network requests.CORS-enabled Express 5 backend
The backend applies the
cors middleware globally, so the React dev server on port 4000 can talk to the API on port 3000 without proxy configuration.TypeScript end-to-end
Both the Express server (
ts-node) and the React application (TypeScript 6 + Vite) are written in TypeScript, providing type safety from the API boundary through to the UI layer.REST endpoints
CSV Manager exposes exactly two endpoints:| Method | Path | Purpose |
|---|---|---|
POST | /api/files | Upload a CSV file as multipart/form-data with the field name file. Returns the parsed JSON array and a status message. |
GET | /api/users?q= | Search the in-memory dataset. The q query parameter is matched case-insensitively against all column values. |
Data storage model
CSV Manager stores parsed CSV rows in a plain in-memory JavaScript array on the Express server process. There is no database, no file system persistence, and no external cache. Each successfulPOST /api/files request replaces the previous dataset entirely, so the server always reflects the most recently uploaded file.
Because data is held in memory, it is tied to the lifetime of the Node.js process. If the backend server restarts for any reason — a crash, a code change with
ts-node, or a machine reboot — all previously uploaded CSV data is lost and a new file must be uploaded before search will return results.