Implements complete post management and social interaction capabilities: **Post Management:** - Delete posts with confirmation dialog (owned posts only) - Edit posts using existing compose dialog (owned posts only) - Robust ownership validation and error handling **Follow System:** - Follow/unfollow users from context menus and keyboard shortcuts - Manual follow dialog for @user@instance lookups - Account search and validation before following - Smart context menu options based on post ownership **Timeline Extensions:** - Followers tab showing accounts following you - Following tab showing accounts you follow - Seamless integration with existing timeline system - Account list display for social relationship viewing **Keyboard Shortcuts:** - Ctrl+Shift+E: Edit post - Shift+Delete: Delete post (with confirmation) - Ctrl+Shift+F: Follow user - Ctrl+Shift+U: Unfollow user - Ctrl+Shift+M: Manual follow dialog **ActivityPub API Extensions:** - edit_status() method for post editing - get_relationship() method for follow status checking - Enhanced followers/following pagination support **Critical Accessibility Fix:** - Eliminated ALL text truncation throughout the application - Added explicit no-truncation rule to development guidelines - Full content accessibility for screen reader users All features maintain Bifrost's accessibility-first principles with proper error handling, user feedback, and complete information display. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Bifrost
A fully accessible fediverse client built with PySide6, designed specifically for screen reader users.
Vibe Coding Project
This project was created through "vibe coding" - a collaborative development approach where a human (Storm Dragon) provides direction, requirements, and testing while an AI assistant (Claude) handles the actual code implementation. Vibe coding combines human creativity and domain expertise with AI's rapid development capabilities, resulting in functional software that meets real accessibility needs.
All code in this project was written by Claude (Anthropic's AI assistant) based on specifications and feedback from Storm Dragon.
Features
- Full ActivityPub Support: Compatible with Pleroma, GoToSocial, and other fediverse servers
- Screen Reader Optimized: Designed from the ground up for excellent accessibility
- Threaded Conversations: Navigate complex conversation trees with keyboard shortcuts
- Timeline Switching: Easy navigation between Home, Mentions, Local, and Federated timelines
- Desktop Notifications: Cross-platform notifications for mentions, direct messages, and timeline updates
- Customizable Audio Feedback: Rich sound pack system with themed audio notifications
- Soundpack Manager: Secure repository-based soundpack discovery and installation
- Smart Autocomplete: Mention completion with full fediverse handles (@user@instance.com)
- Comprehensive Emoji Support: 5,000+ Unicode emojis with keyword search
- Auto-refresh: Intelligent timeline updates based on user activity
- Clean Interface: Focused on functionality over visual design
- Keyboard Navigation: Complete keyboard control with intuitive shortcuts
Audio System
Bifrost includes a sophisticated sound system with:
- Soundpack Manager: Secure HTTPS-based repository system
- Repository Management: Add/remove soundpack repositories with validation
- One-click Installation: Download, validate, and install soundpacks securely
- Customizable Sound Packs: Themed audio notifications (Default pack included)
- Audio Feedback: Sound events for all major actions and notifications
- Per-event Volume Control: Fine-tune individual sound effects
- Cross-platform Audio Support: Works on Linux, Windows, and macOS
Compose Features
- Mention Autocomplete: Type
@
to get suggestions from followers/following/search - Full Fediverse Handles: Completes to full format (@user@instance.com)
- Emoji Autocomplete: Type
:
to search 5,000+ Unicode emojis - Keyword Search: Find emojis by typing keywords (
:fire
,:heart
,:grin
) - Real-time Character Count: Visual feedback with limit warnings
- Content Warnings: Optional spoiler text support
- Visibility Controls: Public, Unlisted, Followers-only, or Direct messages
Technology Stack
- PySide6: Main GUI framework for proven accessibility
- ActivityPub: Full federation protocol support
- simpleaudio: Cross-platform audio with subprocess fallback
- Plyer: Cross-platform desktop notifications
- emoji: Comprehensive Unicode emoji library (5,000+ emojis)
- XDG Base Directory: Standards-compliant configuration storage
Keyboard Shortcuts
Timeline Navigation
- Ctrl+1: Switch to Home timeline
- Ctrl+2: Switch to Mentions/Notifications timeline
- Ctrl+3: Switch to Local timeline
- Ctrl+4: Switch to Federated timeline
- Ctrl+Tab: Switch between timeline tabs
- F5: Refresh current timeline
Post Actions
- Ctrl+N: Compose new post
- Ctrl+R: Reply to selected post
- Ctrl+B: Boost/reblog selected post
- Ctrl+F: Favorite selected post
- Ctrl+C: Copy selected post to clipboard
- Ctrl+U: Open URLs from selected post in browser
Navigation
- Arrow Keys: Navigate through posts
- Page Up/Down: Jump multiple posts
- Home/End: Go to first/last post
- Enter: Expand/collapse threads
- Tab: Move between interface elements
Compose Dialog
- Ctrl+Enter: Send post
- @: Trigger mention autocomplete
- :: Trigger emoji autocomplete
- Arrow Keys: Navigate autocomplete suggestions
- Enter/Tab: Accept selected completion
- Escape: Close autocomplete or cancel compose
Application
- Ctrl+,: Open Settings
- Ctrl+Shift+A: Add new account
- Ctrl+Alt+S: Open Soundpack Manager
- Ctrl+Q: Quit application
Installation
git clone <repository>
cd bifrost
pip install -r requirements.txt
python bifrost.py
Or on Arch Linux:
sudo pacman -S python-pyside6 python-requests python-simpleaudio python-emoji
yay -S python-plyer
Accessibility Features
- Complete keyboard navigation
- Proper screen reader announcements
- Focus management and tab order
- Accessible names and descriptions for all controls
- Thread expansion/collapse with audio feedback
Sound Pack Creation and Installation
Creating Custom Sound Packs
Sound packs in Bifrost allow you to customize the audio feedback for different events. Each sound pack consists of a directory containing audio files and a configuration file.
Sound Pack Structure
A sound pack must contain:
- pack.json - Configuration file with metadata and sound mappings
- Audio files - WAV or OGG files for each sound event
Required Sound Events
Your sound pack should include audio files for these events:
private_message
- Direct message receivedmention
- User mentioned in postboost
- Post boosted/rebloggedreply
- Reply to user's postpost_sent
- User successfully postedtimeline_update
- New posts in timelinenotification
- General notificationstartup
- Application started (optional)shutdown
- Application closing (optional)expand
- Thread expanded (optional)collapse
- Thread collapsed (optional)success
- General success feedback (optional)error
- Error occurred (optional)
Creating pack.json
Create a pack.json
file with this format:
{
"name": "My Custom Pack",
"description": "A description of your sound pack",
"author": "Your Name",
"version": "1.0",
"sounds": {
"private_message": "dm.wav",
"mention": "mention.ogg",
"boost": "boost.wav",
"reply": "reply.wav",
"post_sent": "sent.wav",
"timeline_update": "update.wav",
"notification": "notification.wav",
"startup": "startup.wav",
"shutdown": "shutdown.wav",
"expand": "expand.wav",
"collapse": "collapse.wav",
"success": "success.wav",
"error": "error.wav"
}
}
Audio File Requirements
- Formats: WAV or OGG Vorbis only
- Size: Maximum 10MB per file
- Duration: Keep sounds short (1-3 seconds recommended)
- Quality: 44.1kHz, 16-bit recommended for WAV files
Example Directory Structure
MyPack/
├── pack.json
├── dm.wav
├── mention.ogg
├── boost.wav
├── reply.wav
├── sent.wav
├── update.wav
├── notification.wav
├── startup.wav
├── shutdown.wav
├── expand.wav
├── collapse.wav
├── success.wav
└── error.wav
Installing Sound Packs
Method 1: Manual Installation
- Create your sound pack directory structure as shown above
- Copy the directory to
~/.local/share/bifrost/sounds/
- Restart Bifrost or go to Settings → Audio to select the new pack
Method 2: ZIP Installation
-
Create ZIP file correctly:
- Navigate to your sound pack directory
- Select ALL files (pack.json and audio files)
- Create a ZIP file containing just the files, NOT the folder
- Important: The ZIP should contain
pack.json
at the root, notMyPack/pack.json
-
Install via Soundpack Manager:
- Open Bifrost
- Press Ctrl+Alt+S to open Soundpack Manager
- Click "Install from ZIP file"
- Select your ZIP file
- The soundpack will be validated and installed automatically
Method 3: Repository Installation
If you have access to a soundpack repository:
- Open Soundpack Manager (Ctrl+Alt+S)
- Browse available soundpacks from configured repositories
- Click "Install" next to the desired soundpack
- The soundpack will download and install automatically
ZIP File Creation Tips
Correct ZIP structure:
soundpack.zip
├── pack.json
├── dm.wav
├── mention.ogg
└── other_audio_files...
Incorrect ZIP structure (will fail):
soundpack.zip
└── MyPack/
├── pack.json
├── dm.wav
└── other_files...
Common Commands for ZIP Creation
Linux/macOS:
cd MyPack
zip -r ../MyPack.zip *
Windows (PowerShell):
cd MyPack
Compress-Archive -Path * -DestinationPath ..\MyPack.zip
Troubleshooting
- "Invalid filename in archive": Ensure filenames only contain letters, numbers, dots, dashes, and underscores
- "No valid audio files found": Check that you have WAV or OGG files and they're properly formatted
- "Invalid pack.json format": Verify your JSON syntax and required fields (name, sounds)
- Installation fails: Make sure you zipped the files themselves, not the containing folder
Sound Pack Security
Bifrost's soundpack system includes security measures:
- Maximum file sizes (10MB per file, 50MB total download)
- File type validation (only WAV/OGG audio files allowed)
- Path sanitization (prevents directory traversal attacks)
- Repository validation (HTTPS required for remote repositories)
Contributing
This is a vibe coding project where AI handles implementation. Human contributors can:
- Test accessibility with different screen readers
- Suggest features and improvements
- Create new sound packs (see Sound Pack Creation section above)
- Report bugs and usability issues
License
This project demonstrates the potential of human-AI collaboration in creating accessible software. It is released under the gpl version 3. See LICENSE file for details.