| Age | Commit message (Collapse) | Author |
|
synopticMorph.sh: rolling-cache implementation. On each run:
1. Pick the last WINDOW_DAYS*4 charts from the archive.
2. For each adjacent pair, fill any missing pair-morph (cached at
/mnt/enclave/synoptic/pairs/<chartA>__<chartB>/p_NNNN.png).
3. Evict pair dirs whose slug isn't in the current window.
4. Symlink frames into a temp seq dir with LINGER on each source
chart and DWELL on the latest, fade-in 1s and fade-out 2s.
5. Encode to /srv/www/pestrel/morph.mp4 with ffmpeg/h264.
Bootstrap: ~50 min CPU on first run (119 pair morphs at ~25s each).
Steady state: ~1 min/cycle (1 new pair + concat + encode).
synoptic-morph.service: oneshot, TimeoutStartSec=2h to cover the
bootstrap, Nice=10 + IOSchedulingClass=idle so it doesn't fight
the system for CPU/disk.
synoptic.service gains OnSuccess=synoptic-morph.service so the
chain fires automatically after each successful chart fetch.
morph.html: points at /morph.mp4 now. index.html: "Three-day
history" button renamed to "Monthly history", URL /morph.html.
setup.sh: installs the new unit + script, provisions
/mnt/enclave/synoptic/{pairs,out} when the enclave mount is present.
.gitignore: drop .claude/ (transient harness state).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
Captures the deferred plan to move BOM FTP fetching off the SG VPS
(cremonde) onto the AU pi (stan), with stan rsyncing finished APNGs
to cremonde over WireGuard. Trigger conditions, design, and open
questions documented for a future agent (or future st33v) to pick
up if/when warranted.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
Captures the TLS-fallthrough fix, two more radars, cross-page nav,
mobile sizing, and the Radars button on synoptic — all on
2026-06-10, day after the initial rollout.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
Two new product codes: IDR403 (Canberra) and IDR193 (Cairns).
radar.service / radar-retry.service gain two more ExecStart= lines.
Per-radar pages: nav strip at top with all four radars + a Synoptic
button linking to pestrel.com; current page is highlighted. Layout
switched to column flex (nav on top, image fills below) and the
image now uses `width: 100%; max-width: 512px` so it fills phone
viewports without upscaling beyond the BOM-native 512px on desktop.
Synoptic page (index.html): "Radars" button fixed to the left edge
at top 16.6%, linking to https://radar.pestrel.com/.
Landing page (radar.pestrel.com/): rebalanced for four radars plus
a dashed-border Synoptic button.
nginx/radar.pestrel.com.conf: pulled in the certbot-managed TLS
block so a fresh setup matches production state.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
Captures the spec → deployed-and-looping arc for IDR713 and IDR663,
the three real bugs encountered (silent IM single-frame PNG, ffmpeg
palette mismatch, git remote user mix-up), and a temp-file race
side-quest worth hardening later.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
radar.service / radar-retry.service now invoke radarFetch.sh once
per product code, prefixed with `-` so one radar's outage does not
skip the other.
Landing page at / links to /sydney and /brisbane; each per-radar
page is the familiar black-page full-image idiom with a small
corner link to its sibling.
setup.sh provisions the subdirs and installs all three pages.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
Composited frames are palette-based PNGs with slightly different
palettes per frame; ffmpeg's apng encoder rejected this with
"Input contains more than one unique palette." Converting to rgba
in the filter chain gives all frames the same pixel format.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
ImageMagick on Arch lacks the APNG png-writer; magick was silently
producing single-frame PNGs. Switch to ffmpeg's concat demuxer +
apng muxer, which gives proper animated APNG with per-frame
durations (last frame still gets END_PAUSE).
Add ffmpeg to the pacman install list in setup.sh.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
radarFetch.sh fetches BOM IDR713 transparencies (24h cache) and the
last six 6-minute echo frames, composites them via cached lower/upper
plates, and publishes an APNG loop to /srv/www/radar/.
systemd: radar.{service,timer} on a 6-min cadence, with retry units
mirroring the synoptic pattern.
nginx: new radar.pestrel.com vhost (still commented in setup.sh until
DNS propagation is confirmed).
setup.sh provisions radar dirs, installs radar units, enables timer.
deploy.sh accepts synoptic|radar arg.
Parameterised on product code; adding another radar is a one-line
config change.
Spec: doc/bom-radar-spec.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|
|
|
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Renders at 300dpi then resizes to screen resolution, keeping aspect ratio.
PNG remains the right format for line art and flat colour.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
magick creates files respecting the process umask; chmod 644 after mv
ensures nginx can serve the file.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Inline DeriveTime from func/deriveTimeString.sh; delete func/
- Add set -euo pipefail, quoting, and stderr for error messages
- Archive PDFs to /var/lib/synoptic/archive/raw/ after conversion
- Publish PNG to /srv/www/synopticLatest.png
- Add systemd units: synoptic.{service,timer}, synoptic-retry.{service,timer}
- Timer fires at 02:10, 08:10, 14:10, 20:10 UTC (2h after BOM publish slots)
- Add nginx site config for pestrel.com
- Add setup.sh (run once on VPS as root) and deploy.sh (run from cr4y)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Create LICENSE
|
|
|
|
|
|
|
|
|