Progetto / Desktop App

imlat

Local-first anime library manager costruito con Electron, React 19, TypeScript e SQLite. Un sistema desktop personale per catalogo, release tracking, sync esterna, download search e una UI cyber-neon volutamente eccessiva.

Runtime
Electron / React 19
Storage
SQLite local-first
Confine
Renderer / preload / main
Identita
Cyber-neon diegetic UI

Scope

Una catalog app che si comporta come una macchina.

Nimlat combina una seria architettura dati locale con un interfaccia che rifiuta di sparire nel minimalismo generico da prodotto. Il progetto e sia uno strumento pratico per librerie anime, sia uno showcase di architettura desktop, pipeline dati, image caching, superfici UI animate e confini cross-process fortemente tipizzati.

Dentro l'app

Una libreria, molte superfici.

Tre viste reali dell'app mostrano come Nimlat gestisce librerie, dettagli delle serie e uscite monitorate senza rinunciare alla sua identita visiva.

Screenshot 01 / libreria

Library Explorer

La media wall principale: ricerca, filtri e stato della libreria in una superficie pensata per cataloghi grandi.

Screenshot 02 / dettaglio

Media Detail Hub

Scheda completa di una serie con episodi, cast, staff, relazioni e azioni operative nello stesso contesto.

Screenshot 03 / uscite

Release Watch

La console che separa episodi futuri, nuove stagioni e contenuti gia disponibili ma non ancora integrati.

Guide rapide

Collega Nimlat al tuo ecosistema.

I dati restano locali. Le integrazioni esterne si attivano solo quando scegli un provider e salvi le relative credenziali nelle Preferences.

Preferences / WatchedCollegare AniList, MyAnimeList o Simkl

Nimlat puo importare la tua lista e sincronizzare gli aggiornamenti. Ogni servizio richiede una piccola applicazione personale sul proprio portale sviluppatori.

  1. Apri il portale sviluppatori del servizio, crea una nuova applicazione e copia il Client ID.
  2. Per MAL o Simkl imposta la Redirect URI indicata da Nimlat nel pannello del provider. In Preferences > Watched incolla Client ID e Redirect URI, poi scegli Start PKCE.
  3. Approva Nimlat nel browser. Copia l'URL finale dopo il redirect nel campo Redirect URL after approval e conferma con il pulsante accanto al campo.
  4. Per AniList incolla il Client ID e l'access token, oppure l'URL di redirect che contiene il token, quindi scegli Save token.
  5. Usa Import per portare in Nimlat lo stato esistente; usa Sync per inviare e ricevere gli aggiornamenti successivi.

Kitsu compare nell'interfaccia ma non e ancora collegabile. Le credenziali sono cifrate nel sistema operativo quando lo storage sicuro e disponibile.

Preferences / DownloadConfigurare i siti di ricerca download

Nimlat non scarica file e non aggira i siti: costruisce una query e apre la pagina di ricerca nel browser scelto.

  1. Apri Preferences > Download e scegli Add new provider.
  2. Assegna un nome leggibile e seleziona Torrent se il sito elenca direttamente release torrent, oppure Index per motori e indici generici.
  3. Incolla l'URL completo della ricerca e inserisci {query} esattamente nel punto in cui il sito si aspetta il testo. Esempio: https://example.com/search?q={query}.
  4. Salva il provider e lascialo attivo. Puoi disattivarlo, modificarlo o eliminarlo in qualsiasi momento.
  5. In Default browser usa il browser di sistema, oppure scegli un eseguibile specifico con Browse e salva le modifiche.

Usa solo siti e contenuti per cui hai i diritti necessari. Se ometti {query}, Nimlat aggiunge la query codificata in fondo all'URL.

Feature map

Capacita principali

Product Experience

La superficie applicativa: libreria, tracking, dettagli media, release future e strumenti operativi.

Local-first anime library manager

Desktop app per organizzare, monitorare e completare una libreria anime personale, con dati salvati localmente in SQLite.

Library Explorer

Vista principale per esplorare gruppi, serie e media standalone con ricerca, filtri, stati di integrazione e contenuti ignorati.

Media Detail Hub

Pagine dedicate per ogni media con dettagli catalogo, episodi, personaggi, staff e strumenti di download.

Release Watch

Dashboard per monitorare uscite future, episodi in arrivo, nuove stagioni e contenuti gia rilasciati ma non ancora integrati.

External Tracking Sync

Import e sincronizzazione dello stato di visione con provider esterni come AniList, MAL, Simkl e Kitsu.

Download Search Builder

Strumento configurabile per generare query di ricerca download con preset per qualita, sorgente, sottotitoli, audio e release group.

Data Pipeline

Il motore dati: ingestion, aggiornamenti incrementali, code persistenti e normalizzazione del catalogo.

AniList + Jikan Data Ingestion

Pipeline per importare metadata, relazioni, episodi, personaggi, staff e immagini da fonti esterne.

AnimeDB Baseline System

Database catalogo precaricato, scaricabile all'avvio e aggiornabile nel tempo senza ricostruire tutto da zero.

