EduFin · Trading Education

Cum am construit platforma Celindra pentru cursuri live de opțiuni trading

Celindra a venit la noi cu o problemă concretă: oferă cursuri live de opțiuni trading cu Cristian Sima, dar gestiona totul prin Excel, email-uri și Discord manual. Fiecare nou student însemna 2-3 ore de admin pentru un singur curs. Voiau o platformă care să automatizeze înscrierea, plățile, accesul la conținut și comunitatea — fără să-i lege de o platformă SaaS închisă.

IndustrieEduFin / Trading
Durată3 luni
StatusLive · iterații continue
Echipă2 dezvoltatori
ȚarăRomânia

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ă procesul tehnic din spate era complet manual: Cristian primea email cu intenția de înscriere, răspundea cu IBAN, aștepta confirmare bancară (uneori 2-3 zile), trimitea manual invitație Discord, adăuga manual în spreadsheet. Pentru un singur curs cu 30 de oameni, asta însemna ~30 de ore de admin care răpeau timpul de pregătire materiale.

celindra.ro/dashboard + 12 înscrieri noi Cursul «Opțiuni Avansate» · 18-19 Iunie € 4,800 MRR luna curentă 87 active Membri Discord
Dashboard admin — design ilustrativ

Decizii tehnice cheie

1. Stack ales pentru mentenanță, nu pentru fancy

Celindra avea nevoie de un produs care să funcționeze stabil cu 100-500 de utilizatori, fără să cheltuiască pe un cloud de €1,000/lună. Stack-ul ales:

Next.js 14 TypeScript PostgreSQL Prisma ORM Stripe Checkout Discord API Resend Hetzner VPS Cloudflare

Mainstream complet. Orice developer cu experiență Next.js poate prelua codul mâine. Costuri totale infrastructură: ~€35/lună (VPS Hetzner CPX31 + Cloudflare gratuit + storage). Comparativ, aceeași aplicație pe AWS ar fi rulat cu €300-€500/lună.

2. Plăți: Stripe Checkout în loc de integrare custom

Tentația de a construi propriul checkout era acolo. Am refuzat. Stripe Checkout pre-built rezolvă 95% din cazuri, e PCI-compliant out-of-box, suportă carduri europene, Apple Pay, Google Pay. Pentru un produs cu volume sub 1,000 tranzacții/lună, ROI-ul de a construi custom checkout e negativ — economia la fee-uri (1-2%) e mai mică decât costul de mentenanță.

3. Discord integration via 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: Conținut video — unde îl stocăm?

Cursurile aveau 4-6 ore de video per ediție. Stocare pe S3-compatible (Hetzner Storage Box) + delivery prin Cloudflare Stream. Cost ~€8/lună pentru 200GB cumulat, fără surpriză la egress.

Rezultate măsurate la 6 luni post-lansare

−95%Timp admin per înscriere (de la 2-3h la 5 min)
+40%Capacitate înscrieri paralele (3 cursuri simultan)
€35Cost lunar infrastructură (vs €400 pe AWS)
99.6%Uptime în primele 6 luni
100%Code ownership la client (GitHub privat)
0Plăți pierdute după rezolvarea webhook-ului

Lecții pentru proiecte similare

  1. Idempotency e mandatory pentru orice integrare cu plăți. Webhook-uri care eșuează vor exista — întrebarea e doar dacă ai răspuns sau dacă pierzi banii.
  2. Discord are rate limits care nu sunt documentate clar. Plănuiește cu buffer — queue cu delay e mai sigur decât retry naiv.
  3. Hetzner + Cloudflare livrează 90% din ce dă AWS la 10% din cost pentru workload-uri stabile, EU-bound, sub 100k MAU. Asta nu e părere — sunt cifre din factură.
  4. Stripe Checkout pre-built > custom checkout pentru proiecte sub 10,000 tranzacții/lună. Construiești custom doar dacă ai justificare economică solidă.
  5. Code ownership de la primul commit e singura cale de a câștiga încrederea unui client. Nu e marketing — e business hygiene.

«În primele 6 luni am crescut numărul de cursuri lunare de la 1 la 3 fără să adăugăm o secundă de admin manual. Faintech a livrat exact ce am cerut, în timp, cu cod care arată curat când îl deschid în GitHub.» — Cristian Sima, founder Celindra

Ai un proiect similar?

Discoveryă scrisă în 48h cu specificație tehnică detaliată. Plus calcul ROI pe stack alternativ.

Discută proiectul

Citește în continuare