commits
feat(webhooks): add webhook settings UI + API and signed delivery on status changes
- DB: add webhooks table, CRUD helpers
- API: /api/webhooks CRUD + secret rotation
- Sender: HMAC-SHA256 signed POST with timestamp
- UI: full-page modal from Settings to manage webhooks
- Events: emit on status created/deleted
This supersedes #25; fresh implementation on latest main.
Add claude GitHub actions 1757535841705
Runtime-served custom emojis from Fly.io volume (no redeploys)
Reduce emoji pulse + Markdown links in status text
fix: refine aesthetic details for better UX
- Remove bounding rectangle glow on handle hover, keep text-only glow
- Make set button hover use dynamic accent color instead of hardcoded blue
- Reduce pulsating glow intensity on status emoji by ~10%
The repo is 'status' not 'status.zzstoatzz.io'
feat: add HTML/JS linting and bug report button
- Return loaded values from initSettings to use after API/localStorage load
- Use the actual loaded accent (respecting API -> localStorage hierarchy)
- Matches the pattern used in feed.html for settings management
Move updateActivePreset call after initSettings and use localStorage value
The previous null check fix had incorrect indentation that broke JavaScript execution.
Fixed indentation for both emoji picker and clear picker event handlers.
- Add HTML syntax checking with xmllint to pre-commit hooks
- Add JavaScript syntax validation with node -c
- Add JSON validation to catch syntax errors before deployment
- Add floating bug report button on all pages
- Bug button collects context (page, theme, viewport) and opens GitHub issue
- Responsive design for mobile devices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- added missing closing brace for emoji picker if statement
- added missing closing brace for clear button if statement
- emoji picker now works properly again
feat: comprehensive aesthetic improvements with consistent accent usage
- removed hardcoded gray color from settings icon URL
- added CSS filter to colorize settings icon on hover
- matches the theme toggle behavior with accent-aware hover state
- fixed missing accent awareness in clear button and expiration options hover
- enhanced save button with subtle lift animation and shadow on hover
- added creative glow effect to username handle on hover
- implemented subtle pulse animation for current status emoji
- added accent-colored expiration indicator with timer icon
- all hover states now properly respect user's chosen accent color
- fixed emoji overflow in status selector by using proper sizing
- consistent accent color usage across all pages (theme toggles, links, focus states)
- enhanced visual feedback with subtle shadows and transitions
- improved accent color picker with active state indicators
- logout link now uses accent on hover for consistency
- added focus ring effects using accent color throughout
Fix empty display_name fallback to handle
- Check if display_name is empty string, not just None
- Falls back to handle when display_name is Some("")
- Fixes issue where users with blank display names showed nothing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added handle field to Profile struct
- Profile now includes handle from Bluesky API response
- Template uses handle as fallback before falling back to DID
- Fixes issue where blank display names showed DID instead of handle
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add hover tooltips to show emoji names
- Add title attributes to all emoji displays (custom and standard)
- Shows emoji name on hover in feed, status display, and history
- Consistent with existing emoji selector behavior
- Minimal, clean implementation with no visual changes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
feat: simple user customization
- Add user_preferences table to store font and accent settings
- Add API endpoints /api/preferences (GET and POST)
- Update templates to load preferences from API for logged-in users
- Settings sync between localStorage and database
- Settings persist across devices and browsers for logged-in users
- Make status text lowercase as requested
- Add settings panel to feed page for logged-in users
- Add font family selector (system/mono/serif/comic)
- Add accent color picker with presets
- Settings toggle behind gear icon (owner only)
- Settings persist via localStorage
- Accent color applies to all UI elements
- Remove hardcoded fonts from all templates
- removed hardcoded JetBrains Mono from login.html, feed.html, error.html
- all pages now use var(--font-family) CSS variable
- font selector will now actually work across all pages
- removed hardcoded JetBrains Mono font that was overriding settings
- use iconify CDN for clean gear icon instead of complex SVG
- font selector now properly applies (system/mono/serif/comic)
- mono option uses JetBrains Mono as primary font
- settings now hidden behind gear icon, click to toggle
- replaced font size with font family (system/mono/serif/comic)
- accent color now applies to ALL UI elements (nav, theme toggle, etc)
- added color presets for quick selection
- settings persist in localStorage across all pages
- added inline settings panel for owners on status page
- font size: small/medium/large options
- accent color picker
- settings persist in localStorage and apply across all pages
- minimal, clean implementation that actually works
Fix: Add missing getFollows scope for following feed
- Add HTML syntax checking with xmllint to pre-commit hooks
- Add JavaScript syntax validation with node -c
- Add JSON validation to catch syntax errors before deployment
- Add floating bug report button on all pages
- Bug button collects context (page, theme, viewport) and opens GitHub issue
- Responsive design for mobile devices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- fixed missing accent awareness in clear button and expiration options hover
- enhanced save button with subtle lift animation and shadow on hover
- added creative glow effect to username handle on hover
- implemented subtle pulse animation for current status emoji
- added accent-colored expiration indicator with timer icon
- all hover states now properly respect user's chosen accent color
- fixed emoji overflow in status selector by using proper sizing
- consistent accent color usage across all pages (theme toggles, links, focus states)
- enhanced visual feedback with subtle shadows and transitions
- improved accent color picker with active state indicators
- logout link now uses accent on hover for consistency
- added focus ring effects using accent color throughout
- Added handle field to Profile struct
- Profile now includes handle from Bluesky API response
- Template uses handle as fallback before falling back to DID
- Fixes issue where blank display names showed DID instead of handle
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add title attributes to all emoji displays (custom and standard)
- Shows emoji name on hover in feed, status display, and history
- Consistent with existing emoji selector behavior
- Minimal, clean implementation with no visual changes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add user_preferences table to store font and accent settings
- Add API endpoints /api/preferences (GET and POST)
- Update templates to load preferences from API for logged-in users
- Settings sync between localStorage and database
- Settings persist across devices and browsers for logged-in users
- Make status text lowercase as requested
- Add settings panel to feed page for logged-in users