← Home

Selected Works

Live and beta web applications. The projects that best represent my approach.

DATABASES = { 'default': { 'ENGINE': 'postgresql', 'NAME': 'saceli_db', } } class Confessione(models.Model): vacanza = models.BooleanField() attivo = models.BooleanField()
● LIVE

saceli.it

Sito Web

Website for Monsignor Giovanni Celi. The client independently manages schedules, content, photos and blog via a custom Django admin — without touching code. Photos are automatically converted to WebP. The system tracks visits with geolocation in GDPR compliance.

Django PostgreSQL Docker Hetzner Nginx CSS Grid
// highlights
  • Confession schedule system

    Dual state: normal and holiday. The client updates from the admin — the site updates in real time.

     

  • Photo gallery

    Multiple upload with automatic WebP conversion.

     

  • GDPR-compliant analytics

    Visit tracking with anonymised IP geolocation.

     

  • Custom admin

    Don Celi manages everything independently without ever touching the code.

Visit Website ↗
class VocabCard(models.Model): word = models.CharField(max_length=100) definition = models.TextField() mastery = models.IntegerField(default=0) def leitner_next(card): return card.mastery + 1
● LIVE

WordMaster Pro

Web App

Multilingual vocabulary learning app. Three modes: Study, Timed Challenge, and smart review with Leitner SRS algorithm. Progress is per-visitor via Django sessions. Interface available in 5 languages — internationalisation implemented in Vanilla JS without libraries.

Django SQLite JavaScript Bootstrap SRS i18n
// highlights
  • Leitner SRS Algorithm

    Smart review: difficult words come back more often.

     

  • Three study modes

    Study, Timed Challenge, SRS review — for every need.

     

  • Internationalisation

    Interface in 5 languages — Vanilla JS, zero libraries.

     

  • File-free audio

    Sounds generated via Web Audio API — zero latency, zero licences.

Visit App ↗
def search(request): q = request.GET["q"] kw = Article.objects.filter( content__icontains=q) vec = table.search(q).limit(10) return merge(kw, vec)
● LIVE

AIrticles

Web App

Django application to import and organise articles from WhatsApp, Medium and CSV. Local AI (Ollama/gemma3) automatically generates summaries, key points and categories. Hybrid search combines exact keyword and semantic similarity via LanceDB. No data sent to external services — privacy by design.

Django 6 Ollama LanceDB HTMX SQLite Docker Hetzner
// highlights
  • Fully local AI

    Ollama/gemma3 runs on the server — no data sent to OpenAI or others.

     

  • Hybrid search

    Exact keyword + semantic similarity via LanceDB.

     

  • Multi-source import

    WhatsApp, Medium, CSV — automatic deduplication.

     

  • Desktop-optimised

    Designed for desk use — focus on productivity, not mobile.

Visit App ↗