- TRMNL X support: 1872×1404 16-level (4-bit) grayscale rendering, with
automatic OG/X model detection from device-reported resolution
- Touch-bar advance-on-tap playlists (TRMNL X): middle tap advances to the next
screen; timed screens auto-advance, untimed screens stay until tapped
- Calendar widget: localized month/weekday names, diacritic stripping, dividing
lines, weekend highlight, configurable font size and week start
- Custom widget grid cells now wrap long text instead of clipping to one line
- Seed default models + widget templates on every boot (idempotent upsert) so
existing installs pick up new widgets/models on upgrade without data loss
- Fix malformed image on Seeed OG DIY kit by serving BMP (#31)
- Fix spurious firmware update note (#28)
- Remove PostgreSQL support; SQLite only
* Add per-device night sleep schedule (quiet hours)
Devices can now be configured with a nightly quiet-hours window. During
the window the display endpoint returns refresh_rate = seconds-until-wake,
so the device deep-sleeps the whole night in one cycle (battery saving, no
nighttime e-ink refreshes) and wakes at the configured time.
Two per-device modes (showSleepScreen):
- false (default): keep the current screen frozen until morning
- true: show a dedicated sleep screen (crescent moon + "Sleeping until HH:MM"),
generated as a 1-bit e-ink PNG via Sharp (new SleepScreenService)
The window is evaluated in the global DEFAULT_TIMEZONE and supports ranges
that cross midnight. The sleepStartAt/sleepStopAt columns already existed in
the schema; adds showSleepScreen (applied via prisma db push, no migration).
Wires the fields through the device update DTO/service and the device edit
form (toggle + time inputs). Unit tests cover the quiet-hours logic.