comunitate + abonamente automate
Celindra — Automatizări & comunitate
Provocare
Comenzi, înscrieri la cursuri și acces în comunitatea Discord gestionate manual — email, spreadsheet, invitații și roluri puse de mână la fiecare plată sau abonament.
Soluție
Automatizări end-to-end: fluxuri pentru comenzi și cursuri, boți Discord, provisioning roluri/canale, gestionare automată a abonamentelor Discord și notificări.
Rezultate
Procese manuale eliminate, comunitate care scalează fără ore de admin, plățile legate corect de accesul în Discord.
Contextul de business
Celindra livrează două produse principale: cursuri intensive de două zile la București, plus retreat-uri de trei zile la Covasna. În jurul lor, o comunitate Discord activă cu materiale, sesiuni Q&A live și consultanță 1:1 cu Cristian Sima. Modelul funcționează — există cerere reală pe piața românească pentru educație financiară de calitate, predată de cineva cu credibilitate.
Problema nu era cererea. Era că tot ce ține de tech în spate rula manual: confirmări de plată, înscrieri la cursuri, acces în Discord, roluri, abonamente recurente în comunitate — ore pierdute la fiecare ediție în loc de predare și conținut.
Ce am automatizat
- Fluxuri de comenzi și înscrieri — de la plată la înregistrare confirmată, fără spreadsheet
- Cursuri — legătura între produs, participant și acces la materiale / canale
- Boți Discord — invitații, roluri, mutare în canalele potrivite
- Abonamente Discord — activare, reînnoire și revocare acces când expiră plata
- Comunitate — operațiuni recurente în server fără intervenție manuală la fiecare membru nou
Decizii tehnice cheie
1. Automatizări pe integrări existente, nu rebuild total
Focusul a fost pe fluxurile care durau ore — webhook-uri, boți, email tranzacțional — nu pe un produs nou de la zero. Stack familiar, ușor de întreținut:
2. Discord: webhook + bot dedicat
Provocarea reală era automatizarea accesului la Discord. Când cineva plătește un curs, trebuia adăugat automat în canalele potrivite, cu rolurile potrivite. Soluția:
- Stripe webhook → notifică backend-ul Celindra când plata e confirmată
- Backend creează în DB înregistrarea student + cursul
- Backend generează un link unic de invitație Discord (single-use, expires 24h)
- Resend trimite email cu credențiale + link Discord în <30 secunde după plată
- Bot Discord ascultă pe canal — când cineva intră cu link-ul, îl mută în canalele potrivite și îi atribuie rolurile
Provocări întâlnite
Provocarea 1: Plăți care «se pierd» între bancă și Stripe
În primele 2 săptămâni de live am avut 3 cazuri în care studenții plăteau, primeau confirmare Stripe, dar webhook-ul către backend-ul nostru nu ajungea (probleme rețea Hetzner). Studenții credeau că s-a furat banul lor. Am rezolvat cu retry logic exponential backoff + idempotency keys + reconciliere zilnică automată cu API-ul Stripe.
Provocarea 2: Discord rate limits
La un curs cu 50 de înscrieri într-o oră, Discord-ul ne-a banat temporar pentru rate limit. Soluția: queue cu BullMQ pentru toate operațiunile Discord, procesare cu delay 1.5s între acțiuni. La final tot durau ~75 secunde să adăugăm 50 de oameni, dar fără să fim banați.
Provocarea 3: Abonamente Discord cu lifecycle complet
Membrii cu abonament lunar trebuiau adăugați și scoși din canale când plata reușește sau eșuează. Am legat Stripe (sau fluxul de plată existent) de bot — roluri și acces actualizate automat, fără verificare manuală în fiecare lună.
Ce s-a schimbat în practică
Lecții pentru proiecte similare
- Idempotency e obligatoriu la plăți. Webhook-urile eșuează — trebuie retry și reconciliere, nu speranță.
- Discord are rate limits. Queue cu delay bate „adaugă 50 de oameni în 10 secunde”.
- Abonamentele cer revoke automat. Dacă scoți accesul manual, vei avea mereu membri „fantomă” în canale plătite.
- Automatizarea bate platforma nouă când problema e proces, nu UI.
- Ownership la cod și la integrări — clientul trebuie să poată schimba furnizorul fără să piardă comunitatea.