Web App creata con Claude
- Python 32.2%
- JavaScript 25.2%
- CSS 22.6%
- HTML 20%
| database | ||
| models | ||
| routes | ||
| static | ||
| templates | ||
| .gitignore | ||
| app.py | ||
| config.py | ||
| LICENSE | ||
| README.md | ||
| requirements.txt | ||
Gestione Scontrini
Applicazione web per archiviare gli scontrini della spesa: prodotti acquistati, prezzo, descrizione, marca e negozio/supermercato. Include una dashboard con statistiche di spesa e una ricerca avanzata fra tutti i prodotti acquistati.
Stack tecnologico
- Backend: Python 3 + Flask
- Database: SQLite (file singolo, zero configurazione)
- Frontend: HTML + CSS + JavaScript vanilla (nessun framework JS richiesto)
Struttura del progetto
scontrini-app/
├── app.py # Entry point Flask
├── config.py # Configurazione centrale (percorsi, parametri)
├── requirements.txt
├── database/
│ └── db.py # Connessione SQLite e creazione schema
├── models/ # Logica di accesso ai dati, un file per entità
│ ├── negozio.py
│ ├── marca.py
│ ├── scontrino.py
│ └── prodotto.py
├── routes/ # Controller Flask (blueprint)
│ ├── pages.py # Pagine HTML
│ └── api.py # API REST in JSON usate dal frontend JS
├── templates/ # Template Jinja2 (HTML)
│ ├── base.html
│ ├── dashboard.html
│ ├── scontrini.html
│ ├── scontrino_form.html
│ ├── prodotti.html
│ └── 404.html
└── static/
├── css/style.css
└── js/
├── utils.js # Funzioni comuni (fetch API, toast, formati)
├── scontrini_list.js
├── scontrino_form.js
└── prodotti_search.js
Installazione
cd scontrini-app
pip install -r requirements.txt
Avvio
python3 app.py
L'applicazione sarà disponibile su http://localhost:5000.
Al primo avvio viene creato automaticamente il file database/scontrini.db
con le tabelle necessarie: non serve nessuna configurazione manuale.
Funzionalità
- Dashboard: spesa totale, spesa per negozio, top marche, andamento mensile.
- Scontrini: elenco, creazione, modifica, eliminazione (con filtri per negozio e data).
- Prodotti: ogni scontrino contiene una lista di prodotti con descrizione, marca, prezzo unitario, quantità e categoria opzionale.
- Ricerca prodotti: ricerca testuale e filtri (marca, negozio, intervallo date) su tutti i prodotti acquistati nel tempo, utile per analisi storiche dei prezzi.
- Anagrafiche automatiche: negozi e marche vengono creati automaticamente alla prima digitazione (con autocompletamento nei form) e riutilizzati in seguito.
Modello dati
negozi (id, nome)
marche (id, nome)
scontrini (id, data_acquisto, negozio_id, note)
prodotti (id, scontrino_id, descrizione, marca_id, prezzo, quantita, categoria)
Le foreign key sono attive (PRAGMA foreign_keys = ON): eliminando uno
scontrino vengono eliminati automaticamente anche i suoi prodotti (CASCADE).
Estendere l'applicazione
Il progetto è organizzato per essere facilmente estendibile:
- Nuovo campo su un'entità: modifica lo schema in
database/db.py, poi aggiorna le query nel relativo file inmodels/. - Nuova funzionalità (es. categorie predefinite, export CSV, grafici):
aggiungi una funzione nel modello pertinente, una route in
routes/api.pyoroutes/pages.py, e — se serve una pagina — un nuovo template più un file JS dedicato instatic/js/. - Nuova entità: crea un nuovo file in
models/, la tabella indatabase/db.py, ed eventualmente nuove route. La separazione in blueprint permette di aggiungereroutes/nuova_area.pysenza toccare il resto.
API REST disponibili
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /api/scontrini | Lista scontrini (filtri opzionali) |
| GET | /api/scontrini/ | Dettaglio scontrino con prodotti |
| POST | /api/scontrini | Crea uno scontrino |
| PUT | /api/scontrini/ | Modifica uno scontrino |
| DELETE | /api/scontrini/ | Elimina uno scontrino (e i prodotti) |
| POST | /api/scontrini//prodotti | Aggiunge un prodotto allo scontrino |
| PUT | /api/prodotti/ | Modifica un prodotto |
| DELETE | /api/prodotti/ | Elimina un prodotto |
| GET | /api/prodotti/ricerca | Ricerca prodotti con filtri |
| GET | /api/negozi | Lista negozi |
| GET | /api/marche | Lista marche |
| GET | /api/statistiche | Statistiche aggregate per dashboard |