2.9 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Minuteur Dragodinde is a Windows desktop app (Electron) for managing Dragodinde breeding timers in Dofus 3. French-language UI.
Commands
- Dev:
npm start(runselectron .) - Build:
npm run build(produces NSIS installer indist/) - Build scripts:
build.bat(auto-elevates to admin) orbuild.ps1for Windows
No test framework or linter is configured.
Architecture
Single-page Electron app with no bundler. All source code lives in 4 files:
main.js— Electron main process: window management, system tray, native notifications, ntfy push notifications (mobile), auto-update via Gitea Releases API, IPC handlerspreload.js— Context bridge exposingwindow.electronAPI(alarm, notifications, ntfy, version, update channels)src/index.html— Monolithic ~2200-line file containing all HTML, CSS, and JS in one file. This is the entire renderer process.icon.png— App icon (256x256)
Renderer architecture (src/index.html)
All application logic is in <script> tags inside index.html. Key concepts:
- State object
S: Central state withenclosarray,activeId, settings. Persisted tolocalStorage. - Enclos: Up to 6 independent pens, each holding up to 10 Dragodindes (DDs). Enclos and DDs are drag-and-drop reorderable.
- Gauges: 6 gauge types (baffeur, caresseur, foudroyeur, abreuvoir, dragofesse, mangeoire/XP) with tier-based progression rates (tiers 1-4 based on gauge level thresholds at 40k/70k/90k).
- Timer system: Per-enclos timers with snapshot-based calculation.
elapsed()computes time since start,gaugeAfter()/gainedIn()/timeToGain()compute gauge progression. - Rendering: Imperative DOM manipulation via
render()function — no framework. - Dashboard/Stats views: Special
activeIdvalues ('dashboard','stats') for overview and statistics pages.
IPC channels
Main→Renderer: app-version, play-alarm-sound, update-available, update-downloading, update-progress, update-ready, update-error
Renderer→Main: trigger-alarm, show-notification, send-ntfy, focus-window, install-update, get-version
Auto-update flow
Checks Gitea Releases API on startup (after 3s) and hourly. Downloads NSIS Setup .exe to temp, launches with /S (silent), then quits app.
Dev vs packaged mode
When !app.isPackaged, userData is stored in MinuteurDragodinde-DEV (isolated from installed app) and a DEV badge is injected into the UI.
Key conventions
- All UI text is in French
- No external JS dependencies in renderer — everything is vanilla JS
- CSS uses custom properties defined in
:root(color theme: dark purple/gaming aesthetic) - Electron config:
contextIsolation: true,nodeIntegration: false,backgroundThrottling: false