Il tuo universo anime / Una sola app

imlat

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

Offrimi un caffè

Nessun account e nessun intermediario: il sostegno arriva tramite un normale bonifico SEPA.

QR TYPEEPC / GIROCODE

Generazione del codice QR…

Dati del bonifico

Importo
A tua scelta
Intestatario
Banca
BBVA
IBAN
SWIFT / BIC
Causale

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.

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

  1. Apri MyAnimeList API clients. Accedi se MAL te lo chiede, quindi seleziona Create ID.
  2. Compila il form con questi valori:

    Valori per il form MyAnimeList
    App NameNimlat
    App TypeotherNimlat è un’app desktop e usa PKCE senza Client Secret.
    Client IDGenerato da MAL dopo l’invioQuesto è il valore da copiare in Nimlat.
    Client SecretNon viene generato con App Type otherCon App Type other MAL non lo genera e Nimlat non lo richiede.
    App DescriptionPersonal desktop app for managing and syncing an anime watch list
    App Redirect URLhttp://127.0.0.1:8765/callback
    Homepage URLhttps://www.nicolo-zanetti.com/projects/nimlat
    App Logo URLLascia vuoto
    Privacy Policy URLLascia vuoto
    Terms of Use URLLascia vuoto
    Commercial / Non-Commercialnon-commercial
    Name / Company NameIl tuo nome o username MAL
    Purpose of Usehobbyist
    API License and Developer AgreementSeleziona la casella di accettazione
  3. Invia il modulo.
  4. Riapri il client che hai appena creato. Ora MAL dovrebbe mostrare il Client ID: copialo.

In Nimlat — avvia il collegamento

  1. Ora apri Nimlat: Preferences > Watched > pannello MyAnimeList.
  2. Nel campo Client ID incolla il valore copiato da MAL.
  3. Seleziona “Connect MyAnimeList”.
  4. Buon divertimento.
Provider / Token AniListAniList

Collega Nimlat al tuo account AniList senza condividere la password o il Client Secret.

Su AniList — crea l’applicazione

  1. Apri le impostazioni sviluppatore di AniList, accedi e seleziona Create New Application.
  2. Compila il form con questi valori:

    Valori per l’applicazione AniList
    NameNimlat
    Redirect URLhttps://anilist.co/api/v2/oauth/pinDeve essere identico, senza spazi aggiuntivi.
    Client IDGenerato da AniList dopo il salvataggioQuesto è il valore da copiare in Nimlat e nell’URL del passaggio successivo.
    Client SecretNon copiarlo in NimlatNimlat usa il flusso Implicit e non richiede questo valore.
  3. Salva l’applicazione.
  4. AniList mostrerà il Client ID: copialo.

In Nimlat — richiedi il token

  1. Il collegamento usa l’Auth Pin documentato da AniList, così puoi copiare il token direttamente dalla pagina di AniList.
  2. Apri Preferences > Watched > AniList.
  3. In AniList client ID incolla il Client ID copiato.
  4. Seleziona Request access token from AniList. Nimlat aprirà l’indirizzo corretto nel browser.
  5. Accedi ad AniList se richiesto e autorizza Nimlat.
  6. AniList mostrerà un access token: copialo per intero.

In Nimlat — salva il collegamento

  1. In Access token or redirect URL incolla il token mostrato da AniList.
  2. Seleziona Save token. Nimlat verifica il collegamento prima di salvarlo.
  3. Buona visione
Provider / Accesso browserSimkl

Collega Nimlat al tuo account Simkl senza condividere la password o il Client Secret.

Su Simkl — crea l’applicazione

  1. Apri Crea un’app su Simkl e accedi se richiesto.
  2. Compila il form con questi valori:

    Valori per l’applicazione Simkl
    NameNimlat
    DescriptionPersonal desktop app for managing and syncing an anime watch list
    Redirect URIhttp://127.0.0.1:8765/callbackDeve essere identico, senza spazi aggiuntivi.
    Client IDGenerato da Simkl dopo il salvataggioQuesto è il valore da copiare in Nimlat.
  3. Salva l’applicazione.
  4. Simkl mostrerà il Client ID: copialo.

In Nimlat — avvia il collegamento

  1. Apri Preferences > Watched > Simkl.
  2. Nel campo Client ID incolla il valore copiato da Simkl.
  3. Seleziona Connect Simkl.
  4. Accedi a Simkl se richiesto e autorizza Nimlat. Il collegamento si completerà automaticamente.
  5. 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

  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.

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.

  1. 01 / UIRenderer React 19
  2. 02 / BOUNDARYPreload tipizzato
  3. 03 / DOMAINServizi e daemon nel main process
  4. 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.