Incremental Catalog Updates

Aggiornamenti incrementali idempotenti, con cursori persistenti, overlap di sicurezza e protezione da retry inutili.

Hydration Queues

Code persistenti per arricchire i dati in background, con retry, failure state e pagina dedicata agli errori.

Release Date Resolution

Normalizzazione delle date di uscita da next airing episode, start date e fallback provider.

Deterministic Grouping Engine

Raggruppamento automatico delle serie basato sul relation graph di AniList, con supporto a override utente.

Desktop Architecture

La struttura Electron locale, con confini espliciti tra UI, preload, processo main e database.

Electron Secure Boundary

Separazione tra renderer, preload bridge e main process, senza accesso diretto del renderer a Electron o SQLite.

SQLite as Source of Truth

Tre database locali separati per catalogo anime, stato utente e cache immagini.

Thin IPC Layer

Handler IPC mantenuti sottili, con business logic spostata in servizi e operazioni database dedicate.

Facade-Based Domain Access

Accesso ai dati tramite facade e service layer, evitando SQL sparso nel resto dell'app.

Event-Driven Updates

Bus interni per propagare cambiamenti di gruppi, media, episodi, release watch, tracking e hydration progress.

Local Image Cache

Cache locale delle immagini per caricamenti veloci, riuso offline e fallback controllati.

Visual / Interaction Design

La parte piu identitaria: UI tecnica, animata, volutamente eccessiva e costruita come showcase.

Distinctive Cyber-Neon UI

Identita visiva forte, tecnica e volutamente non minimalista, pensata come showcase di UI engineering.

Pixi-Powered Animated Backgrounds

Background animati e atmosferici costruiti con Pixi, integrati nell'esperienza dell'app.

Custom Interaction Components

Controlli visuali custom come neon console, flip switch, circuit toggle, glow buttons e status controls.

Media Wall Rendering

Rendering performante di griglie visuali con texture cache e gestione ottimizzata delle immagini.

Ant Design Theming Layer

Uso di Ant Design con tema custom e override coerenti per mantenere componenti robusti ma stilisticamente riconoscibili.

Engineering Quality

Guardrail tecnici per mantenere un progetto personale ambizioso senza trasformarlo in caos.

TypeScript-First Architecture

Tipi condivisi tra main, preload e renderer per ridurre errori lungo i confini dell'app.

Focused Test Coverage

Test su ingestion, grouping, release watch, image cache, download search, servizi main e operazioni database.

Provider-Safe Data Fetching

Strategie di aggiornamento pensate per evitare traffico inutile verso API esterne.

Error Observability

Logging strutturato, errori persistenti e retry espliciti per i flussi dati critici.

Performance Guardrails

Payload IPC limitati, query paginated, stato renderer ridotto e lavoro pesante mantenuto nel main process/database.

Manifesto

Design Philosophy

Nimlat e volutamente eccessivo, sia nelle feature sia nell identita visiva. Deve sembrare sovraccarico, tecnico, luminoso e stilizzato senza scusarsi.

Nel design delle interfacce videoludiche esiste il concetto di UI diegetica: invece di interagire solo con pannelli astratti, l utente interagisce con elementi che sembrano parte del mondo stesso. Nimlat resta una web application, ma si spinge deliberatamente in quella direzione.

La sua interfaccia non vuole sembrare un documento piatto con pulsanti sopra. Vuole sembrare una macchina, una console, un sistema con presenza.

Questo contrasta con molte linee guida moderne, dove siti e applicazioni diventano sempre piu piatti, semplici, arrotondati, muti e intercambiabili.

Ho studiato usabilita per anni. So creare interfacce pulite, semplici, pratiche e altamente usabili. Allora perche Nimlat fa il contrario? Perche mette effetti, identita e atmosfera davanti alla semplicita assoluta?

Il fatto che Nimlat non sia un prodotto commerciale conta. Conta anche che i suoi utenti siano tecnicamente competenti. Ma non sono questi i veri motivi.

Il primo vero motivo e che Nimlat e anche uno showcase tecnico. Fare un bottone bianco e piatto e facile. Creare elementi neon che tremolano, brillano, si animano e funzionano comunque dentro una vera applicazione non lo e.

Il secondo motivo e un rifiuto viscerale dello stile dominante: minimalismo sterile, pseudo-brutalismo digitale e appiattimento culturale.

Molti siti moderni sembrano l equivalente digitale di blocchi abitativi distopici: pratici, efficienti, rettangolari, privati di ornamento, identita e anima.

Nimlat si oppone a questo. Arte, architettura e software non dovrebbero solo ridurre attrito; dovrebbero anche ispirare, accendere passione e dare forma a un identita.

Praticita e usabilita contano. Ma un mondo fatto solo di cose pratiche, usabili e appiattite non e un mondo adatto agli esseri umani.

Nimlat e un piccolo grido contro il buio: una richiesta che cio che ci circonda non si limiti a funzionare, ma bruci anche di identita, significato ed energia umana.