*Vaultify is your effortless solution to automatically track and preserve your monthly music journey -- creating personalized playlists that capture your evolving taste without the hassle.*
👥 Team Members: Matthew Bui, Michael Lam, Dillon (Hongwei) Li, Michelle Li, Thomas Orifici
======================================================
- Clone this repository and open it in your preferred IDE (i.e. Visual Studio Code).
- From the root folder ("Vaultify"), install all dependencies with
npm run install:all. - Copy
.env.exampleto.envin the root folder and fill in your values. - Run
npm run devto start the API (port 3001) and the Vite dev server (port 3000) together.
All secrets live in a single .env at the repo root; see .env.example for the full list.
REDIRECT_URI must exactly match a redirect URI registered on your
Spotify dashboard. The client derives its own
redirect from window.location.origin, so register one entry per environment you run.
The app deploys to Render as a single web service: Express serves the JSON API and also
serves the compiled React bundle from frontend/dist, so the client and API share one origin.
npm run buildinstalls both workspaces, builds the client, and compiles the server.npm startruns the compiled server, which serves both.render.yamldeclares the service; set the secret values in the Render dashboard.
The monthly playlist job runs in-process via node-schedule when ENABLE_INTERNAL_CRON=true.
On hosts that idle the process, leave it unset and have a scheduler POST /run-monthly with
an Authorization: Bearer $CRON_SECRET header instead.
======================================================
All pull requests will be automatically linted and checked for formatting. To check your code locally, run npm run lint and npm run format:check.
To fix formatting errors, run npm run format:fix.
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