feat: v0.2.0 — API REST, TTS support, documentazione completa e UI mobile-first
✨ Nuove funzionalità: - Nuovo endpoint API REST /api/v1/query (GET+POST) per consumo programmatico - Campo speakable_text ottimizzato per sintesi vocale (Alexa, Google Home) - Funzione strip_markdown() per conversione Markdown → plain text TTS - Supporto CORS per accesso cross-origin - UI responsive mobile-first con micro-interazioni e stati - Nuovo pulsante 'Nuova ricerca' e metadata bar 📚 Documentazione completa: - docs/ARCHITECTURE.md — architettura di sistema, stack, componenti - docs/FLOW.md — diagrammi Mermaid della pipeline e flussi - docs/API.md — documentazione endpoint REST con esempi curl - docs/WIKI.md — FAQ, glossario, roadmap - docs/DEPLOYMENT.md — guida deployment (Gunicorn, Nginx, Docker, systemd) - docs/CONTRIBUTING.md — guida alla contribuzione 🔧 Migliorie tecniche: - Pipeline di ricerca condivisa in _run_search_pipeline() - Gestione errori Gemini migliorata con _clean_error() - Sanitizzazione HTML con allowlist per prevenzione XSS - .env.example completo con commenti 🧪 Test: 109/109 passati
This commit is contained in:
1 parent
f3fe13c60e
commit
76bc667adf
20 files changed
+3385
-245
No files matched your search
@@ -0,0 +1,53 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
|
||||
<defs>
|
||||
<!-- Background gradient: deep indigo to purple -->
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#312E81"/>
|
||||
<stop offset="50%" stop-color="#4F46E5"/>
|
||||
<stop offset="100%" stop-color="#7C3AED"/>
|
||||
</linearGradient>
|
||||
<!-- Glow for the eye -->
|
||||
<radialGradient id="eyeGlow" cx="0.45" cy="0.4" r="0.55">
|
||||
<stop offset="0%" stop-color="#FFFFFF"/>
|
||||
<stop offset="60%" stop-color="#E0E7FF"/>
|
||||
<stop offset="100%" stop-color="#A5B4FC"/>
|
||||
</radialGradient>
|
||||
<!-- Pupil gradient -->
|
||||
<radialGradient id="pupil" cx="0.4" cy="0.35" r="0.5">
|
||||
<stop offset="0%" stop-color="#1E1B4B"/>
|
||||
<stop offset="100%" stop-color="#0F0D2E"/>
|
||||
</radialGradient>
|
||||
<!-- Subtle shadow -->
|
||||
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feDropShadow dx="0" dy="0" stdDeviation="2" flood-color="#1E1B4B" flood-opacity="0.5"/>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<!-- Base circle -->
|
||||
<circle cx="32" cy="32" r="30" fill="url(#bg)" filter="url(#shadow)"/>
|
||||
|
||||
<!-- Outer ring -->
|
||||
<circle cx="32" cy="32" r="28" fill="none" stroke="#A5B4FC" stroke-width="0.8" opacity="0.5"/>
|
||||
<circle cx="32" cy="32" r="25" fill="none" stroke="#C7D2FE" stroke-width="0.5" opacity="0.25"/>
|
||||
|
||||
<!-- Eye shape (almond) -->
|
||||
<ellipse cx="32" cy="31" rx="14" ry="10" fill="url(#eyeGlow)" opacity="0.95"/>
|
||||
|
||||
<!-- Upper eyelid arc -->
|
||||
<path d="M18 30 Q32 18 46 30" fill="none" stroke="#312E81" stroke-width="1.5" stroke-linecap="round" opacity="0.8"/>
|
||||
<!-- Lower lid hint -->
|
||||
<path d="M20 33 Q32 42 44 33" fill="none" stroke="#312E81" stroke-width="0.8" stroke-linecap="round" opacity="0.4"/>
|
||||
|
||||
<!-- Pupil -->
|
||||
<circle cx="32" cy="31" r="5.5" fill="url(#pupil)"/>
|
||||
|
||||
<!-- Pupil highlight / sparkle -->
|
||||
<circle cx="30" cy="29" r="1.8" fill="#FFFFFF" opacity="0.85"/>
|
||||
<circle cx="34" cy="33" r="0.8" fill="#FFFFFF" opacity="0.4"/>
|
||||
|
||||
<!-- Small oracle sparkle in top-right -->
|
||||
<g transform="translate(48, 16)" opacity="0.9">
|
||||
<path d="M0 -6 L1.5 -1.5 L6 0 L1.5 1.5 L0 6 L-1.5 1.5 L-6 0 L-1.5 -1.5 Z" fill="#FDE68A"/>
|
||||
<circle cx="0" cy="0" r="1" fill="#FEF3C7"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
Reference in new issue
Block a user