Velora UI e un framework grafico Django pensato per pannelli admin e gestionali interni. Espone template tag riusabili, un design system SCSS sobrio ad alta densita informativa, JavaScript vanilla a moduli ES e una infrastruttura Docker pronta all'uso (sviluppo + produzione).
L'obiettivo e` consegnare componenti consistenti — header, sidebar, form, tabelle, link e feedback — senza dipendenze runtime sul frontend e senza lock-in su framework JavaScript.
- Caratteristiche v0.1
- Quickstart sviluppo
- Consumo solo asset Web (HTML / CSS / JS)
- Installazione in un progetto Django
- Componenti disponibili
- Showcase / living styleguide
- Test
- Sviluppo con Docker
- Roadmap
- Stato progetto
- Licenza
- Layout core: header con link e user-menu, sidebar collassabile, title bar con azioni primarie/secondarie, base.html riusabile.
- Form core:
velora_form_rowcon dispatch su 7 tipi base (text, textarea, select, checkbox, radio, on/off, file),velora_search_box,velora_fields_separator. Widget customOnOffWidgetintegrato. - Tabelle e link:
velora_tablecon normalizzazione header/righe eempty_message,velora_pagination(compatibile conPagedi Django), 4 link essenziali (velora_action_linkarancio,velora_nav_linkblu,velora_delete_linkrosso con conferma,velora_btn_linkbutton-styled). - Feedback:
velora_alert(4 varianti, dismissible),velora_label(5 varianti badge),velora_toast_messagesche integradjango.contrib.messagescon il sistema toast JS. - Design system: tokens SCSS (palette, tipografia, spacing) come CSS custom properties, predisposti per dark mode futura.
- Infrastruttura Docker:
docker compose upavvia Django + nginx + watcher asset, virtual host localevelora.local, separazione netta.env(dev) /.env.prod(prod) con gunicorn + postgres + nginx in produzione. - Living styleguide: app
showcasedocumenta visualmente ogni componente con render live + snippet. Visual regression con Playwright contro 7 baseline PNG.
Prerequisiti: Colima (consigliato su macOS) o Docker Desktop, git, e permessi amministratore per modificare il file hosts.
# 1. Avviare il runtime Docker (esempio con Colima)
colima start --cpu 4 --memory 6
# 2. Clonare il repository
git clone git@github.com:gioelecavallo13/Velora.git
cd Velora
# 3. Configurare l'ambiente locale
cp .env.example .env
# 4. Aggiungere velora.local al file hosts (una tantum)
sudo sh -c 'printf "\n127.0.0.1 velora.local\n" >> /etc/hosts'
# 5. Avviare lo stack (Django + asset watcher + nginx)
docker compose -f docker-compose.dev.yml upA primo accesso lo showcase risponde su http://velora.local entro ~30 secondi (build immagine inclusa). Fonti complete nel file docs/INFRASTRUCTURE.md.
Per siti o applicazioni senza Django, gli asset ufficiali sono pubblicati solo come allegati delle GitHub Releases (tag vX.Y.Z):
- CSS:
velora-X.Y.Z.min.css - JS core (leggero, senza Chart.js):
velora-X.Y.Z.min.js - JS full (con grafici da tabella / Chart.js):
velora-X.Y.Z.full.min.js
Esempio base:
https://github.com/gioelecavallo13/Velora/releases/download/vX.Y.Z/velora-X.Y.Z.min.css
Istruzioni dettagliate, auth per repository privati, pinning e note su ESM sono in docs/INTEGRATION_STATIC.md. Non usare il branch main come sorgente di produzione per questi file.
Velora UI e` distribuito come pacchetto Python via Git privato. Per integrarlo in un progetto esistente:
pip install "velora-ui @ git+https://github.com/gioelecavallo13/Velora.git@v0.5.0"Gli stessi tag v0.5.0 pubblicano anche gli asset Web (.min.css / .min.js) sulla relativa GitHub Release: vedi docs/INTEGRATION_STATIC.md se ti servono solo i file statici.
Poi nel settings.py:
INSTALLED_APPS = [
# ...
"velora_ui",
]
TEMPLATES = [
{
# ...
"OPTIONS": {
"context_processors": [
# ...
"velora_ui.context_processors.header_defaults",
],
},
},
]
# Personalizzazione opzionale di brand
VELORA_HEADER_APP_NAME = "Il mio gestionale"
VELORA_HEADER_APP_ICON_URL = "/static/img/logo.svg"
# Opzionale: carica CSS/JS dalla stessa GitHub Release (prefisso download, solo https + github.com)
# VELORA_ASSETS_BASE_URL = "https://github.com/TUO_ORG/Velora/releases/download/v0.5.0/"
# VELORA_ASSETS_JS_FULL = True # False per bundle core senza Chart.jsIn un template:
{% extends "velora_ui/base.html" %}
{% load velora_layout velora_forms velora_data velora_links velora_feedback %}
{% block title %}Clienti{% endblock %}
{% block title_bar %}
{% velora_title_bar title="Clienti" actions=page_actions %}
{% endblock %}
{% block content %}
{% velora_search_box placeholder="Cerca cliente..." %}
{% velora_table headers=table_headers rows=table_rows empty_message="Nessun cliente trovato" %}
{% velora_pagination page=page_obj %}
{% endblock %}I contratti dettagliati di ogni tag (chiavi accettate dei dict in input, comportamento con valori mancanti) sono in AGENTS.md.
| Modulo | Tag | Scopo |
|---|---|---|
velora_assets |
{% velora_assets %} |
Inietta CSS + JS compilati con cache-busting |
velora_layout |
{% velora_header items=... %} |
Header globale (link + user-menu) |
velora_layout |
{% velora_title_bar title=... actions=... %} |
Title bar di pagina con CTA |
velora_forms |
{% velora_form_row type=... name=... ... %} |
Form row dispatcher (7 tipi base) |
velora_forms |
{% velora_search_box %} |
Barra di ricerca semplice |
velora_forms |
{% velora_fields_separator %} |
Separatore visivo fra gruppi di campi |
velora_data |
{% velora_table headers=... rows=... %} |
Tabella statica con header/rows normalizzati |
velora_data |
{% velora_pagination page=... %} |
Paginazione con preservazione querystring |
velora_links |
{% velora_action_link href=... label=... %} |
Link arancio per azioni di riga |
velora_links |
{% velora_nav_link href=... label=... %} |
Link blu per navigazione |
velora_links |
{% velora_delete_link href=... label=... %} |
Link rosso con window.confirm() JS |
velora_links |
{% velora_btn_link href=... label=... variant=... %} |
Link stilizzato come pulsante |
velora_feedback |
{% velora_alert variant=... %}...{% endvelora_alert %} |
Alert inline (4 varianti) |
velora_feedback |
{% velora_label variant=... text=... %} |
Badge inline (5 varianti) |
velora_feedback |
{% velora_toast_messages %} |
Bridge django.contrib.messages → toast JS |
API JS pubblica esposta su window.Velora:
Velora.toast.success(text, opts)/error/warning/info/show({variant, message, duration, persistent, dismissible})/dismissAll()Velora.register({name, init})per agganciare componenti custom al sistema di auto-init viaMutationObserver
L'app showcase (in showcase/) e` la documentazione visuale viva di Velora UI. Una volta avviato lo stack dev, la pagina http://velora.local mostra ogni componente con:
- render live con dati realistici
- snippet copiabile del codice template
- sidebar TOC navigabile fra le 6 sezioni (overview, layout, form, tabelle, link, feedback)
La consistenza grafica e protetta da test di visual regression Playwright (tests/visual/) con 7 baseline PNG (uno per sezione + uno full page). Quando un componente cambia di proposito, le baseline si aggiornano con pytest tests/visual --update-snapshots`.
Suite pytest unitaria (template tag, widget, context processor):
docker compose -f docker-compose.dev.yml exec web pytestVisual regression (in container dedicato playwright-tests con browser pre-installati):
# confronto contro baseline (CI mode)
docker compose -f docker-compose.dev.yml --profile test run --rm playwright-tests
# rigenerare le baseline (dopo cambio voluto)
docker compose -f docker-compose.dev.yml --profile test run --rm playwright-tests \
bash -lc "pip install --quiet --ignore-requires-python -e .[dev] && pytest tests/visual --update-snapshots"Stato attuale: 236 test unitari + 17 snapshot Playwright (16 sezioni + 1 full page), tutti verdi dopo aggiornamento baseline quando necessario.
Prima di generare gli asset Ionicons nello showcase: npm install e npm run sync:icons (copia le SVG da ionicons e rigenera ionicons-manifest.json).
Lo stack di sviluppo e documentato per esteso in [docs/INFRASTRUCTURE.md`](docs/INFRASTRUCTURE.md):
- prerequisiti e installazione runtime (Colima / Docker Desktop)
- setup
velora.localsu macOS / Linux / Windows - comandi utili (shell, migrate, createsuperuser, logs, rebuild)
- troubleshooting (porta 80 occupata, DNS, migrazioni, permessi)
- separazione completa dev / prod
- deploy produzione con
docker-compose.prod.yml(gunicorn + nginx + postgres + TLS-ready)
| Versione | Stato | Contenuto principale |
|---|---|---|
| v0.1.0 | rilasciato | Layout, form 7 tipi base, tabella + paginazione, 4 link, feedback, showcase, Docker dev+prod |
| v0.2.0 | rilasciato | Header multi-menu/apps-menu/notifications, breadcrumb, tooltip, submenu, dropdown, dialog, copy/toggle/settings link, progress bar (3 varianti) |
| v0.3.0 | rilasciato | Form avanzati (datepicker, datetimepicker, multiselect, autocomplete locale + remoto, image_preview, rating_stars, timer_fields, redactor), tabelle interattive con form-in-cell AJAX e bulk-actions, checkbox tag con 5 varianti colore |
| v0.4.0 | rilasciato | Chart.js da tabella, sync Ionicons + galleria showcase, velora_logo, velora_satisfaction_bar, tema dark CSS, i18n (IT/EN showcase) |
| v0.5.0 | in release | Asset Web su GitHub Releases (core/full), INTEGRATION_STATIC + snippet, CI release + pytest, ui_registry SSoT, opzionale VELORA_ASSETS_BASE_URL |
Dettagli e milestone in velora-ui_django_framework_61f8855e.plan.md (cartella piani locale).
Versione corrente: vedi pyproject.toml. Le release alpha (v0.1.0-alpha.x) hanno chiuso le milestone M1 → M5 di v0.1; la release candidate v0.1.0-rc.1 ha chiuso M6. La v0.1.0 stabile ha chiuso M7. La v0.2.0 ha chiuso la Fase 10 del piano (navigation e feedback ricchi). La v0.3.0 chiude la Fase 11: form avanzati & tabelle interattive. La v0.4.0 chiude la Fase 12 del piano: chart da tabella, Ionicons, logo/satisfaction, tema dark, i18n. La v0.5.0 aggiunge distribuzione asset Web via GitHub Releases, documentazione statica e integrazione Django opzionale sugli stessi URL. Il progetto e distribuito via Git privato, non e ancora pubblicato su PyPI.
Le decisioni di prodotto (target, distribuzione, criteri di successo) sono tracciate in VISION.md.
Velora UI e` rilasciato con Apache License 2.0.