Progetto / Desktop App
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.
- Apri il portale sviluppatori del servizio, crea una nuova applicazione e copia il Client ID.
- 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.
- 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.
- Per AniList incolla il Client ID e l'access token, oppure l'URL di redirect che contiene il token, quindi scegli Save token.
- 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.
- Apri Preferences > Download e scegli Add new provider.
- Assegna un nome leggibile e seleziona Torrent se il sito elenca direttamente release torrent, oppure Index per motori e indici generici.
- 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}.
- Salva il provider e lascialo attivo. Puoi disattivarlo, modificarlo o eliminarlo in qualsiasi momento.
- 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.
