WriterDesk + DeckServe
Whisper CLI - Foaie de drum
Concept
Două mașini cu roluri clare:
- WriterDeck (ex. T440p) - Debian minimal fără desktop, scrii în terminal, nimic altceva
- DeckServe (VPS sau bare metal) - Debian minimal, rulează doar
server.py, acces SSH doar pentru administrare
La save pe WriterDeck, fișierul .md pleacă automat pe DeckServe prin inotifywait + rsync. Zero pași manuali.
Stack
WriterDeck
- Debian minimal (fără desktop)
- Terminal + editor (Vim/Nano/Micro)
inotify-tools+ script de sync
DeckServe
- Debian minimal (fără desktop)
- Python (un singur fișier
server.py) - Caddy (proxy invers)
Faza 1 - DeckServe: setup de bază
- Instalare Debian minimal (netinstall, fără GUI)
- SSH configurat și securizat (cheie, nu parolă)
- Utilizator non-root pentru operare
- Firewall basic (ufw - doar porturile 80, 443, 22)
- Caddy instalat și pornit
Faza 2 - DeckServe: server.py
- Un singur fișier
server.py - Citește fișierele
.mddin folderul/posts/ - Convertește Markdown în HTML (librăria
markdownsaumistune) - Listează postările sortate după dată (din frontmatter sau din numele fișierului)
- Servește pe un port local, Caddy face proxy invers
- Frontmatter simplu în fiecare
.md(titlu, dată, taguri) - Feed RSS generat dinamic
Faza 3 - DeckServe: polish
- Temă HTML/CSS minimală, fără JavaScript
- Paginare simplă dacă sunt multe postări
- Pagină 404 customizată
- Reguli Caddy pentru URL-uri curate (
/posts/titlu-articol)
Faza 4 - WriterDeck: sync automat
-
inotify-toolsinstalat pe WriterDeck - Script care monitorizează folderul
/posts/local - La orice save,
rsyncautomat către DeckServe în background - Script pornit automat la login (systemd user service sau
.bashrc)
# flux tipic
./new-post.sh "Titlul articolului meu"
# se deschide editorul, scrii, salvezi
# inotifywait detectează save-ul, rsync trimite pe DeckServe
# articolul apare pe sit - fără niciun pas manual
Opțional / Later
- Suport pentru mai multe tipuri de conținut (note scurte vs articole lungi)
- Tag-uri și filtrare după tag
- Căutare simplă în fișiere (grep-based, fără index)
- Dark mode în temă
