summaryrefslogtreecommitdiff
path: root/internal
AgeCommit message (Collapse)Author
2026-04-25Add ambient music and wild-mode testsPaul Buetow
- generator_test.go: - TestThemeSoundPresetsAmbientPopulated: every theme has Ambient.Normal and Ambient.Wild with at least one drone or pulse frequency. - TestThemeSoundPresetsAmbientValuesBounded: gains/durations/intervals are positive and below conservative max values. - TestThemeSoundsJSON_neonAmbientRoundTrip: themeSoundsJSON unmarshals and contains ambient.normal and ambient.wild. - integration_test.go: - TestKeyboardNavJS: verify p=ambient, f=flash hotkeys and nav hints. - TestIndexHTMLBakesSounds: verify index.html bakes window.SNONUX_SOUNDS. - TestThemeSelection: dynamically test all registered themes and assert generated sounds.json includes ambient data for each.
2026-04-25Refine normal and wild ambient presets for all 19 themesPaul Buetow
Replace generic ambient() helper calls with detailed ambientPreset literals for every registered theme. Normal presets are now subtle (gain 0.02-0.03), loopable, and low-fatigue. Wild presets are recognizably the same theme but faster, denser, and more dramatic (gain 0.05-0.065). Theme-specific changes: - neon: glass drone with filter sweep; wild adds brighter arps - terminal: CRT hum + sparse ticks; wild becomes rapid process storm - synthwave: warm minor pad; wild doubles pulse with octave jumps - plasma: tritone shimmer; wild adds aggressive sweep and noise - brutalist: concrete rumble; wild adds blunt sub impacts with rhythm - volcano: magma drone; wild adds tremor pulses and heat noise - aurora: airy fifths; wild adds solar-storm detune shimmer - matrix: digital rain ostinato; wild speeds code-rain pulses - ocean: tidal swell + surf noise; wild adds storm surge - dos: PC speaker hum; wild becomes IRQ panic at 200 BPM - retro: amber chip tones; wild adds tape-eat jitter and noise - cosmos: wide fifth/octave drone; wild adds supernova pulse - retrofuture: atomic lounge pad; wild adds Geiger-like rhythm - spaceage: theremin sines; wild adds re-entry alarm pings - tropicale: dusk pentatonic surf; wild adds category-5 percussion - noir: smoky minor drone; wild adds siren-like intervals - cathedral: organ stacked sines; wild adds bell/requiem intensity - surveillance: monitor hum/scanner; wild adds alert cascade - biomech: organic asymmetric drone; wild adds nervous wet pulses All generator tests pass.
2026-04-25Make ambient music react to wild modePaul Buetow
- When wild mode turns on, automatically start ambient playback using the theme's wild ambient variant, even if normal ambience was off. - Track wild-forced ambient starts via _snonuxAmbientWildForced so that deactivation can fade to silence when the user never opted in, or crossfade back to normal when they did. - Do not persist forced-wild playback as a normal ambient preference; only user toggles (p key / ambient button) are saved. - Enhance wild ambient playback: denser pulses (1.5x bpm), increased noise texture, slightly raised gain (capped at 0.15), and deeper lowpass filter sweeps on pulses. - Re-sync FX button states after ambient start/stop so the ambient button accurately reflects the current state.
2026-04-25Add opt-in ambient music control (task o8)Paul Buetow
- Change ambient playback hotkey from 'm' to 'p' - Move flash effect hotkey from 'p' to 'f' - Update nav button labels: '<kbd>p</kbd> music' and '<kbd>f</kbd> flash' - Update splash hint to advertise 'p' music alongside 'w' wild - Add 'p' and 'f' hotkey support in splash and modal states - Persist ambient enabled/disabled state in localStorage (snonuxAmbientEnabled) - Default off; restore preference on page load without overwriting via wild mode - Improve accessibility with explicit aria-labels and aria-pressed state sync
2026-04-25Implement shared Web Audio ambient enginePaul Buetow
Adds a reusable ambient controller in shared.js with: - One shared AudioContext + master gain node for all ambient sound - Long-running drone oscillators from SNONUX_SOUNDS.ambient droneFreqs - Scheduled short pulse oscillators with BPM-derived interval jitter - Looped buffer-source noise when noiseGain is present (no AudioWorklet) - Fade in/out (~0.3-0.8s) using preset attack/release on start/pause/switch - snonuxAmbientStart/Pause/Toggle/SetWild/SyncPreset/IsPlaying window APIs Integrates with existing UI: - Ambient toggle button (<kbd>m</kbd> ambient) in nav-fx-buttons - m hotkey toggles ambient in both splash and main keyboard handlers - w key starts wild ambient and crossfades preset when switching wild state - Theme sounds.json fetch completion triggers snonuxAmbientSyncPreset() - One-shot UI sounds (splash/nav/open/close/bounce) remain unchanged and route through their own AudioContexts, never through the ambient master.
2026-04-25Add ambient preset schema to theme soundsPaul Buetow
Extend themeSounds with Ambient field containing Normal and Wild variants. Each ambientPreset carries numeric/string fields for generative background audio: bpm, pulseInterval, gain, wave, droneFreqs, pulseFreqs, cutoffMin/cutoffMax, noiseGain, attack, release, detuneCents, and rhythm. Populate all 19 existing themes with normal and wild ambient presets using a concise ambient() helper. Existing splash/nav/open/close/bounce fields remain unchanged for backwards compatibility. Add TestThemeSoundsJSON_ambientSchema to verify every theme emits valid JSON containing both ambient variants alongside the legacy sound fields.
2026-04-25can swap themes dynamicallyv0.12.0Paul Buetow
2026-04-23Bump version to 0.11.0v0.11.0Paul Buetow
2026-04-23Bump version to 0.10.0v0.10.0Paul Buetow
2026-04-23Bump version to 0.9.0v0.9.0Paul Buetow
2026-04-23newPaul Buetow
2026-04-22v0.8.0: modal drift, flying emoji, random flips, hue drift, cursor sparkle, ↵v0.8.0Paul Buetow
post afterimage Amp-Thread-ID: https://ampcode.com/threads/T-019db698-f351-7161-a397-1cce1fdab440 Co-authored-by: Amp <amp@ampcode.com>
2026-04-22v0.7.0: vertical bounce, hover ripple, modal scroll-end, idle breathing, ↵v0.7.0Paul Buetow
first-visit burst Amp-Thread-ID: https://ampcode.com/threads/T-019db698-f351-7161-a397-1cce1fdab440 Co-authored-by: Amp <amp@ampcode.com>
2026-04-22v0.6.0: bounce effect on page boundary + wild bouncev0.6.0Paul Buetow
Amp-Thread-ID: https://ampcode.com/threads/T-019db698-f351-7161-a397-1cce1fdab440 Co-authored-by: Amp <amp@ampcode.com>
2026-04-20feat(nav): add sno-wild visual effects and theme support to nav.tmplPaul Buetow
2026-04-20forgot to addv0.5.0Paul Buetow
2026-04-20new themePaul Buetow
2026-04-18v0.4.3Paul Buetow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18v0.4.2: boost wild mode intensity across all 14 themesPaul Buetow
DOS: camera FOV/Z/X lunge + per-char X jitter (corrupted RAM look) Spaceage: station scale pulse, pods fly to expanded/oscillating radius, full camera X/Y/Z/FOV chaos (was time-offset only) Matrix: camera plunges into the rain with Z/X sway + FOV warp Plasma: blobs pulse in scale + camera sucked into vortex (was no camera) Synthwave: camera warp-drive rush X/Y/Z/FOV (was tiny X drift only) Retro: main cube scale pulse, orbiters expand to larger radius, camera frenetic X/Y/Z/FOV sway Retrofuture: rings tumble in 3D (X/Y tilt), full camera spiral + FOV pulse All themes now have multi-dimensional wild effects; weakest now ≥4/5. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18feat(cosmos): make wild mode dramatically more intensePaul Buetow
- Speed multiplier raised from 10× to 22× - Planet rings now counter-spin and tilt independently in wild mode - Asteroid orbits breathe in/out and scatter vertically (radial + y sine waves) - Camera swings 20 units left/right, bobs 10 units, dives ±14 units in z - FOV pulses 42°–78° giving a dramatic zoom-in/zoom-out feel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18v0.4.1: add scroll/wild effects, post translucency, aurora wild boostPaul Buetow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18feat(aurora): make wild mode dramatically more intensePaul Buetow
- Time offset multiplier raised from 7× to 18× (waves churn ~19× faster) - Wave amplitude boosted 3.2× in wild mode (tall, violent ribbon swings) - Camera sways left/right and bobs up/down while wild is active - Ribbons drift vertically independently so they cross and tangle mid-air Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18feat(themes): make non-active posts translucent to reveal WebGL backgroundPaul Buetow
Non-selected posts now sit at 0.55 opacity so the animated background bleeds through clearly. Hovering a non-active post raises it to 0.85, and the active/highlighted post is always fully opaque (1.0). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18feat(themes): add PgUp/PgDn scroll effects, wild mode lightning & badge fixPaul Buetow
- PgUp/PgDn now calls snonuxScrollEffect(dir) in all 14 themes - Each theme gets a unique directional colour strip (theme-matched gradient) sliding across the screen in the scroll direction; thicker when wild - Wild mode activation fires dramatic multi-flash lightning overlay plus a persistent storm overlay that flickers intermittently while active - Wild mode deactivation shows a brief dark veil then removes the storm - Fixed WILD MODE badge: animation now only runs under .sno-wild-on so the badge stays fully hidden (opacity:0, no pulsing) when wild is off Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18feat(themes): add per-theme special effects, wild mode & w hotkeyPaul Buetow
Each of the 14 themes now has three interactive effect hooks: - Navigation (j/k): brief thematic flash/shake/glitch per theme - Page change (h/l): zoom/warp/tunnel transition per theme - Wild mode (w key): toggles background animation into overdrive Wild-mode effects per theme: - neon: rings spin 14x, particles vortex - matrix: rain falls 10x faster - volcano: embers/smoke 8x/5x, lava glows brighter - brutalist: boxes 15x + random jitter - aurora/ocean/plasma/cosmos/dos/synthwave/terminal/retro/spaceage/retrofuture: time-offset approach accelerates all sine-based animations 8-11x Shared infrastructure added to nav.tmpl: - sno-shake/sno-zoom-fwd/sno-glitch CSS keyframes - #sno-wild-badge pulsing red overlay badge - selectPost() calls snonuxNavEffect() - h/l navigation calls snonuxPageEffect() - w key calls snonuxWildToggle() Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18fix(generator): match markdown typography between list and zoomed-in modal viewsPaul Buetow
The zoomed-in post modal (opened with Enter/click) used #modal-content to display post HTML, but the CSS typography rules (.post-text p/ul/ol/li margin and padding) only targeted the .post-text class used in the list view. This caused visually different formatting — missing paragraph spacing and unindented lists — in the expanded modal compared to the feed. Fix: extend all .post-text typography selectors in nav.tmpl to also cover #modal-content, so both views apply identical spacing rules. Also adds a missing spaceage theme sound preset to satisfy the TestThemeSoundPresetsMatchRegistry test that was already failing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18Add retrofuture themev0.4.0Paul Buetow
2026-04-16v0.3.1: refactor themes & shared HTML into embedded templatesv0.3.1Paul Buetow
Made-with: Cursor
2026-04-16refactor(generator): load themes & shared HTML from embedded template files ↵Paul Buetow
(task s4) Move the 12 theme HTML templates out of theme_*.go (~185KB of raw-string literals) and the shared navDefs/faviconHeadHTML fragments out of shared.go/favicon.go into separate .tmpl files under internal/generator/templates/{themes,shared}/. A new templates subpackage owns a //go:embed FS and exposes Theme(), Shared() and ThemeNames() helpers so the binary still ships fully self-contained. The hand-maintained themeRegistry map is replaced by on-startup enumeration of the embedded FS; getTheme/ListThemes now derive theme names from the template files themselves, and navDefs/faviconHeadHTML are loaded once at package init. Rendered output is byte-equivalent — all unit tests and integration tests pass, go vet is clean. Made-with: Cursor
2026-04-16v0.3.0: add DOS theme with VT323 webfontv0.3.0Paul Buetow
Amp-Thread-ID: https://ampcode.com/threads/T-019d94cc-99a9-74af-8f3d-9521cd73324f Co-authored-by: Amp <amp@ampcode.com>
2026-04-16v0.2.0: markdown image embedding, post typography, modal improvementsv0.2.0Paul Buetow
Amp-Thread-ID: https://ampcode.com/threads/T-019d94cc-99a9-74af-8f3d-9521cd73324f Co-authored-by: Amp <amp@ampcode.com>
2026-04-11Release v0.1.6v0.1.6Paul Buetow
2026-04-11Update hosting text to 'Served by NetBSD on a Raspberry Pi 3' across all themesPaul Buetow
Amp-Thread-ID: https://ampcode.com/threads/T-019d7b31-fd6a-7378-9eb0-fa080df2906d Co-authored-by: Amp <amp@ampcode.com>
2026-04-10Release v0.1.5v0.1.5Paul Buetow
--sync rsync to pi mirrors when reachable; default dirs ./inbox ./dist; ignore inbox/dist. Splash index paths (/, trailing slash). PgUp/PgDn scroll + highlight. Nav shared CSS in head for valid HTML; ARIA/viewport fixes; neon viewport. Made-with: Cursor
2026-04-10Release v0.1.4v0.1.4Paul Buetow
PgUp/PgDn scroll the post list with nav sound; hint bar documents shortcuts. Made-with: Cursor
2026-04-10Release v0.1.3v0.1.3Paul Buetow
Testable CLI flags; version package under internal/version; broad tests for atom, generator, post, processor, and cmd—overall coverage ~85%. Made-with: Cursor
2026-04-10Release v0.1.2v0.1.2Paul Buetow
Rework aurora theme splash: ribbon aurora WebGL, sky stars/glow, refreshed title. Made-with: Cursor
2026-04-10Release v0.1.1v0.1.1Paul Buetow
Per-theme Web Audio presets; pagination footer bar with reduced height; brutalist splash label tweak; doc updates. Made-with: Cursor
2026-04-10Release v0.1.0v0.1.0Paul Buetow
Splash: skip via ?splash=0 on pagination to index; frosted panel and vignette for readable copy; brighter hint/tag colors. Pagination links only at bottom of each page. Tests updated for prev href to index. Made-with: Cursor
2026-04-10processor: document sequential Run and partial-batch semanticsPaul Buetow
Clarify in package comment and Run docstring that files are processed in order, successful sources are removed before later files run, and on error the returned count reflects posts already created. Made-with: Cursor
2026-04-10generator: isolate Atom feed in atom subpackage, document boundariesPaul Buetow
Move Atom 1.0 XML generation to internal/generator/atom so it depends only on config and post, not on themes or the HTML template pipeline. Add generator/doc.go mapping files (orchestration, registry, themes, shared nav templates) and dependency direction. Made-with: Cursor
2026-04-10processor: document trusted inbox trust boundary for markdown HTMLPaul Buetow
Markdown uses goldmark html.WithUnsafe for intentional raw HTML in personal-inbox posts. Package and processMd comments state the trust model and warn against untrusted input on the same path. Made-with: Cursor
2026-04-10processor: return error when markdown pre-scan cannot read .mdPaul Buetow
claimedByMarkdown now wraps os.ReadFile failures instead of skipping, so Run fails fast and avoids wrong image claim state. Add regression test using an unreadable markdown file (Unix). Made-with: Cursor
2026-04-10test: add table-driven unit tests for post, processor, generatorPaul Buetow
Cover NewID; txt autolink helpers; markdown local image discovery; pagination, page filenames, JSON script literals, time formatting, and buildPageData nav links. Made-with: Cursor
2026-04-10Add internal version package and -version CLI flagPaul Buetow
Introduce Version constant (0.0.1) in internal/version.go and wire -version/-v in cmd/snonux to print it and exit successfully. Made-with: Cursor
2026-04-10processor: delete markdown inbox images only after Save succeedsPaul Buetow
buildMarkdownPost no longer removes referenced images during build. buildPost returns inboxExtras paths; processFile removes them after p.Save(postDir) succeeds, matching source file deletion ordering and avoiding loss of originals if Save fails. Made-with: Cursor
2026-04-10enhance WebGL scenes, modal transparency, new cosmos theme, UX polishPaul Buetow
Themes: - glass → cosmos: ringed planet with asteroid belt, nebula clouds, 2500 stars - ocean: sea rock spires, bioluminescent jellyfish, rising bubbles, whale - volcano: glowing lava floor with vertex animation, molten boulders, smoke plume particles, underground furnace glow sphere UX / shared: - Modal background changed to rgba(0,0,0,0.55) so WebGL stays visible behind expanded post view (all themes) - Max-width 1200px applied to all themes via shared navmodal CSS - Default theme changed from "neon" to "random" Sample content: - 120 example entries processed into dist/ for pagination testing (4 pages of 42 posts each) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10add WebGL scenes to all themes, sounds, image sizing, new themesPaul Buetow
- All 11 themes now have unique Three.js WebGL backgrounds: aurora: flowing sine-wave ribbon meshes with additive blending brutalist: harsh rotating white/red wireframe boxes glass: drifting crystal icosahedron shards, semi-transparent matrix: digital rain particle columns with per-vertex colour fade ocean: animated vertex-displaced wave surface with orbiting light retro: amber demo-scene cube with orbiting octahedrons synthwave: sunset sphere with scan-line rings and perspective grid terminal: green icosahedron wireframe with orbiting torus particles neon: existing Three.js orb and rings (unchanged) plasma (replaces minimal): drifting additive-blend colour blobs volcano (replaces paper): rising ember particles with lifecycle - shared.go: distinct sounds for j/k nav (220Hz beep), Enter (ascending triangle chime), and Esc (descending sine sweep) - shared.go: images are now thumbnails (max-height:220px) in list view and expand to full width inside the modal (CSS override in navmodal) - main.go: --list-themes flag prints all theme names and exits; --theme random picks a random theme at all generation time - themes.go: updated registry with plasma/volcano replacing minimal/paper Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09add snonux static microblog generatorPaul Buetow
Full Go implementation with: - txt/md/image/audio input processing, URL auto-linking in .txt files - Paginated HTML output with Atom feed - 11 visual themes: neon, terminal, synthwave, minimal, brutalist, paper, aurora, matrix, ocean, retro, glass (selectable via --theme flag) - Keyboard navigation (j/k/arrows, Enter modal, h/l page nav) - Shared nav templates (navhints, navmodal, navscript) across all themes - Magefile build automation; integration test suite covering all themes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>