🎓 Sandevistan: The Automated Class Attendee
Sandevistan is an automated agent built to handle the struggle of 8:00 AM online classes. It monitors your WhatsApp messages for meeting links, joins the class on your behalf (with mic and camera off), and then blasts an urgent notification to your phone so you can wake up and take over.
Monitor: Evolution API (Docker) connects to WhatsApp and forwards messages to n8n.
Brain: n8n (Docker) parses the message, extracts the Google Meet/Zoom link, and verifies it's within class hours (8 AM – 3 PM).
Bridge: n8n calls a Node.js bridge running on your host machine.
Execution: A Puppeteer Stealth script launches Chrome, syncs your local profile, mutes everything, and joins the call.
Wake Up: Once inside, a high-priority alert is sent to your phone via ntfy.sh.
Automation: Puppeteer + Puppeteer Stealth
WhatsApp: Evolution API (v2)
Workflow Engine: n8n
Database: PostgreSQL (for session persistence)
Cache: Redis
Alerts: ntfy (Android/iOS)
Process Management: PM2
-
Prerequisites
Docker & Docker Compose
Node.js (v18+)
Google Chrome installed on your OS
-
Deploy the Stack (Docker)
This command launches Evolution API, n8n, Postgres, and Redis:
docker-compose up -d
- Setup the Local Scripts
Install the necessary dependencies and prepare your environment:
npm install
cp .env.example .env
- Run the Bridge
The bridge allows the Dockerized n8n to communicate with your host's Chrome. Use PM2 to keep it alive 24/7:
pm2 start bridge.js --name "sandevistan-bridge"
-
Setup n8n Workflow
Open n8n at http://localhost:5678.
Import the workflow.json file provided in this repository.
In the Code Node, ensure the currentHour logic matches your local timezone.
Copy the Webhook URL from the first node and set it as the Webhook URL in your Evolution API instance settings and make sure to make the workflow publish.
-
Setup ntfy Mobile App (Alarm)
Install the ntfy app on your phone (Android / iOS).
Click "Subscribe to topic".
Enter the exact same NTFY_TOPIC you set in your .env file.
Ensure "Override Do Not Disturb" is enabled in the app settings if you want the alarm to wake you up!
📋 Environment Variables (.env) Variable Description STUDENT_NAME The name typed into the meeting if not logged in. NTFY_TOPIC A secret topic name for your phone alerts.
🛑 Disclaimer
This project is for educational purposes. Use of unofficial APIs may violate WhatsApp's Terms of Service. Use at your own risk! 📄 License
This project is licensed under the MIT License - see the LICENSE file for details.