La finalità prevista è implementare una piattaforma di informazione, educazione e coaching finanziario, per far interagire una community su temi di cultura e strumenti finanziari. La piattaforma Rame è strutturata come un ecosistema applicativo composto da client mobile iOS e Android, interfacce web, servizi backend, database applicativi, componenti WordPress, servizi terzi, sistemi di messaggistica e integrazioni AI.
L’architettura di riferimento esistente al 27/05/26 è riportata nel seguente diagramma:
https://miro.com/app/board/uXjVHN1APyg=/?share_link_id=643573205664
All’interno del progetto Rame sono presenti i seguenti siti web esposti:
Il sito web Rame Magazine contiene le date dei prossimi eventi e gli articoli pubblicati nel blog. È accessibile tramite il dominio: https://www.rameplatform.com
Il sito web Membership consente agli utenti di acquistare o regalare un abbonamento per accedere alle aree riservate agli iscritti al percorso Rame. È accessibile tramite il dominio: membership.rameplatform.com
Per lo staff è presente una pagina di amministrazione attraverso cui è possibile: verificare le metriche relative agli acquisti dei piani di abbonamento; gestire i coupon; consultare informazioni relative agli utenti;
Le modifiche dei dati riguardanti i percorsi didattici presenti in app;
verificare i progressi degli utenti; sbloccare nuove tappe a seguito dei meeting con le money coach è effettuato su AppBO. L’accesso al backoffice è riservato al personale autorizzato e rientra nel dominio delle interfacce operative interne.
La piattaforma Acuity permette agli utenti di organizzare i meeting con le money coach attraverso un calendario interattivo, in cui sono messi a disposizione gli slot degli appuntamenti.
I client principali della piattaforma sono costituiti da: applicazioni mobile iOS; applicazioni mobile Android; accesso web tramite browser.
Le app mobile comunicano con il backend applicativo esposto sull’endpoint: https://app-be.rameplatform.com . Il browser accede invece ai siti web esposti dalla piattaforma, tra cui: www.rameplatform.com, per Rame Magazine; membership.rameplatform.com, per l’area Membership.
Le comunicazioni provenienti dai client transitano attraverso Cloudflare, che svolge funzioni di DNS, mitigazione DDoS, Web Application Firewall, controllo e instradamento del traffico, supporto alla distribuzione dei contenuti statici.
Il flusso operativo principale prevede che i client iOS, Android e web inviino richieste a Cloudflare.
Le richieste applicative vengono inoltrate al backend su AWS, mentre le richieste web vengono indirizzate ai siti esposti.
Il backend elabora le logiche applicative, comunica con MongoDB Atlas, gestisce eventuali webhook dai servizi terzi, invoca le integrazioni AI quando necessario e restituisce le risposte ai client.
I siti WordPress gestiscono contenuti editoriali, membership e dati amministrativi collegati, mantenendo una persistenza relazionale dedicata.
Il sito di Rame è una piattaforma di blogging che gira all’interno di un ambiente WordPress versione 6.8 / 7.
Il template è custom e segue la brand identity di Rame. Il sito è costruito secondo la gerarchia classica dei template WordPress, con la seguente priorità:
Pagina-{slug}.php Pagina-id.php Pagina.php Archive.php index.php
I file PHP generano dinamicamente il template HTML, integrando i dati recuperati dal database relazionale MySQL/MariaDB collegato a WordPress.
Gli stili sono gestiti tramite CSS custom, mentre immagini e asset statici sono organizzati nelle cartelle dedicate del tema. (esempio: /wp-content/themes/rame/assets/)
I dati relativi ai siti WordPress sono gestiti tramite database relazionale MySQL/MariaDB. Questa persistenza è dedicata ai contenuti editoriali, ai dati della membership e ai dati amministrativi collegati ai siti WordPress.
Il sito WordPress è ospitato dal cloud provider Hetzner, con un’architettura composta da due VM separate. La prima serve il sito attraverso il reverse proxy Nginx e presenta una configurazione ottimizzata per PHP-FPM impostato per sostenere un moderato volume di carico. I certificati SSL del sito sono gestiti tramite Certbot.
La seconda ospita la una VM all'interno del quale gira il sito membership.
La terza ospita il database relazionale, che gira all'interno di un container docker isolato.
Per alcuni server sono stati abilitati i backup giornalieri, conservati per un massimo di una settimana.
Sono inoltre stati limitati i permessi di esecuzione sulle cartelle condivise lato SFTP, con permessi impostati a 755 sulle cartelle e 644 sulla maggior parte dei file.
L’accesso al database è protetto da un firewall, che abilita l'accesso solamente a una specifica IP whitelist. Le connessioni verso i database sono limitate tramite whitelist IP. L'accesso SSH sulla porta 22 è possibile attraverso chiave crittografica pubblica, abilitata dall'amministratore.
Le app mobile permettono all'utente di seguire il percorso di cultura finanziaria Rame; prenotare incontri con le money coach; utilizzare strumenti finanziari messi a disposizione dalla piattaforma (ad esempio il Bilancio Entrate e Uscite).
Lato Android, il linguaggio di riferimento è Kotlin 2.1. La gestione delle dipendenze e del processo di build è delegata a Gradle. L’interfaccia utente è stata sviluppata su base Jetpack Compose. Viene utilizzato Firebase per i test e il collegamento con le analitiche dell’applicativo.
Per iOS è stato adottato SwiftUI, il framework dichiarativo di Apple che, analogamente a Jetpack Compose, consente di costruire interfacce dinamiche.
SwiftUI favorisce coerenza nella scrittura del codice rispetto alla controparte Android e segue le linee guida di design di Apple, fornendo continuità con gli aggiornamenti delle ultime versioni di iOS. Anche lato iOS viene utilizzato un pattern MVVM, al fine di garantire un corretto state hoisting come nella controparte Android. Sono state previste due versioni specifiche di app, Rame e Rame Dev, per distinguere il servizio APNS di notifiche e i servizi terzi verso cui puntano. Le app iOS sono pubblicate su AppStore Connect e vengono scaricate da TestFlight.
Entrambe le applicazioni utilizzano in parte la libreria di animazioni Lottie (animazioni vettoriali, dinamismo nell'App e coerenza grafica) e comunicano con il backend grazie alla libreria Socket.IO. È presente un supporto integrativo per importare e processare i dati in formato excel.
Sia su iOS che su Android abbiamo una terza variante “local”, che usiamo solo come dev per testare in ambiente locale.
Il traffico di Cloudflare viene quindi instradato verso una macchina virtuale EC2 fornita da AWS, esposta attraverso il servizio Elastic IP che consente di mantenere un IP pubblico stabile. Il sistema operativo sul quale gira la macchina virtuale è Ubuntu, alla versione 24, e il traffico passa sulla reverse proxy configurata tramite Nginx. L’infrastruttura AWS limita l’esposizione dei servizi tramite configurazioni di rete, security group, accessi controllati e isolamento delle componenti.
Il backend è stato scritto in Node.js e si basa sul framework Express, con gestione delle comunicazioni real-time tramite Socket.IO e supervisione dei processi tramite PM2.
Sono inoltre presenti dei webhook, utilizzati dal backend per ricevere notifiche dagli strumenti di eCommerce, come WooCommerce, riguardanti gli acquisti di abbonamenti degli utenti, così da poter aggiornare di conseguenza lo stato di sottoscrizione degli utenti finali.
La persistenza dei dati applicativi è gestita tramite MongoDB Atlas, utilizzato come database NoSQL principale per dati utente, progressi, stati applicativi, contenuti dei percorsi e informazioni necessarie al funzionamento del backend. I dati relativi agli step del percorso di Rame e ai progressi effettuati dagli utenti sono memorizzati sul database non relazionale MongoDB. Il servizio DB è ospitato su server AWS gestiti da Atlas. Atlas gestisce IP whitelisting e fornisce un cluster di replica set per il disaster recovery.
Per la comunicazione con BigQuery Analytics, sulla macchina di produzione è stato predisposto un cronjob che effettua periodicamente il fetch dei dati da BigQuery Analytics, li elabora e li invia, tramite un processo schedulato, ai servizi di partner terzi per attività di analisi e fatturazione, ad esempio JOINTLY. Il cronjob salva e processa file in formato JSON, che vengono archiviati temporaneamente su un bucket Amazon S3 denominato rame-s3-private-general-bucket.
La chat privata della community, in cui i membri abbonati a Rame possono scambiarsi opinioni e consigli riguardanti il benessere finanziario.I servizi di messaggistica e community sono rappresentati come componenti separati e gestiti dal backend. Telegram è indicato come il precedente canale utilizzato per la community privata (in dismissione) e allo stato attuale sostituito da CometChat. Tale servizio esterno gestisce la messaggistica e la conservazione dello storico.
Per la gestione dei podcast e per la loro integrazione nel sito web e nelle app mobile, è previsto l’utilizzo dei componente Spotify e Spreaker. Il componente viene integrato nelle pagine web tramite link a Spotify (embed) , mentre nelle app mobile viene mediato dal backend che filtra, definisce e mostra i link mp3 aglo i utenti di accedere agli audio direttamente dai canali digitali delle piattaforme. Per le videocall con i coach, è previsto l'utilizzo della piattaforma Zoom.
Il sistema di ticketing è gestito esternamente tramite Zendesk.
Al momento non è presente alcuna integrazione diretta tra la piattaforma Rame e Zendesk.
I servizi dialogano con il sistema di ticketing tramite email: il ticket viene inviato creando una mail da un mail client esterno, all'indirizzo [email protected].
La gestione e lo storage dei ticket sono gestiti direttamente da Zendesk.
Il feedback sul ticket viene dato all’utente tramite email.
All’interno dell’applicativo è presente anche un AI Chatbot, progettato per aiutare gli utenti con i loro dubbi di natura finanziaria. Il backend invoca tramite API esterna un LLM OpenAI ChatGPT (3.5 Turbo), integrando il chatbot nel flusso applicativo. Le richieste generate dagli utenti nelle app vengono inviate al backend Rame, che aggiunge il contesto necessario e inoltra la richiesta ai servizi OpenAI. Le risposte vengono restituite al client tramite lo stesso backend.
Il contesto fornito al chatbot è memorizzato su MongoDB Atlas.
| Elastic IP | 15.160.74.169 |
| Security Group | launch-wizard-1 (rameprod) |
| EC2 (rameprod) | eu-south-1a / t3.medium / 15.160.74.169 / 172.31.37.240 |
| Storage EBS (rameprod) | /dev/sda1 (120GiB) |
| Snapshots | dimensione effettiva 30.83 GiB , data backup 22/05/2025 |
| S3 | rame-s3-private-general-bucket |
| Machine Name | rame-dp-prod |
| DB | MySQL/MariaDB |
| Type | CX32 |
| IP | 46.224.137.169 |
| Machine Name | rame-wp-prod |
| WP Vers/lang | 6.8 / PHP -> HTML/CSS |
| Type | CX32 |
| IP | 46.224.10.1 |
| Backup | Daily |
| Snapshot | None |
| Machine Name | rame-membership-prod |
| Type | CAX21 |
| IP | 91.98.93.172 |
| Backup | None |
| Snapshot | None |
| Network | rame-network-1 |
| IP | 10.20.0.0/16 |
| SSH | Any IPv4, Any IPv6 , TCP 22 |
| Whitelist | 91.98.93.172, 82.84.224.143 , port 3306 (MySQL) |