UniLink is organised as a monorepo with threeDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/DincaAlex/unilink/llms.txt
Use this file to discover all available pages before exploring further.
package.json files. The root package owns no application code — it exists solely to run concurrently, which starts the Express API and the Vite dev server side-by-side with a single command. The server/ directory contains the Node.js backend, and sanmarcos-jobs/ contains the React frontend. There is no Docker, no external database server, and no cloud dependency — everything runs locally out of the box.
Repository structure
How the two processes communicate
The browser loads the React SPA from the Vite dev server athttp://localhost:5173. React components call the functions in src/lib/api.js, which use the browser’s native fetch API to make HTTP requests to the Express API at http://localhost:3001. The backend queries SQLite synchronously via better-sqlite3 and returns JSON. There is no WebSocket layer and no server-side rendering.
Ports and start commands
| Process | Port | Start command |
|---|---|---|
| Express API | 3001 | npm run dev --prefix server |
| Vite frontend | 5173 | npm run dev --prefix sanmarcos-jobs |
| Both together | — | npm run dev (root) |
npm run dev script passes concurrently the prefixed commands with colour-coded labels (backend in blue, frontend in green) so their log output is easy to tell apart in one terminal.
CORS
The Express server configures thecors middleware to allow requests from http://localhost:5173 only:
server/index.js
Tech stack
| Layer | Technology |
|---|---|
| Frontend framework | React 18 + Vite 5 |
| Styling | Tailwind CSS 3 |
| Routing | React Router 6 |
| Icons | Lucide React |
| Global state | Context API + useState |
| Backend | Node.js 20 + Express 4 |
| Database | SQLite via better-sqlite3 |
| Orchestration | concurrently |
Node.js 20 is required. Vite 5 is pinned (not 6+) because Vite 6 requires Node
20.19+, which is newer than the 20.17 version used during development. Tailwind
CSS 3 is used (not v4) because Tailwind v4’s
@tailwindcss/vite plugin is
incompatible with the current Node version.