recordum
«Record your existence.» Recordum vuole essere un diario completo della propria vita: non solo cosa si è fatto, ma quanto, come ci si è sentiti e cosa si è scritto. Le app per le abitudini di solito chiedono solo «fatto o non fatto?». Recordum invece è pensato per chi tiene traccia di cose più sfumate: la salute, il sonno, l'allenamento, la scrittura, un'astinenza, l'umore. Ogni abitudine è di uno di cinque tipi: un'azione, un contatore, una resistenza, un diario, uno stato. Le abitudini si raggruppano ad albero, così un bisogno complesso si costruisce componendo abitudini semplici. I dati restano sul dispositivo, cifrati, e non serve nessun account.
L'ho iniziato a maggio 2026 ed è il più ambizioso dei miei progetti, e il più personale: nasce dal mio bisogno di annotare ogni giorno alcune abitudini.
Cosa fa
Si crea un'abitudine partendo da un modello o da zero, e la si configura: ogni quanto si ripete, gli obiettivi, cosa si misura e con quali unità, le scale di valori, un cronometro integrato. Registrarla richiede un clic dalla schermata principale. Se ci si dimentica, si può segnare anche nei giorni passati.
Ogni abitudine ha la sua pagina: una mappa di calore degli ultimi mesi, la serie di giorni consecutivi (che tiene conto di quando l'abitudine è prevista) e l'elenco delle registrazioni. Accanto ai numeri c'è la scrittura: un diario personale con un editor di testo completo, e note veloci a cui allegare foto.
I dati si esplorano con grafici personalizzati e si esportano in PDF, HTML, Markdown, JSON o CSV. I backup sono cifrati, anche automatici, e da un backup si ripristina tutto.
L'interfaccia è in inglese e in italiano, con tema chiaro e scuro e scorciatoie da tastiera. Un sistema di plugin permette di aggiungere funzioni senza toccare il cuore del programma: i grafici e l'esportazione sono già costruiti così.
Com’è costruito
È scritto in C# con .NET 10 e diviso a strati, ognuno con un solo compito. Al centro c'è il dominio: le abitudini, le loro regole e i calcoli come le serie di giorni consecutivi, in C# puro, senza sapere niente né dell'interfaccia né del database. Uno strato di dati li salva in un database SQLite cifrato con SQLCipher, attraverso EF Core. La chiave non è mai scritta nel codice: la protegge Windows, oppure una passphrase scelta dall'utente. Sopra c'è l'app per il computer, in WPF con il pattern MVVM.
Accanto, un sistema di plugin: il programma dichiara dei punti in cui si può aggiungere qualcosa, e i plugin li riempiono. I grafici e l'esportazione sono i primi due.
Dominio, dati e plugin non dipendono dall'interfaccia, e sono pensati per essere riusati così come sono nella futura versione per il telefono.
Tecnologie
- C#
- .NET 10
- WPF
- EF Core
- SQLite
- SQLCipher
- LiveCharts2
- QuestPDF
A che punto è
La versione per Windows, fatta con WPF, è arrivata alla fase di stabilizzazione verso la prima versione completa: il cuore funziona, e si stavano sistemando difetti, grafici, esportazione e aspetto. Ora è ferma, perché sto portando l'interfaccia su Avalonia, che diventerà l'unica piattaforma: per il computer, Windows, Linux e macOS, e più avanti per il telefono, Android e iOS. Le fondamenta sono pronte: la logica dell'interfaccia non dipende più da Windows, e i suoi test girano anche su Linux.
A differenza di quaestio ha molti test automatici, oltre 1600, che controllano dominio, dati, plugin e interfaccia.
Cosa verrà
Prima di tutto finire il porting e arrivare alla versione 1.0, poi portarla sul telefono.
Poi l'ambizione vera: un «diario definitivo» di ogni giornata, che metta insieme in un'unica pagina, da leggere o da esportare, tutto quello che si è fatto, misurato e scritto quel giorno. E il confronto fra i dati, per riconoscere gli schemi che da soli non si vedono: nei giorni in cui dormo meno il mio umore è più basso? Mangio di più?
Più avanti, la sincronizzazione fra dispositivi senza un server mio, attraverso il cloud che si usa già (Dropbox, Google Drive, OneDrive, iCloud), e un sistema di plugin aperto anche ad altri. Recordum nasce per essere open source: il codice sarà pubblico quando sarà pronto.
- Codice non pubblico