summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2026-05-09Fix taken_at timezone: store and display as camera local timeKen D'Ambrosio2-2/+2
EXIF DateTimeOriginal has no timezone — it's the camera's wall clock. Storing it via .iso8601 attached +00:00 (server TZ), causing browsers to shift the time to their local zone when parsing. Switch to strftime('%Y-%m-%dT%H:%M:%S') so no offset is written. JS strips any existing +00:00 suffix from already-stored values so old data is also displayed correctly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Add info overlay to lightbox showing photo metadataKen D'Ambrosio4-0/+36
Tap "ℹ Info" in the caption bar to toggle a semi-transparent panel at the bottom of the image showing filename (if different from title), date taken, and pixel dimensions. Panel resets to hidden on each photo change. Button is hidden automatically when no metadata is available. Width/height are now included in the ENTRIES payload. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Add show/hide password toggle to admin loginKen D'Ambrosio2-1/+22
SVG eye icon sits inside the right edge of the password field. Tap/click to reveal; tap again to conceal. Helps mobile users confirm what they're typing without a separate "show password" step. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Bump album.js cache-buster to force fresh load of search codeKen D'Ambrosio1-1/+1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Add live album filter search boxKen D'Ambrosio3-1/+18
Typing in the search box instantly hides non-matching album cards. Shown only when an album has more than 4 sub-albums (no point otherwise). Pure client-side — no server round-trips. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Add DESIGN.md — architecture and workflow referenceKen D'Ambrosio1-0/+398
Covers system architecture, directory layout, dependencies, data model, all HTTP routes, request flows (browse, thumbnail, lightbox, slideshow, admin), the update.rb script, security model, and deployment. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Search subdirs recursively for album cover candidatesKen D'Ambrosio1-6/+11
Albums with no top-level photos (only sub-albums) now find a cover by walking the full directory tree. Extracted cover_candidates() does a recursive glob and returns paths relative to the album dir so the existing thumb URL construction works unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Replace dynamic cover checkbox with random image dropdown optionKen D'Ambrosio2-12/+10
Adds "— random image —" as a selectable cover option (stored as __random__ sentinel). album_cover() now picks a random eligible file when that value is set, giving a fresh cover on each page load. Removes the cover_dynamic field that was saved but never actually used in display logic. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Fix video/audio players showing on image lightboxKen D'Ambrosio1-0/+1
#lb-video and #lb-audio had explicit display:block via ID selectors, which outweighed the .hidden class selector and kept the players visible for photos. Added !important to .hidden so the utility class always wins. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09Initial commit — Albumen photo albumKen19-0/+1788
Ruby/Sinatra self-hosted photo album with directory hierarchy, per-photo captions and visibility, lightbox, slideshow, admin UI, and Let's Encrypt HTTPS via Apache reverse proxy on prouter. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>