![]()
Il recente down del forum mi ha portato a riaprire un vecchio cassetto di un progetto che avevo fatto per imparare Golang diversi anni fa e visto che avevo un weekend quasi interamente libero, mi sono messo a cazzeggiare ad aggiungere cose e in realtà i risultati non sono male.
Il concetto chiave è una cosa estremamente ottimizzata, con features moderne su come si gestisce un forum oggi, che possa gestire community piccole/medie anche con una VPS da 5 dollari al mese, ed è per questo che una decisione architetturale obbligata è stata usare sqlite come database (cmq c’è la possibilità di switchare su postgresql con un cambio di config).
Visto che sono in una fase ancora embrionale dove sto lavorando molto sulle specifiche e vorrei rimanere sull’essenziale che conta senza fronzoli, avete suggerimenti che dovrei tenere in considerazione?
Che features vorreste nel forum?
Allo stato attuale, si presenta come un binario con 2 files db e un file toml di config (non obbligatorio), fine: col binario fai tutto, anche eventuali comandi di amministrazione, facendo una prova di carico (con un forum al 15% di NGI come numero posts) ho ottenuto risultati veramente incoraggianti:- co
- 2Mln di post nel db (50k topics) e 2k utenti, circa 2gb di file
- 140 utenti al secondo che navigavano il forum
- 60 utenti al secondo che scrivevano post
Ho ottenuto un carico di memoria medio di 250Mb e un tempo di latenza non superiore ai 400ms (ed è ancora un prototipo).
In settimana ho in programma di completare altre features e fare un test di carico generando un db delle dimensioni di NGI (500k di topics, 20mln di posts, 80k utenti, verrà circa 20gb di database) così vedo se arrivo anche a gestire una mole di dati come abbiamo qui.
Infine, sul lato features al momento sto gestendo queste:
- Profili utente: pagina profilo pubblica con bio, avatar, località, sito web, statistiche
- Sistema a ruoli con 7 ruoli: utente, membro, regolare, leader, moderatore, admin, proprietario
- Categorie: categorie gestite dall’amministratore con nome, slug, colore, icona, posizione
- Sottocategorie: nidificazione multi-livello fino a profondità 3
- @MenzioniMenzioni: Sintassi @nomeutente con completamento automatico e notifica
- Tag: tag gestiti dall’amministratore con colore, descrizione, massimo 5 per discussione
- Scope dei tag: I tag possono essere globali o limitati a una categoria (ereditati dalle sottocategorie)
- Reazioni Mi piace: attiva/disattiva mi piace sui post
- Segnalibri: salva/rimuovi post con nota facoltativa
- Bozze: salvataggio automatico delle bozze per chiave di contesto, multi-dispositivo
- Notifiche in-app: risposta, menzione, mi piace, segnalazione risolta, stato discussione, sistema
- Iscrizioni alle discussioni: livello di notifica per discussione: silenziato, normale, monitoraggio, osservazione
- Livelli di fiducia: 4 livelli (0-3) basati su attività, mi piace e segnalazioni
- Timer discussioni: chiusura automatica, apertura automatica, pubblicazione programmata
- Discussioni in evidenza: per categoria e globali
- Segnala post: gli utenti possono segnalare post: spam, inappropriato, fuori tema, messaggio personalizzato
- Coda di moderazione: visualizzazione staff delle segnalazioni in sospeso con contesto
- Risolvi segnalazioni: approva, rifiuta o rinvia segnalazioni con nota di risoluzione
- Elimina post: l’eliminazione soft sostituisce il contenuto, registrato nel log di moderazione
- Chiudi / Riapri discussione: blocca o sblocca discussioni per nuove risposte
- Sposta discussione: riassegna discussione a categoria diversa
- Silenzia utente: i post dell’utente richiedono approvazione del moderatore
- Sospendi utente: blocca completamente l’accesso dell’utente con durata opzionale
- Log di moderazione: traccia di audit completa di tutte le azioni di moderazione, visibile allo staff
- Chiusura automatica discussioni: chiusura automatica delle discussioni configurabile basata sull’inattività
- Whisper posts: visibilità solo per lo staff all’interno delle discussioni
Poi ho un’altra lista altrettanto lunga di desiderata ma finchè non ho consolidato una prima versione la lascio da parte.
Fra esperienza pluriennale in golang e l’aiuto dell’AI sto implementando cose a velocità luce, non mi vergogno a dirlo, anche perchè poi tutto il generato di solito ne faccio una review completa e le cose che non vanno bene le correggo.
Bonus:
Appena ho altri aggiornamenti condivido, intanto spero di raccogliere un pò di suggerimenti.
![]()
