SkillSync uses Nodemailer with Brevo (formerly Sendinblue) SMTP to send automated inactivity reminder emails. When the daily sync detects that a student has not solved any Codeforces problems in the past seven days, SkillSync sends them a personalized email encouraging them to return.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.
Set up Brevo
Create a free Brevo account
Go to brevo.com and sign up for a free account. The free tier allows up to 300 emails per day, which is sufficient for most deployments.
Navigate to SMTP settings
In the Brevo dashboard, go to Settings → SMTP & API, then select the SMTP tab.
Note your SMTP credentials
Brevo’s SMTP server details are fixed:
- Host:
smtp-relay.brevo.com - Port:
587
backend/utils/mailer.js and do not need to be set as environment variables.Copy your login and generate an SMTP key
Your SMTP login (the
BREVO_USER value) is your Brevo account email address. Under the SMTP tab, generate a new SMTP key — this becomes your BREVO_PASS value.Nodemailer transporter configuration
The transporter inbackend/utils/mailer.js connects to Brevo using STARTTLS on port 587:
Email template
Inactivity emails are sent with the following properties:| Field | Value |
|---|---|
| Subject | We Miss You on Codeforces! 💻 |
| From | SkillSync Bot <EMAIL_USER> |
| To | The student’s registered email address |
Verifying the connection
On startup, Nodemailer callstransporter.verify() and logs the result to the console. Check your Render logs (or local terminal output) after deploying:
- Success:
[EMAIL] Nodemailer ready — Gmail SMTP connected. - Failure:
[EMAIL] Nodemailer connection failed: <error message>
BREVO_USER and BREVO_PASS are set correctly in your environment.
Brevo’s free tier allows 300 emails per day. For a class or cohort of up to a few hundred students, this limit is unlikely to be reached under normal inactivity detection conditions.