Il tuo universo anime / Una sola app
Trasforma una libreria infinita in un universo che puoi davvero governare. Nimlat riunisce quasi ventimila anime, progressi, nuove uscite e ricerca dei download in una sola app desktop: rapida, local-first e impossibile da confondere con qualsiasi altra.
- Catalogo
- Quasi 20.000 titoli
- Watch list
- AniList · MAL · Simkl
- Uscite
- Non perderne più una
- Local-first
- La velocità del tuo PC
Tutto sotto controllo
Non limitarti a seguire gli anime. Governa la tua libreria.
Dalla scoperta alla prossima puntata, Nimlat tiene ogni cosa al suo posto: serie raggruppate, progressi sincronizzati, nuove stagioni in arrivo e ricerche di download già pronte. Il catalogo vive sul tuo computer, così filtri, dettagli e stato personale rispondono subito. Niente salto continuo tra siti, liste e schede dimenticate.
Demo
Guardalo in azione. Immagina qui la tua libreria.
Dal primo colpo d’occhio al prossimo episodio: guarda quanto velocemente Nimlat trasforma migliaia di titoli in una libreria personale, leggibile e pronta all’uso.
Il centro di comando
Questa non è una watch list. È il tuo spazio anime.
Esplora l’intero catalogo come una media wall, entra in ogni serie, sorveglia le prossime uscite e avvia la ricerca giusta quando è il momento di guardare. Ogni schermata è progettata per farti arrivare prima a ciò che vuoi.
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 già disponibili ma non ancora integrati.
La tua storia ti segue
Porta con te ogni episodio già visto.
Ogni tracker ha un flusso di autorizzazione diverso. Apri Integra watch lists, scegli il provider e segui la sua guida dedicata; qui trovi anche la configurazione delle ricerche che preferisci.
Preferences / WatchedIntegra watch lists
Ogni servizio usa un collegamento diverso. Apri il provider che vuoi integrare e segui soltanto i passaggi dedicati a quel servizio.
Provider / Accesso browserMyAnimeList
Collega Nimlat al tuo account MyAnimeList senza condividere la password.
Su MyAnimeList — crea il Client ID
- Apri MyAnimeList API clients. Accedi se MAL te lo chiede, quindi seleziona Create ID.
Compila il form con questi valori:
Valori per il form MyAnimeList App Name NimlatApp Type otherNimlat è un’app desktop e usa PKCE senza Client Secret.Client ID Generato da MAL dopo l’invioQuesto è il valore da copiare in Nimlat. Client Secret Non viene generato con App Type otherCon App Type other MAL non lo genera e Nimlat non lo richiede. App Description Personal desktop app for managing and syncing an anime watch listApp Redirect URL http://127.0.0.1:8765/callbackHomepage URL https://www.nicolo-zanetti.com/projects/nimlatApp Logo URL Lascia vuoto Privacy Policy URL Lascia vuoto Terms of Use URL Lascia vuoto Commercial / Non-Commercial non-commercialName / Company Name Il tuo nome o username MAL Purpose of Use hobbyistAPI License and Developer Agreement Seleziona la casella di accettazione - Invia il modulo.
- Riapri il client che hai appena creato. Ora MAL dovrebbe mostrare il Client ID: copialo.
In Nimlat — avvia il collegamento
- Ora apri Nimlat: Preferences > Watched > pannello MyAnimeList.
- Nel campo Client ID incolla il valore copiato da MAL.
- Seleziona “Connect MyAnimeList”.
- Buon divertimento.
Provider / Token AniListAniList
Collega Nimlat al tuo account AniList senza condividere la password o il Client Secret.
Su AniList — crea l’applicazione
- Apri le impostazioni sviluppatore di AniList, accedi e seleziona Create New Application.
Compila il form con questi valori:
Valori per l’applicazione AniList Name NimlatRedirect URL https://anilist.co/api/v2/oauth/pinDeve essere identico, senza spazi aggiuntivi.Client ID Generato da AniList dopo il salvataggioQuesto è il valore da copiare in Nimlat e nell’URL del passaggio successivo. Client Secret Non copiarlo in NimlatNimlat usa il flusso Implicit e non richiede questo valore. - Salva l’applicazione.
- AniList mostrerà il Client ID: copialo.
In Nimlat — richiedi il token
- Il collegamento usa l’Auth Pin documentato da AniList, così puoi copiare il token direttamente dalla pagina di AniList.
- Apri Preferences > Watched > AniList.
- In AniList client ID incolla il Client ID copiato.
- Seleziona Request access token from AniList. Nimlat aprirà l’indirizzo corretto nel browser.
- Accedi ad AniList se richiesto e autorizza Nimlat.
- AniList mostrerà un access token: copialo per intero.
In Nimlat — salva il collegamento
- In Access token or redirect URL incolla il token mostrato da AniList.
- Seleziona Save token. Nimlat verifica il collegamento prima di salvarlo.
- Buona visione
Provider / Accesso browserSimkl
Collega Nimlat al tuo account Simkl senza condividere la password o il Client Secret.
Su Simkl — crea l’applicazione
- Apri Crea un’app su Simkl e accedi se richiesto.
Compila il form con questi valori:
Valori per l’applicazione Simkl Name NimlatDescription Personal desktop app for managing and syncing an anime watch listRedirect URI http://127.0.0.1:8765/callbackDeve essere identico, senza spazi aggiuntivi.Client ID Generato da Simkl dopo il salvataggioQuesto è il valore da copiare in Nimlat. - Salva l’applicazione.
- Simkl mostrerà il Client ID: copialo.
In Nimlat — avvia il collegamento
- Apri Preferences > Watched > Simkl.
- Nel campo Client ID incolla il valore copiato da Simkl.
- Seleziona Connect Simkl.
- Accedi a Simkl se richiesto e autorizza Nimlat. Il collegamento si completerà automaticamente.
- Buona visione
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.
Configura il provider
- 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.
Potenza invisibile
Sembra una macchina. Risponde come una macchina.
Dietro l’interfaccia al neon lavora un motore desktop costruito per cataloghi enormi: aggiornamenti persistenti, cache locale, processi in background e confini sicuri. Tu vedi una libreria immediata; Nimlat si occupa della complessità.
Desktop architecture
La potenza resta dietro le quinte.
Un’interfaccia reattiva davanti, servizi specializzati e tre database locali dietro. Ogni livello fa un solo lavoro e lo fa bene, per mantenere Nimlat veloce, stabile e pronto a crescere insieme alla tua libreria.
- 01 / UIRenderer React 19
- 02 / BOUNDARYPreload tipizzato
- 03 / DOMAINServizi e daemon nel main process
- 04 / STATE3 database SQLite locali
Feature map
Funzionalità implementate
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 già rilasciati ma non ancora integrati.
External Tracking Sync
Import e sincronizzazione bidirezionale dello stato di visione con AniList, MyAnimeList e Simkl.
Download Search Builder
Strumento configurabile per generare query di ricerca download con preset per qualità, 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.
Typed Context Bridge Contracts
Contratti TypeScript condivisi definiscono ogni API esposta dal preload, mantenendo il confine cross-process verificabile dal compilatore.
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.
Main-Process Domain Services
Regole di selezione, sincronizzazione e mutazione vivono in servizi dedicati del processo main, non nei componenti React.
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.
Atomic Baseline Replacement
Il catalogo scaricato viene verificato tramite checksum e sostituito con backup e rollback per proteggere il database attivo.
Encrypted Credential Storage
Token e credenziali dei provider passano da Electron safeStorage: Windows Data Protection API su Windows e Keychain su macOS.
Background Service Lifecycle
Daemon coordinati gestiscono scanner, hydration, aggiornamenti catalogo, cache e release tracking fuori dal ciclo di rendering.
Native Packaging and Updates
Electron Builder produce pacchetti nativi e il processo main integra il controllo degli aggiornamenti senza spostare responsabilità nel renderer.
Visual / Interaction Design
La parte più identitaria: UI tecnica, animata, volutamente eccessiva e costruita come showcase.
Distinctive Cyber-Neon UI
Identità 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 paginate, stato del renderer ridotto e lavoro pesante mantenuto nel processo main o nel database.
Manifesto
Design Philosophy
Perché Nimlat rifiuta il minimalismo anonimo pur restando un’applicazione utilizzabile.
Leggi il manifesto completo
Nimlat is intentionally over-the-top in both features and visual identity. It is built to feel excessive, technical, bright, and unapologetically stylized.
There is a concept in videogame interface design called diegetic UI: instead of interacting only with abstract panels, the user interacts with elements that feel like part of the world itself. Nimlat is still a web application, but it deliberately leans in that direction. Its interface is not meant to feel like a flat document with buttons on top. It is meant to feel like a machine, a console, a system with presence.
This is in strong contrast with much of modern aesthetic culture. Architecture, art, product design, and digital interfaces are increasingly flattened, simplified, muted, optimized, and stripped of ornament, identity, and symbolic force. In software, this tendency appears as sterile minimalism: rounded rectangles, interchangeable layouts, safe icons, muted palettes, and interfaces designed to be frictionless above all else.
I spent years studying and practicing usability. I know how to create clean, simple, practical, highly usable interfaces. So why is Nimlat the opposite of that? Why does it prioritize visual effects, identity, and atmosphere over absolute simplicity?
There are several reasons. The fact that Nimlat is not a commercial product matters. The fact that its target users are expected to be technically competent also matters. But those factors are not what drove the decision to use a visual style so deliberately misaligned with the current mainstream.
The first honest reason is that Nimlat is also a showcase of technical ability. Simplifying an interface today by building it out of flat, high-contrast Material-style buttons and cards is overwhelmingly easy. Creating neon elements that flicker, glow, animate, and still behave correctly inside a real application is not. Nimlat was built both to satisfy a personal need and to demonstrate that I can create technically ambitious, polished, distinctive software.
The second honest reason is that I have a visceral rejection of the dominant modern aesthetic: sterile minimalism, pseudo-brutalist digital design, corporate uniformity, and the broader cultural flattening that affects architecture, art, product design, and software alike.
This rejection is not aimed only at web interfaces. If anything, modern software is the easiest case to justify, because simplicity and accessibility often serve real users with limited technical ability, limited patience, or specific impairments. The deeper objection is cultural and aesthetic: it is aimed at modern art, architecture, and design when sterility is chosen deliberately rather than imposed by budget, function, or accessibility.
This is especially visible when modern aesthetic choices are applied to European artistic and architectural heritage. When classical buildings are “modernized” by stripping away their character, when historical spaces are forced to host sterile contemporary interventions, or when cities with centuries of visual identity are interrupted by objects that visibly despise their surroundings, the result is not practicality. It is aesthetic vandalism disguised as progress.
A clear example is Venice’s Ponte della Costituzione: a modern glass-and-steel bridge inserted into one of the most historically and visually coherent cities in Europe. Whether one likes it or not, it represents exactly the kind of modern intervention I object to: not because it is new, but because it asserts its own sterile modernity against the identity of the breathable history around it.
Much of modern design feels like the cultural equivalent of dystopian housing blocks: practical, efficient, rectangular, stripped of ornament, stripped of identity, stripped of soul. It works, but it does not inspire. It is suitable for systems that treat people as drones: users to be guided, workers to be managed, attention units to be processed.
Nimlat is not merely reacting against modern web design. It is reacting against the broader soul-devouring aesthetic culture that produced it.
Art, architecture, and software should not merely reduce friction. They should also inspire the mind, awaken passion, and give form to identity. Practicality matters. Usability matters. Accessibility matters. But a world made only of practical, usable, flattened things is not a world fit for human beings. It is a world fit for obedient drones.
The purpose of Nimlat’s visual identity is to reject that. It is meant to be bright, excessive, technical, personal, and alive. It is meant to prove that software can have an actual soul without becoming unusable or inaccessible.
Nimlat is a small cry against the darkness: a demand that the world around us should not only function, but also burn with identity, meaning, and human energy.
