docs: add logo, README, architecture, deploy, wiki, analysis
This commit is contained in:
1 parent
32245f76ac
commit
15eb4016de
9 files changed
+561
-1
No files matched your search
@@ -0,0 +1,98 @@
|
||||
# Analisi Completa del Progetto Bookish
|
||||
|
||||
## 1. Analisi del Codice
|
||||
|
||||
### Qualità Generale
|
||||
- **Leggibilità**: Buona. Codice Python pulito con nomi descrittivi. JS ben strutturato.
|
||||
- **Manutenibilità**: Alta. Modulare (routes/services/static). Ogni file ha una responsabilità chiara.
|
||||
- **Type Safety**: Assente (Python). JS è vanilla senza TypeScript. Accettabile per un progetto personale.
|
||||
|
||||
### Punti di Forza
|
||||
- App factory pattern Flask (creazione configurabile)
|
||||
- SSE nativo senza dipendenze esterne
|
||||
- Thread-safe SSE manager con lock
|
||||
- Pulizia automatica file temporanei
|
||||
- Secure filename e path sanitization
|
||||
- Fallback ricerche porta libera
|
||||
- Formati validati dinamicamente lato server + client
|
||||
|
||||
### Punti di Debolezza
|
||||
- **Nessun logging**: Manca logging strutturato per debug
|
||||
- **Error handling**: Le eccezioni in conversion thread vengono catturate ma non loggate
|
||||
- **Nessun rate limiting**: Upload illimitati (accettabile per uso singolo)
|
||||
- **CSS in unico file**: Diventerà grande con l'aggiunta di feature
|
||||
- **Reader JS monolitico**: `reader.js` gestisce EPUB, PDF e testo in un unico file (può essere suddiviso)
|
||||
- **Nessun test**: Il progetto non ha test automatici
|
||||
- **Markdown renderer**: Il simpleMarkdownToHtml è minimale (non gestisce code block, elenchi annidati, tabelle)
|
||||
|
||||
### Pattern e Convenzioni
|
||||
- Flask Blueprints per separazione route
|
||||
- Template Jinja2 con estensione base
|
||||
- JS in IIFE (Immediately Invoked Function Expression) per isolamento scope
|
||||
- CSS organizzato per sezioni (navbar, converter, reader)
|
||||
- Config centralizzata in config.py
|
||||
|
||||
## 2. Analisi della Sicurezza
|
||||
|
||||
| Asse | Valutazione | Note |
|
||||
|---|---|---|
|
||||
| Path traversal | ✅ Protetto | `os.path.basename()` + `secure_filename()` |
|
||||
| Upload dimensioni | ✅ Limitato | MAX_CONTENT_LENGTH = 50MB |
|
||||
| XSS (templates) | ✅ Protetto | Jinja2 auto-escape |
|
||||
| XSS (reader) | ⚠️ Parziale | HTML renderizzato direttamente nel text viewer |
|
||||
| Command injection | ✅ Safe | Pandoc chiamato via libreria, non shell |
|
||||
| Secret key | ✅ Config | Tramite env var BOOKISH_SECRET |
|
||||
| CSRF | ⚠️ Assente | Nessun token CSRF sui form (uso personale) |
|
||||
| Autenticazione | ⚠️ Assente | Volutamente, uso singolo utente |
|
||||
|
||||
## 3. Analisi Performance
|
||||
|
||||
- **Conversione**: Pandoc è veloce (ebook < 1 secondo). PDF via WeasyPrint può richiedere qualche secondo.
|
||||
- **Thread**: Ogni conversione è un thread separato. Per uso singolo non ci sono problemi.
|
||||
- **SSE**: Connessione keep-alive leggera, ~300 bytes ogni 300ms.
|
||||
- **Reader**: epub.js rende tutto lato client. File EPUB fino a 50MB senza problemi.
|
||||
- **Memoria**: L'app in idle usa ~50MB. Durante conversione PDF ~150MB (WeasyPrint).
|
||||
|
||||
## 4. Analisi Modularità
|
||||
|
||||
```
|
||||
bookish/
|
||||
├── routes/ ⬅️ Separati per dominio (convert vs reader)
|
||||
│ ├── convert.py
|
||||
│ └── reader.py
|
||||
├── services/ ⬅️ Logica di business isolata dal routing
|
||||
│ ├── converter.py
|
||||
│ ├── sse_manager.py
|
||||
│ └── formatter.py
|
||||
├── templates/ ⬅️ HTML separato per pagina
|
||||
├── static/ ⬅️ CSS, JS, immagini
|
||||
│ ├── css/
|
||||
│ ├── js/
|
||||
│ └── lib/
|
||||
```
|
||||
|
||||
La separazione è chiara. Unica nota: `converter.py` importa `formatter.py` — dipendenza circolare potenziale ma gestita con import differito.
|
||||
|
||||
## 5. Possibili Miglioramenti
|
||||
|
||||
### Breve termine
|
||||
- [ ] Aggiungere logging strutturato (Python logging + file di log)
|
||||
- [ ] Migliorare il renderer Markdown nel reader (usare marked.js via CDN)
|
||||
- [ ] Aggiungere favicon diversa per stato conversione
|
||||
- [ ] Test di base con pytest
|
||||
|
||||
### Medio termine
|
||||
- [ ] Supporto per code block syntax highlighting nel reader
|
||||
- [ ] Drag&drop anche nella pagina reader per caricamento diretto
|
||||
- [ ] Modalità notte persistente con preferenza sistema (prefers-color-scheme)
|
||||
- [ ] Aggiungere pipeline di CI/CD per test
|
||||
|
||||
### Lungo termine
|
||||
- [ ] Supporto multi-utente con autenticazione
|
||||
- [ ] Libreria personale con cronologia conversioni (SQLite)
|
||||
- [ ] Plugin system per engine di conversione custom
|
||||
- [ ] Mobile app via PWA
|
||||
|
||||
## 6. Conclusioni
|
||||
|
||||
Bookish è un'applicazione solida per il suo scopo. L'architettura è pulita, la separazione delle responsabilità è corretta, e le scelte tecnologiche sono appropriate per un progetto self-hostato a uso singolo. Le aree di miglioramento principali sono logging, testing e completezza del reader markdown.
|
||||
Reference in new issue
Block a user