Sari la conținut
Toate studiile de caz
Media independentă și jurnalism
Media independentă și jurnalism Recorder (Asociația Recorder) Parteneriat continuu · ~2+ ani iulie 2026

Recorder: inginerie pe aplicații native și platformă de donații pentru jurnalism independent

Inginerie continuă pe aplicații native iOS + Android și o platformă completă de donații pentru cea mai importantă redacție independentă din România — peste 3.000 de abonați recurenți, sute de mii de tranzacții și aproape 40.000 de formulare 230.

Rezultate

  • Inginerie continuă pe aplicații native iOS și Android pentru peste 3.000 de abonați recurenți
  • Serviciu de plăți care procesează sute de mii de tranzacții pe patru procesatori
  • Migrare a mii de susținători recurenți de la Braintree la Stripe, cu continuitate a datelor de facturare și audit complet
  • Peste 40.000 de trimiteri Form 230 (redirecționare 3,5% impozit) automatizate end-to-end pentru ANAF
  • Cinci surse de plăți și donatori unificate într-un singur CRM Salesforce
  • Audituri automate de sănătate a plăților și remediere clienți duplicați

Stack tehnic

Swift / SwiftUIKotlin / Jetpack ComposeWordPress REST (PHP)Node.js / ExpressStripeBraintree (legacy)PostgreSQLSalesforceFirebaseRender
K+

abonați recurenți

K+

tranzacții de plată

K

formulare 230 (aproape)

procesatori de plăți

Clientul

Recorder este cea mai importantă redacție de jurnalism investigativ independent din România. Finanțată aproape în întregime din donații ale cititorilor, produce investigații video de lung format care modelează în mod repetat dezbaterea publică — după orice metrică rezonabilă, una dintre redacțiile cu cel mai mare impact din țară.

O platformă ca aceasta nu are voie să cadă duminică dimineața. Aplicațiile și stack-ul de donații trebuie să funcționeze pur și simplu.

Provocarea

Când am intrat în proiect, Recorder avea deja aplicații native iOS și Android în producție — dar avea nevoie de un partener de inginerie constant pentru mentenanță, livrare de funcționalități majore și sincronizarea ambelor platforme pentru peste 3.000 de abonați recurenți. Dedesubt, banii erau problema mai grea: un stack de plăți care gestiona sute de mii de tranzacții pe patru procesatori, cu Braintree în curs de închidere. Datele donatorilor erau fragmentate între Braintree, Stripe, PayPal, Patreon și Benevity, fără o singură sursă de adevăr pentru retenție sau raportare. Iar Formularul 230 — redirecționarea de 3,5% din impozitul pe venit către ONG-uri în România — generase deja aproape 40.000 de trimiteri printr-un proces manual, bogat în PII, care alimenta PDF-uri în lot către autoritatea fiscală (ANAF).

Aplicațiile

01 · Citește

Acasă și investigații

Un feed nativ de investigații, știri zilnice și videostory-uri — încărcări instant, categorii și căutare pe iOS și Android.

02 · Urmărește și ascultă

Articol, video și audio

Investigații complete cu video embedded și player audio pe capitole. Redarea supraviețuiește navigării — un mini player rămâne fix în timp ce cititorii continuă să navigheze.

03 · Susține

Donează în două tap-uri

Donații unice sau lunare prin Stripe PaymentSheet cu Apple Pay și Google Pay — fără să tastezi cardul.

04 · Gestionează

Istoric și abonament

Susținătorii revizuiesc fiecare donație trecută prin Apple Pay, Google Pay, Link și card, apoi actualizează sau anulează un cadou recurent în app — susținut de serviciul unificat de plăți.

05 · Donează mai mult

Formular 230, refăcut nativ

Românii pot redirecționa 3,5% din impozitul pe venit către o organizație non-profit. Majoritatea ONG-urilor îl colectează pe hârtie. Am livrat întreg fluxul ANAF în app — cinci pași, fiecare județ, semnătură pe ecran — acum cu aproape 40.000 de trimiteri.

