Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/aakash811/Student-Progress-Tracker/llms.txt

Use this file to discover all available pages before exploring further.

The recommended production stack for SkillSync uses four managed services: MongoDB Atlas for the database, Upstash Redis for caching, Render for the Node/Express backend, and Vercel for the React frontend. All four have free tiers that are sufficient for running SkillSync for a class or club.
1

Set up MongoDB Atlas

  1. Create a free account at mongodb.com/atlas and provision a new M0 (free) cluster in the region closest to your users.
  2. Create a database user with read/write access. Save the username and password.
  3. Click ConnectDrivers and copy the connection string. Replace <password> with your database user’s password:
mongodb+srv://<user>:<password>@cluster0.xxxxx.mongodb.net/skillsync
  1. Under Network Access, add an IP address entry of 0.0.0.0/0 to allow inbound connections from Render. Render’s outbound IPs are not static, so this wildcard is required.
Save the full connection string — this is your MONGO_URI environment variable.
2

Set up Upstash Redis

  1. Create a free account at upstash.com and create a new Redis database. Choose the region closest to your Render backend.
  2. Open the database and navigate to the REST API tab.
  3. Copy the two values shown:
    • UPSTASH_REDIS_REST_URL — the HTTPS endpoint for your Redis instance
    • UPSTASH_REDIS_REST_TOKEN — the bearer token for authenticating REST requests
SkillSync uses the @upstash/redis client, which communicates over HTTPS — no TCP connection or open port is needed.
3

Deploy the backend on Render

  1. Create a free account at render.com and click New → Web Service.
  2. Connect your GitHub repository and configure the service:
SettingValue
Root directorybackend
Build commandnpm install
Start commandnode index.js
Instance typeFree
  1. Under Environment Variables, add every variable listed below. Click Add Environment Variable for each one:
VariableDescription
PORTSet to 5000 (Render also injects its own PORT, but setting it explicitly avoids surprises)
MONGO_URIFull MongoDB Atlas connection string from Step 1
UPSTASH_REDIS_REST_URLUpstash Redis HTTPS endpoint from Step 2
UPSTASH_REDIS_REST_TOKENUpstash Redis bearer token from Step 2
BREVO_USERYour Brevo SMTP login email
BREVO_PASSYour Brevo SMTP password
EMAIL_USERThe sender address for inactivity alert emails
CRON_SECRETAny long random string — used to authenticate /cron/sync requests
  1. Click Create Web Service. Render will build and deploy the backend. Note the public URL (e.g. https://skillsync-api.onrender.com) — you’ll need it in the next steps.
Confirm the deployment succeeded by visiting GET https://your-app.onrender.com/health. It should return {"status":"ok","time":"..."}.
4

Set up cron-job.org

Render’s free tier spins down services after 15 minutes of inactivity. SkillSync uses two cron jobs on cron-job.org to handle this:Job 1 — Daily Codeforces syncCreate a cron job with these settings:
SettingValue
URLhttps://your-app.onrender.com/cron/sync
MethodPOST
Headerx-cron-secret: <your CRON_SECRET value>
ScheduleEvery day at 02:00 UTC
This triggers runCodeforcesSync() on the backend, which fetches updated data from the Codeforces API for every student. The backend responds immediately with {"message":"Sync started"} so cron-job.org doesn’t time out, then continues the sync in the background.Job 2 — Keep-alive pingCreate a second cron job:
SettingValue
URLhttps://your-app.onrender.com/cron/ping
MethodGET
ScheduleEvery 14 minutes
This hits the /cron/ping endpoint, which returns {"status":"alive"} and keeps the Render instance warm so students don’t experience a 10-second cold start when they open the app.
Without the keep-alive ping, Render will shut down the backend after inactivity. The next request after a cold start can take 10+ seconds to respond. The ping job prevents this on the free tier.
5

Deploy the frontend on Vercel

  1. Create a free account at vercel.com and click Add New → Project.
  2. Import your GitHub repository and configure the project:
SettingValue
Framework presetVite
Root directoryfrontend
Build commandnpm run build
Output directorydist
  1. Under Environment Variables, add:
VariableValue
VITE_API_BASE_URLYour Render backend URL (e.g. https://skillsync-api.onrender.com)
  1. Click Deploy. Vercel builds the React app and publishes it to a *.vercel.app subdomain (or your custom domain if configured).
Once the deployment finishes, open the Vercel URL in your browser and add a student to confirm the frontend can reach the backend successfully.

Environment variables reference

VariableRequiredDescription
PORTBackendPort the Express server listens on (default 5000)
MONGO_URIBackendMongoDB Atlas connection string
UPSTASH_REDIS_REST_URLBackendUpstash Redis HTTPS endpoint
UPSTASH_REDIS_REST_TOKENBackendUpstash Redis authentication token
BREVO_USERBackendBrevo SMTP username for sending emails
BREVO_PASSBackendBrevo SMTP password
EMAIL_USERBackendSender address shown in inactivity alert emails
CRON_SECRETBackendSecret token required in x-cron-secret header for /cron/sync
VITE_API_BASE_URLFrontendFull URL of the Render backend (no trailing slash)

Build docs developers (and LLMs) love