commits
- Use indent-aware truncation that accounts for nesting depth
- Cap width calculation at card max-width (700px)
- Use different values for mobile vs desktop
- Hide "/ to focus" hint on mobile
- Add share to Bluesky button next to copy link
- Fix iOS auto-zoom by setting input font-size to 16px
Interactive tool to browse published ATProto lexicons with:
- Random shuffle through all published lexicons
- Search with autocomplete dropdown
- Keyboard navigation (arrow keys) and mobile swipe
- Shareable links via ?nsid= query params with copy button
- Syntax-highlighted JSON preview with truncate/expand
- Clickable author handle (links to Bluesky profile)
- Clickable NSID domain (links to actual domain)
- OG image generation with JSON code preview
- Light theme with proper syntax highlighting
Add imageEmbed block type to the docs editor with full support for:
- /image slash command to create image placeholder blocks
- Upload via file picker, drag-drop, or paste
- Auto-resize images to fit under 1MB using Canvas API
- Alt text input always visible below image (like code block lang selector)
- ALT pill with popover in read-only view mode
- Proper save/load via GraphQL with blob upload mutation
Technical changes:
- Add imageEmbed to document lexicon with blob image and alt text fields
- Add image resize utilities (readFileAsDataURL, resizeImage, etc.)
- Add blob:image/* to OAuth scope for image uploads
- Consolidate heading sizes into CSS variables for view/edit consistency
- Fix view mode spacing to match edit mode
Keyboard navigation:
- Click image to focus block, click alt input to edit
- Enter/ArrowDown on image creates new paragraph after
- Escape in alt input focuses block for navigation
Replace Object.assign(window, {...}) with window.BugsApp namespace
to expose functions for inline event handlers. This aligns with the
pattern used in docs.html and reduces global scope pollution.
A 5-step wizard for publishing AT Protocol lexicon schemas to your PDS.
Features:
- OAuth authentication with AT Protocol
- ZIP file upload with nested folder support
- Lexicon validation using honk library
- External dependency checking
- Conflict detection (update vs create)
- DNS verification instructions
- Published lexicons management (view/delete)
Includes:
- Unified publish list with status indicators (new/update/excluded/blocked)
- Loading states for async operations
- SRI integrity on external scripts
- 10MB file size limit for uploads
- Batched conflict checking (single query)
- Example folder structure and documentation links
- Add document lexicon with paragraph, heading, code, quote, and tangledEmbed blocks
- Implement Notion-style block editor with slash commands and markdown auto-conversion
- Support rich text formatting (bold, italic, code, links) via facets
- Add syntax highlighting for code blocks with language detection
- Embed Tangled repos with /tangled command
- Auto-save with URL routing (/docs/{handle}/{slug})
- Add OG image server for social sharing previews
- Extract shared richtext.js module from bugs.html
Add support for markdown formatting in bug descriptions and steps to reproduce:
- **bold** with **text**
- *italic* with *text* or _text_
- `inline code` with backticks
- ```fenced code blocks``` with optional language
Implementation:
- New lexicon: network.slices.tools.richtext.facet with bold/italic/code/codeBlock/link types
- Parser detects markdown syntax and creates facets (delimiters preserved for editing)
- Renderer strips delimiters and outputs formatted HTML
- GraphQL queries updated to fetch __typename for facet type detection
- CSS styles for all formatting types
- Form hints show supported syntax
- Show all album versions for each track in dropdown
- Sort results by quality: official albums first, compilations last
- Prefer original releases (earliest date) over reissues
- Dedupe to show one entry per album (keeping best version)
- Remove separate album search field (track dropdown now includes album)
- Make selected artist/track tags full width
- Increase search limit to 50 recordings
Change accent from Spotify green (#1db954) to teal (#14b8a6)
Use qs-actor-autocomplete from elements library to provide Bluesky
handle suggestions when logging in. Styled to match dark theme.
Single-page HTML tool for manually scrobbling tracks to Teal with
MusicBrainz search-as-you-type. Features:
- OAuth login via quickslice-client-js
- Artist search with autocomplete (300ms debounce)
- Track search filtered by selected artist
- Auto-fill album and duration from MusicBrainz
- Time toggle for "now" or custom datetime
- Recent scrobbles section showing last 3 plays
- Keyboard navigation and click-outside for dropdowns
- Dark music theme matching teal-plays
Display star count for slices.network/tools repo using qs-tangled-stars element.
Show repos with most stars in the past week as horizontally
scrollable compact cards below the search bar. Loads in parallel
with main feed to prevent layout flash.
Add topic:query syntax to search repos by topic
Single-page HTML tool to browse and search Tangled repositories:
- Catppuccin Latte/Mocha theming based on system preference
- Search with prefix syntax: @user for handles, repo:name for repos
- Pagination with Load More
- Repo cards with avatar, stars, topics, and links
- Add image resize utilities with binary search for optimal JPEG quality
- Resize uploads to max 2000x2000, under 900KB
- Update all image handlers (new bug, comment, edit) to use resize
- Fix comment edit to preserve full blob references
- Fix attachments format from array to object
- Fetch full blob data (ref, mimeType, size) in comments query
- Replace text logout button with log-out icon button
- Add unpkg.com to connect-src CSP to allow source map loading
- Add parseFacets utility to detect URLs and create byte-indexed facets
- Add renderFacetedText utility to render text with clickable links
- Update GraphQL queries to fetch facets for bugs, comments, and responses
- Update rendering functions to display faceted text
- Update mutation handlers to parse facets when creating/editing content
- Support legacy content by parsing facets on-the-fly when not stored
- Add CSS styles for facet links
- Update lexicons with facets fields
- Add avatars next to handles in bug cards, detail view, responses, comments, and header
- Fetch avatars via GraphQL joins (appBskyActorProfileByDid) - no extra API calls
- Show first letter of handle as fallback when no avatar exists
- Add ring styling for logged-in user avatar in header
- Add Comments section to How it works modal
- Add Lexicons section with descriptions of each schema
Add threaded comment system allowing users to discuss bugs:
- GraphQL queries/mutations for CRUD operations on comments
- Single-level threading (top-level comments + replies)
- Edit and delete own comments with confirmation
- Image attachments via blob upload (add/remove during edit)
- Comment count displayed on bug cards (top-level only)
- Lucide icons via CDN for UI elements
- Auto-cleanup of user's comments when deleting a bug
- Proper aspect ratio preservation for attachment images
Always display Report Bug button regardless of login status. When
clicked by a logged-out user, show the login modal instead of the
bug submission form. Also disable 1Password autofill on login input.
Add reusable tangledIcon() helper function for the dolly logo SVG.
Allow namespace authorities to link bugs to Tangled issues:
- Add "Link Issue" button in bug detail overlay
- Modal flow: select repo → create new issue or link existing
- Auto-generate Tangled issues from bug title/description/steps
- Display linked issues in bug detail with "View on Tangled" links
- Unlink functionality for namespace authorities
Also includes OAuth scope updates for bug.issue and tangled issue
records, and new GraphQL queries/mutations for the feature.
Allow users to report bugs directly from the landing page without
needing to navigate into a namespace first. Also updated namespace
placeholder to com.example for clarity.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add word-break styles to description and response text to wrap long
URLs instead of causing horizontal overflow.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add responsive CSS for screens under 640px:
- Header stacks vertically with centered content
- Filter bar full-width with stacked controls
- Touch targets minimum 44px for accessibility
- Overlay covers full screen width
- Modals nearly full-screen with stacked form buttons
Single-page bug tracker built on AT Protocol with QuickSlice:
- Report bugs with namespace, severity, description, and image attachments
- Domain authority can respond and update bug status
- Bug statuses: Open, In Progress, Closed (Fixed/Won't Fix/Duplicate/Invalid)
- OAuth login with internet handle autocomplete
- Namespace validation with TLD detection
- Share, edit, and delete functionality for authors
- Info modal explaining how it works
Extract actual error messages from Gleam's internal HAMT/Dict structure
instead of displaying raw JSON with root/bitmap/array fields.
- Add drag-and-drop zone for .zip files containing lexicons
- Extract .json files from nested folders within zip
- Filter out macOS metadata files (__MACOSX, ._* files)
- Collapse lexicon editors by default after zip upload
- Show NSID as label for each lexicon instead of generic numbering
- Add collapse/expand toggles for individual and all lexicons
- Fix NSID dropdown not updating when lexicons are removed
- Single-page HTML tool to validate AT Protocol lexicon schemas and records
- NSID dropdown auto-populates from entered lexicons with record types
- Record template auto-generates from required fields with sensible defaults
- Reset button to regenerate template
- Powered by honk library (hexdocs.pm/honk)
- Add prettier config and format.sh for HTML formatting
- Update index.html and README.md
Single HTML file that displays a live feed of music plays from the Atmosphere:
- Dark music-themed UI with Spotify-green accents
- Real-time updates via WebSocket subscription
- Paginated feed with Load More button
- Album art from Cover Art Archive (with music note fallback)
- Track info: name, artist, album, duration
- User avatars and Bluesky profile links
- Service links (Spotify, Apple Music, etc.) and MusicBrainz links
- Relative timestamps that refresh on new plays
- Loading spinner for initial load and pagination
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Interactive tool to browse published ATProto lexicons with:
- Random shuffle through all published lexicons
- Search with autocomplete dropdown
- Keyboard navigation (arrow keys) and mobile swipe
- Shareable links via ?nsid= query params with copy button
- Syntax-highlighted JSON preview with truncate/expand
- Clickable author handle (links to Bluesky profile)
- Clickable NSID domain (links to actual domain)
- OG image generation with JSON code preview
- Light theme with proper syntax highlighting
Add imageEmbed block type to the docs editor with full support for:
- /image slash command to create image placeholder blocks
- Upload via file picker, drag-drop, or paste
- Auto-resize images to fit under 1MB using Canvas API
- Alt text input always visible below image (like code block lang selector)
- ALT pill with popover in read-only view mode
- Proper save/load via GraphQL with blob upload mutation
Technical changes:
- Add imageEmbed to document lexicon with blob image and alt text fields
- Add image resize utilities (readFileAsDataURL, resizeImage, etc.)
- Add blob:image/* to OAuth scope for image uploads
- Consolidate heading sizes into CSS variables for view/edit consistency
- Fix view mode spacing to match edit mode
Keyboard navigation:
- Click image to focus block, click alt input to edit
- Enter/ArrowDown on image creates new paragraph after
- Escape in alt input focuses block for navigation
A 5-step wizard for publishing AT Protocol lexicon schemas to your PDS.
Features:
- OAuth authentication with AT Protocol
- ZIP file upload with nested folder support
- Lexicon validation using honk library
- External dependency checking
- Conflict detection (update vs create)
- DNS verification instructions
- Published lexicons management (view/delete)
Includes:
- Unified publish list with status indicators (new/update/excluded/blocked)
- Loading states for async operations
- SRI integrity on external scripts
- 10MB file size limit for uploads
- Batched conflict checking (single query)
- Example folder structure and documentation links
- Add document lexicon with paragraph, heading, code, quote, and tangledEmbed blocks
- Implement Notion-style block editor with slash commands and markdown auto-conversion
- Support rich text formatting (bold, italic, code, links) via facets
- Add syntax highlighting for code blocks with language detection
- Embed Tangled repos with /tangled command
- Auto-save with URL routing (/docs/{handle}/{slug})
- Add OG image server for social sharing previews
- Extract shared richtext.js module from bugs.html
Add support for markdown formatting in bug descriptions and steps to reproduce:
- **bold** with **text**
- *italic* with *text* or _text_
- `inline code` with backticks
- ```fenced code blocks``` with optional language
Implementation:
- New lexicon: network.slices.tools.richtext.facet with bold/italic/code/codeBlock/link types
- Parser detects markdown syntax and creates facets (delimiters preserved for editing)
- Renderer strips delimiters and outputs formatted HTML
- GraphQL queries updated to fetch __typename for facet type detection
- CSS styles for all formatting types
- Form hints show supported syntax
- Show all album versions for each track in dropdown
- Sort results by quality: official albums first, compilations last
- Prefer original releases (earliest date) over reissues
- Dedupe to show one entry per album (keeping best version)
- Remove separate album search field (track dropdown now includes album)
- Make selected artist/track tags full width
- Increase search limit to 50 recordings
Single-page HTML tool for manually scrobbling tracks to Teal with
MusicBrainz search-as-you-type. Features:
- OAuth login via quickslice-client-js
- Artist search with autocomplete (300ms debounce)
- Track search filtered by selected artist
- Auto-fill album and duration from MusicBrainz
- Time toggle for "now" or custom datetime
- Recent scrobbles section showing last 3 plays
- Keyboard navigation and click-outside for dropdowns
- Dark music theme matching teal-plays
- Add image resize utilities with binary search for optimal JPEG quality
- Resize uploads to max 2000x2000, under 900KB
- Update all image handlers (new bug, comment, edit) to use resize
- Fix comment edit to preserve full blob references
- Fix attachments format from array to object
- Fetch full blob data (ref, mimeType, size) in comments query
- Add parseFacets utility to detect URLs and create byte-indexed facets
- Add renderFacetedText utility to render text with clickable links
- Update GraphQL queries to fetch facets for bugs, comments, and responses
- Update rendering functions to display faceted text
- Update mutation handlers to parse facets when creating/editing content
- Support legacy content by parsing facets on-the-fly when not stored
- Add CSS styles for facet links
- Update lexicons with facets fields
- Add avatars next to handles in bug cards, detail view, responses, comments, and header
- Fetch avatars via GraphQL joins (appBskyActorProfileByDid) - no extra API calls
- Show first letter of handle as fallback when no avatar exists
- Add ring styling for logged-in user avatar in header
- Add Comments section to How it works modal
- Add Lexicons section with descriptions of each schema
Add threaded comment system allowing users to discuss bugs:
- GraphQL queries/mutations for CRUD operations on comments
- Single-level threading (top-level comments + replies)
- Edit and delete own comments with confirmation
- Image attachments via blob upload (add/remove during edit)
- Comment count displayed on bug cards (top-level only)
- Lucide icons via CDN for UI elements
- Auto-cleanup of user's comments when deleting a bug
- Proper aspect ratio preservation for attachment images
Allow namespace authorities to link bugs to Tangled issues:
- Add "Link Issue" button in bug detail overlay
- Modal flow: select repo → create new issue or link existing
- Auto-generate Tangled issues from bug title/description/steps
- Display linked issues in bug detail with "View on Tangled" links
- Unlink functionality for namespace authorities
Also includes OAuth scope updates for bug.issue and tangled issue
records, and new GraphQL queries/mutations for the feature.
Single-page bug tracker built on AT Protocol with QuickSlice:
- Report bugs with namespace, severity, description, and image attachments
- Domain authority can respond and update bug status
- Bug statuses: Open, In Progress, Closed (Fixed/Won't Fix/Duplicate/Invalid)
- OAuth login with internet handle autocomplete
- Namespace validation with TLD detection
- Share, edit, and delete functionality for authors
- Info modal explaining how it works
- Add drag-and-drop zone for .zip files containing lexicons
- Extract .json files from nested folders within zip
- Filter out macOS metadata files (__MACOSX, ._* files)
- Collapse lexicon editors by default after zip upload
- Show NSID as label for each lexicon instead of generic numbering
- Add collapse/expand toggles for individual and all lexicons
- Fix NSID dropdown not updating when lexicons are removed
- Single-page HTML tool to validate AT Protocol lexicon schemas and records
- NSID dropdown auto-populates from entered lexicons with record types
- Record template auto-generates from required fields with sensible defaults
- Reset button to regenerate template
- Powered by honk library (hexdocs.pm/honk)
- Add prettier config and format.sh for HTML formatting
- Update index.html and README.md
Single HTML file that displays a live feed of music plays from the Atmosphere:
- Dark music-themed UI with Spotify-green accents
- Real-time updates via WebSocket subscription
- Paginated feed with Load More button
- Album art from Cover Art Archive (with music note fallback)
- Track info: name, artist, album, duration
- User avatars and Bluesky profile links
- Service links (Spotify, Apple Music, etc.) and MusicBrainz links
- Relative timestamps that refresh on new plays
- Loading spinner for initial load and pagination
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>