Task manager personale per Windows che sostituisce l'agenda cartacea. Gestisce task, progetti (con descrizione e registro delle decisioni) e tag personalizzabili.
Tutti i dati sono file Markdown in una cartella a tua scelta, per esempio in OneDrive. L'app non usa database né servizi esterni. Va in rete solo quando premi "Controlla aggiornamenti" nelle Impostazioni.
- Windows 10 o 11
- Node.js 20 o superiore (versione LTS), necessario solo per sviluppare e compilare
cd task-notes-app
npm install
npm startAl primo avvio l'app chiede quale cartella usare per i dati. Se la cartella è nuova, crea la struttura, gli stati, le priorità e un progetto "Generale".
F5ricarica l'interfaccia (in sviluppo è utile dopo aver modificato i file dell'interfaccia).Ctrl+Shift+Iapre gli strumenti per sviluppatori (solo in sviluppo).
npm testI test coprono lettura e scrittura dei file (front matter, task, progetti, decisioni, storico, unione ed eliminazione dei tag, cestino, riprova della scrittura) e le funzioni di lettura dell'interfaccia (ordinamento, filtri, raggruppamenti, scadenze, markdown).
npm run distIn dist/ trovi due file:
- l'installer (
Taccuino Setup x.y.z.exe); - una versione portabile (
Taccuino x.y.z.exe), che non richiede installazione.
Gli eseguibili non sono firmati digitalmente, quindi al primo avvio Windows SmartScreen può mostrare un avviso: usa "Ulteriori informazioni" › "Esegui comunque".
Le versioni si pubblicano come release su GitHub. Con il push di un tag v*, GitHub Actions (.github/workflows/release.yml) compila installer e portabile su Windows e crea la release.
npm test
npm version minor # oppure patch: aggiorna package.json, fa il commit e crea il tag (es. v0.2.0)
git push --follow-tagsNell'app, Impostazioni › Aggiornamenti › "Controlla aggiornamenti" scarica la versione nuova. "Riavvia e installa" la installa in silenzio e riapre l'app. I dati non cambiano: stanno nella cartella dati, e le impostazioni locali in %APPDATA%\Taccuino.
Si aggiorna da sola solo la copia installata con Taccuino Setup x.y.z.exe. La versione portabile, lo zip e npm start mostrano un avviso al posto del pulsante.
src/
main/ processo principale di Electron (Node)
main.js finestra, impostazioni locali, canali IPC, osservazione della cartella
updater.js aggiornamenti da GitHub Releases
preload.js API esposta all'interfaccia (window.api), niente accesso diretto a Node
store.js lettura/scrittura di task, appunti, progetti, categorie e tag, regole sui dati, cestino
formats.js formato dei file di task, appunti, progetti, categorie e tag (funzioni pure)
fsutil.js scrittura atomica e riprova quando OneDrive blocca un file
frontmatter.js parser/serializer del front matter YAML (sottoinsieme)
renderer/ interfaccia (HTML + CSS + moduli JS, nessun passaggio di build)
app.js avvio, collegamento degli eventi agli handler, scorciatoie
core.js render, ricarica dai file, avvisi ed errori
handlers/ azioni dell'utente, un file per argomento (task, appunti, grafo, progetti, tag, impostazioni…)
state.js stato dell'interfaccia e funzioni di lettura sui dati
selectors.js letture che dipendono da filtri, pannello aperto o data di oggi
views/ una vista per schermata (task, appunti, grafo, dettaglio, progetti, progetto, tag…) e components.js
lib/ utilità (date, markdown, icone, disposizione del grafo)
test/ test con node:test
Le impostazioni locali (cartella scelta, dimensione della finestra) sono in %APPDATA%\Taccuino\config.json e non finiscono nella cartella dati. Anche raggruppamento, «Mostra completati», sidebar chiusa e larghezza del pannello di dettaglio restano su questo PC, nel localStorage dell'interfaccia.
La mascotte vive in basso a destra e reagisce alle azioni:
| Evento | Posa |
|---|---|
| Nessuna azione | riposo (respira piano) |
| Task creato | vola → annota (foglietto nel becco) |
| Task completato | festeggia (saltello); "Tutto fatto!" e poi dorme quando non restano task aperti |
| Task messo "In attesa" | aspetta |
| Scadenza superata (all'avvio o impostando una data passata) | allarme |
| Ricerca in corso / senza risultati | cerca / pensa |
| Errore | pensa |
Le immagini sono in src/renderer/assets/mascotte/, la logica in src/renderer/mascot.js (tabella REACTIONS) e le animazioni in fondo a styles.css. Nelle Impostazioni si può nascondere il corvo o attivare il movimento ridotto, che si attiva da solo anche quando Windows ha le animazioni disattivate.
La sezione Priorità progetti mostra i progetti attivi come schede, nell'ordine di priorità: il primo è il focus. Si riordinano trascinando una scheda; l'ordine si salva come ordine nei file dei progetti (gli archiviati restano in coda) e vale in tutta l'app: barra a sinistra, pagina Progetti, task raggruppati per progetto e Grafo.
La sezione Grafo mostra task e appunti su un cerchio, un arco per progetto (nell'ordine dei progetti) con il suo colore, e i collegamenti come curve che passano per il centro; le menzioni @ sono tratteggiate e gli appunti sono cerchi vuoti. Il pallino è più grande quanto più l'elemento è collegato. I filtri scelgono task e/o appunti, progetti, stati e tipi di collegamento, e se colorare gli archi per progetto o per tipo. Passando sopra un nodo si evidenziano i suoi collegamenti; un clic lo apre.
<cartella dati>/
taccuino.json marcatore della cartella, ultimi ID cancellati, migrazioni già fatte, ordine delle colonne
CLAUDE.md istruzioni per Claude sul formato dei dati (scritto dall'app)
note-personali.md note tue per Claude, importate da CLAUDE.md (l'app non lo tocca)
tasks/T-042.md un file per task
appunti/A-007.md un file per appunto
projects/VEND.md un file per progetto
tags/<categoria>/_categoria.md impostazioni della categoria
tags/<categoria>/<tag>.md un file per tag, con la descrizione nel corpo
.cestino/<data_ora>/… elementi eliminati, con voce.json
L'ordine delle colonne della lista task, scelto nelle Impostazioni, sta in taccuino.json come "colonne": ["id", "stato", "titolo", …], così è lo stesso su ogni PC che usa la cartella. Manca finché resta quello di partenza; gli ID che l'app non conosce si ignorano e le colonne che mancano vanno in fondo.
---
id: T-042
titolo: Preparare slide review KPI e-commerce
progetto: ECOM
stato: in-corso
priorita: alta
scadenza: 2026-09-29
creato: 2026-09-24
aggiornato: 2026-09-28
completato:
etichette:
- riunione
collegamenti:
- bloccato-da T-012
sottotask:
- "[x] Raccogliere i dati"
- "[ ] Bozza slide"
storico:
- 2026-09-24 Creato
- 2026-09-28 Stato: Da fare → In corso
---
Descrizione libera in Markdown.I collegamenti si scrivono nel file del task da cui partono, una riga "<tipo> <ID>" ciascuno (una riga con il solo ID è un collegamento senza tipo). Il task collegato li mostra con il nome inverso del tipo (T-042 «Bloccato da» T-012 → T-012 «Blocca» T-042) senza che il suo file cambi. Se il task collegato finisce nel Cestino, il collegamento resta e compare come «non trovato».
Nel testo (descrizione del task, ma anche descrizioni di progetti e tag) @T-012 è una menzione: nel pannello diventa un link al task. Scrivendo @ nella descrizione compaiono i task da citare. Le menzioni non si salvano nel front matter: si leggono dal testo.
Tutti i testi (descrizioni di task, progetti e tag, testo degli appunti e delle decisioni) sono Markdown GitHub (GFM): titoli, elenchi anche annidati, tabelle, blocchi di codice, citazioni, barrato e link, anche scritti come semplice indirizzo https://…. Una riga - [ ] cosa è una casella: cliccandola in lettura diventa - [x] cosa nel file, e viceversa (è diversa dai sotto-task, che stanno nel front matter). L'HTML scritto nel testo si vede così com'è, come testo, e si aprono solo i link http e https.
stato di un progetto è attivo oppure archiviato; ordine è la posizione scelta nella sezione Priorità progetti (vuoto: in fondo, per nome). Il progetto di un appunto è facoltativo. collegamenti e sottotask si scrivono solo se hanno voci. Il front matter non ammette commenti in linea (chiave: valore # commento): il commento diventerebbe parte del valore.
I sotto-task sono una checklist dentro il file del task: una riga "[x] testo" (fatto) o "[ ] testo" per voce, senza ID, stato o scadenza propri. Si spuntano, modificano, riordinano ed eliminano dal pannello, e non scrivono righe di storico.
Ogni categoria di tag creata dall'utente (es. contesto) diventa una chiave del front matter con lo stesso nome. Il valore è una lista se la categoria è "a scelta multipla" o "a testo libero".
---
id: A-007
titolo: Riunione KPI con Marco
progetto: ECOM
creato: 2026-09-30
aggiornato: 2026-09-30
etichette:
- riunione
collegamenti:
- correlato-a T-042
---
Testo libero in Markdown, anche con menzioni come @T-042.Gli appunti si scrivono dalla sezione Appunti (o dalla pagina del progetto) in un pannello come quello dei task. Un appunto ha un ID sequenziale come i task (A-001, …) che non cambia mai, così i collegamenti e le menzioni restano validi anche se il titolo cambia. Ha le stesse categorie utente e gli stessi collegamenti dei task, ma non stato, priorità o scadenza.
---
codice: VEND
nome: Dashboard vendite
colore: "#2F5BD3"
stato: attivo
creato: 2026-09-02
ordine: 1
repository: "https://github.com/esempio/dashboard-vendite"
---
## Descrizione
Testo in Markdown.
## Decisioni
### 2026-09-22 · Fonte unica: il datamart vendite
Niente estrazioni manuali da Excel.
Task: T-029repository è testo libero (un indirizzo, un percorso, un nome) mostrato così com'è, senza link; se è vuoto la chiave non si scrive.
- Collegamento è la terza categoria di sistema: i suoi tag sono i tipi di collegamento (di serie Bloccato da / Blocca, Dipende da / Necessario per, Correlato a), ognuno con
inverso:nel file, il nome letto dal task collegato. Si rinominano, riordinano, uniscono e se ne aggiungono altri dalla sezione Tag; un tipo usato da qualche collegamento non si elimina. - Stato e Priorità sono categorie di sistema: si possono rinominare, ricolorare e riordinare, ma non eliminare. Gli stati con
chiuso: true(di serie solo "Fatto") nascondono il task dalla lista principale, che resta comunque visibile nello storico e nelle pagine di progetto e tag. - Le priorità di serie sono Urgente, Alta, Media, Bassa e Backlog: l'ordine dei valori decide l'ordinamento della lista. L'ultimo livello è il default: i task nuovi nascono con lui, e un task senza priorità vale come lui ovunque (lista, gruppi, filtri), senza che il suo file cambi. Le cartelle create prima di Urgente e Backlog li ricevono una volta sola all'avvio (la migrazione resta segnata in
migrazioniditaccuino.json), quindi se poi li elimini non tornano. - Le altre categorie (di serie "Etichette") si creano, modificano ed eliminano dalla sezione Tag.
- L'ID di un tag è il nome del file e non cambia se lo rinomini, quindi i task non vanno aggiornati.
- Una categoria a testo libero (
tipo: testo, es. "Ticket Jira") non ha file per i valori: ogni task scrive i suoi valori a mano, come lista (ticket-jira: [PROJ-123]). Con un modellourl: https://jira.example.com/browse/{valore}in_categoria.mdogni valore diventa un link; un valore che è già un indirizzo web lo è comunque. Queste categorie compaiono solo nel pannello del task, non nei filtri, nei raggruppamenti o nella ricerca.
Task, appunti, progetti, tag e categorie eliminati non vengono cancellati: finiscono in .cestino/<data_ora>/, con lo stesso percorso che avevano (es. .cestino/2026-09-29_143205/tasks/T-042.md) e un voce.json che dice cos'erano. Dalla sezione Cestino di Impostazioni si ripristinano o si eliminano per sempre. All'avvio, gli elementi eliminati da più di 30 giorni vengono cancellati.
- Il ripristino si ferma se nel frattempo esiste già un file con lo stesso nome, o se il tag appartiene a una categoria che non c'è più.
- Eliminando un tag o una categoria, il valore viene tolto dai task, e ripristinandoli non torna.
- Gli ID dei task e degli appunti non vengono mai riusati: il prossimo ID tiene conto anche di quelli nel cestino e, dopo lo svuotamento, di
ultimoIdeultimoAppuntointaccuino.json. - Un progetto con task o appunti non si elimina: si archivia.
I file si possono modificare anche a mano. L'app si accorge dei cambiamenti (anche quelli sincronizzati da OneDrive da un altro PC) e ricarica i dati.
All'avvio l'app scrive nella cartella dati un CLAUDE.md che spiega a Claude il formato dei file e le regole da rispettare: come calcolare il prossimo ID, cosa aggiungere allo storico, quando impostare completato, come scrivere collegamenti, sotto-task e appunti, come spostare un elemento nel Cestino. Aprendo Claude Code sulla cartella dati, Claude può quindi creare e modificare task e appunti direttamente, e l'app ricarica i file da sola.
Il file viene riscritto a ogni nuova versione dell'app (e ricreato se lo cancelli), così segue sempre il formato attuale: non modificarlo. Le tue indicazioni per Claude vanno in note-personali.md, che l'app crea vuoto una volta sola e poi non tocca più. Il testo delle istruzioni sta in src/main/istruzioni-claude.md.
- Salvare ogni elemento in un file separato riduce i conflitti tra PC.
- Se OneDrive crea una copia di conflitto (es.
T-042-PC-NAME.md), l'app la mostra come un task a parte: tieni la versione giusta ed elimina l'altra. - La scrittura è atomica: prima un file temporaneo, poi la rinomina. Così OneDrive non sincronizza mai un file scritto a metà. Se OneDrive tiene bloccato il file, la rinomina viene riprovata per circa un secondo prima di mostrare l'errore.