NexIOT Robotics Academy
A production course-management platform for an Arduino and IoT training academy — public site, student portal, and admin dashboard.
- Next.js
- Tailwind CSS
- Framer Motion
- Express
- Sequelize
- MySQL
- JWT
- Nodemailer
Screens




Problem
The academy had no way to take enrolments online — course enquiries arrived by WhatsApp and were tracked by hand, so nothing was searchable and nothing was reportable. They needed a site that both sold the courses and captured the registrations behind them.
Role
Sole developer across both halves: the Next.js App Router frontend and the Express/Sequelize API, plus the MySQL schema, the transactional email templates, and the admin dashboard.
Key decisions
The public pages read through a fallback-aware data layer: if the API is unreachable they render bundled placeholder content instead of failing. A marketing site that 500s because a database is restarting costs real enrolments, and the content it shows barely changes between deploys. Email is deliberately best-effort for the same reason — a registration is saved and acknowledged whether or not SMTP answers, rather than being lost to a mail server timeout.
Challenges
Convenience in development turned into a production hazard: the API used `sequelize.sync()` to shape tables, which is fine against a throwaway database and destructive against a real one. Untangling that into an explicit migration path was the precondition for going live. Spam on the public forms was the other one, handled with rate limiting, server-side validation, and a honeypot field.
Outcome
Live at nexiot.lk, taking real course registrations and enquiries.