Acasă și investigații

aplicație nativă

Articol, video și audio

aplicație nativă

Donează în două tap-uri

aplicație nativă

Istoric și abonament

aplicație nativă

Formular 230, refăcut nativ

aplicație nativă

Platforma

01 · Native

Două aplicații native

Swift + SwiftUI pe iOS și Kotlin + Jetpack Compose pe Android — menținute cu paritate de funcționalități pe un contract mobile-api/v1 comun.

02 · API

Un API REST pe WordPress

Un mu-plugin mobile-api/v1 expune autentificare, conținut, donații și profile peste fluxul editorial în care redacția lucrează deja.

03 · Plăți

Un serviciu de plăți pe Render

Un serviciu Node/Express frontează Stripe, Braintree, PayPal și Patreon — sute de mii de tranzacții, contracte Form 230 în PostgreSQL și audituri automate de sănătate.

04 · CRM

O singură vedere a donatorului în Salesforce

Importatorii Apex consolidează fiecare sursă de plăți plus Form 230 și consimțământ într-o singură înregistrare de donator, cu exporturi segmentate pentru retenție.

05 · Conformitate

Form 230, automatizat

Un formular public de trimitere plus un generator de PDF-uri în lot — aproape 40.000 de formulare de redirecționare 3,5% procesate pentru ANAF, cu CNP eliminat înainte de importul în CRM.

06 · Ops

Garduri de sănătate a plăților

Audituri automate Stripe și remediere clienți duplicați mențin baza recurentă curată și raportarea onestă.

Un API REST peste WordPress

Echipa editorială Recorder lucrează în WordPress. Să le ceri să migreze la un CMS headless doar ca aplicațiile să aibă un API curat ar fi taxat oamenii care produc efectiv jurnalismul în fiecare zi.

În schimb, am livrat un mu-plugin WordPress care expune un namespace curat mobile-api/v1 — autentificare, articole, dashboard, FAQ, donații, profil și un log de consimțământ GDPR. Firebase verifică tokenul ID; serverul emite un JWT de aplicație; fiecare request autentificat poartă în plus headerul x-recorder-auth. Aplicațiile consumă același contract, astfel încât o funcționalitate livrată pe o platformă ajunge pe cealaltă în câteva zile.

Braintree → Stripe

Cea mai stresantă parte a întregului angajament. Tokenurile de metodă de plată nu se convertesc între procesatori, deci un lift-and-shift era exclus. Am construit o migrare tranzacțională care recreează fiecare abonament în Stripe mai întâi și anulează partea Braintree doar la succes — păstrând ancorele ciclului de facturare și lăsând o pistă auditabilă. Un flux WordPress self-service de re-colectare a cardului a acoperit subsetul care avea nevoie de o metodă de plată nouă.

Braintreelegacy / sunset
Stripeprincipal
1Export

Abonamente Braintree → CSV

2Recreează

Import Stripe idempotent

3Anulează la succes

Braintree anulat doar dacă Stripe e ok

4Audit

Fiecare succes și eșec logat

Mii

de susținători recurenți migrați

4

etape pipeline · continuitate facturare

Migrare tranzacțională Braintree → Stripe: export, recreare idempotentă, anulare la succes și audit complet — mii de susținători recurenți migrați cu continuitate a datelor de facturare.

Rezultat: mii de abonați mutați între procesatori cu continuitate a datelor de facturare, un pipeline tranzacțional import-apoi-anulare și un rezultat înregistrat pentru fiecare abonament — peste un strat de plăți care procesa deja sute de mii de tranzacții.

