commits
- Add explicit :link and :visited states to prevent browser default blue
- Ensure :hover and :active states use var(--accent) consistently
- Fixes issue where status author links showed blue on hover
fix: Allow emoji-only status changes without text
When creating a new status with only an emoji change (no text), the
validation was incorrectly showing 'No changes'. Fixed by:
1. Properly handling the case where there's no current status (emoji is null)
2. Triggering validation after emoji selection from picker
3. Only disabling submission when the new status is identical to existing
Fixes #56
Co-authored-by: nate nowack <zzstoatzz@users.noreply.github.com>
Add GitHub footer with link to source repository
- Added fixed GitHub icon and link in bottom-left corner
- Styled to match existing site theme using CSS variables
- Appears on all pages via base.html template
- Responsive design hides text on mobile, keeping only icon
- Positioned opposite to bug report button for balance
Co-authored-by: nate nowack <zzstoatzz@users.noreply.github.com>
fmt: rustfmt regression tests
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
When creating a new status with only an emoji change (no text), the
validation was incorrectly showing 'No changes'. Fixed by:
1. Properly handling the case where there's no current status (emoji is null)
2. Triggering validation after emoji selection from picker
3. Only disabling submission when the new status is identical to existing
Fixes #56
Co-authored-by: nate nowack <zzstoatzz@users.noreply.github.com>
- Added fixed GitHub icon and link in bottom-left corner
- Styled to match existing site theme using CSS variables
- Appears on all pages via base.html template
- Responsive design hides text on mobile, keeping only icon
- Positioned opposite to bug report button for balance
Co-authored-by: nate nowack <zzstoatzz@users.noreply.github.com>
- 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