This project is a full-stack data analytics platform built with a TypeScript/Node backend and a React frontend. It supports end-to-end data ingestion, query processing, RESTful API integration, and interactive data visualization.
From a user perspective, you can upload course data and explore insights such as:
- average grades by department
- how a course's average changes over time
- instructor-based trends to help identify easier/harder grading patterns
The backend provides dataset lifecycle management and query execution, while the frontend delivers a dashboard for upload, filtering, and analytics charts.
- Designed and implemented REST API endpoints for dataset ingestion, management, and analytical querying
- Developed dynamic query objects sent from React to backend services for real-time analytics workflows
- Built a modular backend query engine with validation, filtering, aggregation, and sorting
- Implemented local persistence/caching to support reliable state across application restarts
- Applied automated testing across business logic and API layers for regression prevention and quality assurance
- Upload and persist datasets through REST endpoints
- Manage datasets (list and remove)
- Execute structured analytical queries
- Visualize query results with React + Chart.js
- Local disk caching for faster reload/startup behavior
- Backend: TypeScript, Node.js, Express
- Frontend: React, Axios, Chart.js (
react-chartjs-2) - Data Processing: JSZip, parse5 (zip + HTML parsing)
- Testing: Mocha, Chai, Supertest (unit/integration/API testing)
- Engineering Practices: schema validation, error handling, caching, modular architecture
- A dataset is uploaded as a zip file to the backend.
- The backend validates and processes the dataset into an internal format.
- Processed data and metadata are cached on disk.
- The frontend sends query objects to the backend.
- Query results are returned and displayed as charts in the UI.
- Backend behavior is validated with automated tests under
test/controllerandtest/rest - Query behavior is verified with fixture-based test cases in
test/resources/queries - API contracts (status codes + response shapes) are tested using Supertest
- Code quality is enforced with linting and formatting checks (
eslint,prettier)
To start using this project, you need to get your development environment configured so that you can build and execute the code. To do this, follow these steps; the specifics of each step will vary based on your operating system:
-
Install git (v2.X). You should be able to execute
git --versionon the command line after installation is complete. -
Install Node LTS (LTS: v18.X), which will also install NPM (you should be able to execute
node --versionandnpm --versionon the command line). -
Install Yarn (1.22.X). You should be able to execute
yarn --version. -
Clone your repository by running
git clone REPO_URLfrom the command line. You can get the REPO_URL by clicking on the green button on your project repository page on GitHub. Note that due to new department changes you can no longer access private git resources using https and a username and password. You will need to use either an access token or SSH.
Open two terminals from the repository root.
yarn install
yarn startcd frontend
yarn install
yarn startThen open http://localhost:3000. The frontend communicates with the backend at http://localhost:4321.
Once your environment is configured you need to further prepare the project's tooling and dependencies. In the project folder:
-
yarn installto download the packages specified in your project's package.json to the node_modules directory. -
yarn buildto compile your project. This also runs formatting and lint checks. -
yarn testto run the test suite.- To run with coverage, run
yarn cover
- To run with coverage, run
-
yarn prettier:fixto format your project code. -
yarn lint:checkto see lint errors in your project code. You may be able to fix some of them using theyarn lint:fixcommand.
If you are curious, some of these commands are shortcuts defined in package.json -> scripts.
IntelliJ Ultimate should be automatically configured the first time you open the project (IntelliJ Ultimate is a free download through the JetBrains student program).