Cum s-a desfășurat

  1. 2024 · T2 · 01 / 07

    Începe parteneriatul

    Am preluat aplicațiile SwiftUI și Compose existente — mentenanță, release-uri și lucrări de platformă pe stack-ul WordPress al Recorder.

  2. 2024 · T4 · 02 / 07

    Design migrare

    Toolkit-ul de migrare mapează clienții Braintree la Stripe cu o strategie tranzacțională import-apoi-anulare.

  3. 2025 · T1 · 03 / 07

    Serviciu de plăți live

    Serviciul de plăți Node/Express se deployează pe Render, unificând Stripe, Braintree, PayPal și Patreon.

  4. 2025 · T2 · 04 / 07

    Consolidare Salesforce

    Importatorii Apex aduc fiecare sursă de plăți, Form 230 și consimțământ într-o singură vedere a donatorului.

  5. 2025 · T4 · 05 / 07

    Întărire migrare

    Remediere clienți duplicați, campanii de retenție și localizare facturi românești pe baza Stripe.

  6. 2026 · T1 · 06 / 07

    Automatizare Form 230

    Un generator de PDF-uri în lot pentru ANAF automatizează birocrația de redirecționare 3,5% — aproape 40.000 de trimiteri Form 230 și în creștere.

  7. 2026 · acum · 07 / 07

    Lucru continuu pe produs

    Release-uri continue pe aplicații, îmbunătățiri Stripe checkout și audituri automate de sănătate a plăților.

Arhitectură

Două clienți native (iOS SwiftUI, Android Compose) comunică cu un backend WordPress REST (mobile-api/v1) pentru conținut, autentificare și profil, autentificându-se prin token Firebase ID → JWT de aplicație cu log de consimțământ GDPR. Plățile trec printr-un plugin WordPress Stripe plus un serviciu Node/Express standalone pe Render, care integrează Stripe, Braintree, PayPal și Patreon și stochează contractele Form 230 în PostgreSQL. Un CRM Salesforce consumă acel serviciu prin importatori Apex zilnici, consolidând fiecare sursă într-o singură vedere a donatorului și exportând liste segmentate pentru retenție. Lucrările în lot — migrarea Braintree→Stripe, localizarea facturilor și generarea PDF ANAF — rulează ca scripturi ops offline.

Graf force-directed al platformei mobile și de donații Recorder.

Deciziile care au contat

  • Braintree→Stripe prin recreare-apoi-anulare (tranzacțional), nu lift-and-shift — tokenurile de metodă de plată nu se convertesc, deci recrearea abonamentelor a păstrat ancorele de facturare și a oferit o pistă auditabilă, la costul unui flux self-service de re-colectare pentru unii donatori.
  • WordPress ca backend de conținut/autentificare mobilă — reutilizarea fluxului editorial existent, la costul modelării REST și autentificării ca mu-plugin-uri și menținerii plăților într-un serviciu separat.
  • Un serviciu de plăți dedicat pe Render care frontează fiecare provider — ține logica multi-provider adiacentă PCI și integrarea CRM în afara WordPress, la costul unui alt deployable.
  • Eliminarea CNP înainte de importul în CRM — minimizarea PII în Salesforce pentru GDPR, la costul păstrării reconcilierii ANAF în pipeline-ul dedicat Form 230.
  • Un singur produs Stripe dinamic cu prețuri per sumă — sumele donațiilor variază continuu, deci asta evită un tabel fragil de lookup al planurilor, la costul multor obiecte Price.

Rezultate

  • Două aplicații native menținute și extinse pe iOS și Android, deservind peste 3.000 de abonați recurenți
  • Sute de mii de tranzacții de plată procesate pe patru procesatori printr-un serviciu de plăți dedicat
  • Migrare completă Braintree → Stripe cu continuitate a datelor de facturare și importuri tranzacționale auditabile
  • Aproape 40.000 de trimiteri Form 230 automatizate end-to-end — intake public plus PDF-uri în lot pentru ANAF
  • Cinci surse de plăți și donatori unificate într-un singur CRM Salesforce cu segmentare automată pentru retenție
  • Garduri operaționale: verificări automate de sănătate Stripe și remediere clienți duplicați

Jurnalismul real merită inginerie reală. Suntem mândri că acest proiect este în portofoliul nostru.