Education & training centres
Courses, applications, waitlist and reminders in one database: the site, the admin and a Telegram bot read the same rows. Case: NRC.
The problem
The schedule in one place, applications in another, reminders by hand. Two systems drift apart and nobody knows which one is right. Anyone without a browser falls out of the process entirely.
What we do
- ✓ One database: courses, applications, waitlist, reminders, news
- ✓ A Telegram bot that guides the conversation and matches a course, instead of mirroring the site menu
- ✓ A place frees up and the offer goes to the waitlist automatically
- ✓ Bilingual content as data: every entity has its own translation table
- ✓ Role-based access in the admin, background jobs on a queue
Case
For the NRC training centre in Zaporizhzhia we built a course platform in which one database feeds the site, the admin panel and a Telegram bot. An application from the bot and one from the site are a single record, not two.
A separate three.js front end gives the site a 3D presentation that does not get in the way of indexing: the content stays data. NestJS, Prisma, PostgreSQL, Next.js, grammY.
The result: the timetable, applications and reminders stopped drifting apart, because they share one source.
How it works
1. A course is described once
The course, its timetable and the number of places live in one database. The site, the admin panel and the Telegram bot read the same rows, so there is nothing for them to drift apart on.
2. A person picks a course
In a browser or in a messenger. The bot does not mirror the site menu — it runs a conversation and matches a course to what the person answered.
3. The application becomes a row
An application from the bot and one from the site are a single record, not two. Sign-up can happen entirely in a messenger, with no browser at all.
4. The waitlist
When there are no places left, the person joins the waitlist. As soon as a place frees up the offer goes out to the queue automatically, with no manual calling round.
5. Reminders
Reminders are scheduled as background jobs on a queue instead of being sent by hand before every session.
6. The admin and its roles
Role-based access: the administrator, the teacher and the manager each see something different. Bilingual content is data: every entity has its own translation table.
Answers on this topic
Plain explanations without marketing — useful even if you never hire us.
Selling on WhatsApp: the 24-hour window and lost messages
How the WhatsApp Business API actually behaves: the 24-hour window, templates, and why an "ok" from the API does not mean the customer saw your message.
Custom system or an off-the-shelf box: an honest comparison
When a boxed product wins, when custom wins, and the third option: a working system adapted to your process. Lock-in, code ownership, support, migration risk.
Automating invoices, contracts and delivery notes
Why salespeople lose hours to paperwork and what to automate first. A worked example: 196 documents generated by the system with no manual typing.
