This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
Repository for our Recommendation System project (UCL COMP 2025).
It contains the frontend, backend, and shared code in one repository.
│
├── web/ # React + Vite frontend (TypeScript + Axios)
├── worker/ # Express + TypeScript backend (feeds API)
├── shared/ # Shared TypeScript types and Zod schemas
├── package.json # Root workspaces + scripts
├── package-lock.json
└── README.md
Backend service for recommsys.
npm installnpm run devFrontend → http://localhost:5173 Backend → http://localhost:8787
Run only the frontend:
npm run dev:webRun only the backend:
npm run dev:workerBuilds both frontend + backend:
npm run buildLint (frontend only):
npm run lintexpress→ web server frameworkcors→ allow cross-origin requests (frontend ↔ backend)rss-parser→ fetch and parse RSS feedszod→ schema validation- Dev:
typescript,ts-node,nodemon,@types/node,@types/express
react,react-dom→ UI frameworkaxios→ HTTP client for API requests- Dev:
vite,@vitejs/plugin-react,typescript,eslint,typescript-eslint
concurrently→ run frontend + backend in parallel (npm run dev)
- Description: Health check endpoint
- Response:
{ "ok": true }- Description: Returns a list of normalized feed items
- Response (array of FeedItem):
{
id: string,
title: string,
source: string,
link: string,
authors: string[],
summary?: string,
type: "paper" | "blog" | "repo",
date: string, // ISO format
tags: string[]
}- CORS → allows frontend to fetch from backend
- Nodemon → restarts backend automatically when files change
- Axios → used in frontend for API requests
- Shared schemas → in
/shared, keep frontend + backend in sync