Development Setup
Prerequisites
Before you begin, make sure you have:- Node.js 18+ or Bun 1.0+ (Bun is recommended for faster builds)
- Chrome 138+ for testing the extension
- Git for version control
Getting Started
Available Commands
Development Commands
Production Commands
Utility Commands
Testing Your Changes
Manual Testing Checklist
Before submitting a pull request, test in both modes: Demo Mode Testing:-
bun run devstarts without errors - Feature works as expected
- No console errors
- Performance is acceptable
- Hot reload works correctly
-
bun run build:extensioncompletes successfully - Extension loads in Chrome without errors
- Feature works on multiple websites (YouTube, Twitter, Gmail, GitHub)
- No CSS conflicts with host pages
- Multi-tab behavior is correct (if applicable)
- Shadow DOM isolation is maintained
- Test in Chrome stable
- Test in Chrome Canary (for new APIs)
Focus testing on both demo and extension modes since they share 95% of the code. A bug in one mode likely affects both.
Debugging
Demo Mode Debugging
- Open DevTools (F12) and check the Console tab
- Use React DevTools for component debugging
- Monitor Network tab for API calls
- Enable Debug Panel in Settings → UI to see FPS, memory, and animation state
Extension Mode Debugging
Content Script:- Open DevTools (F12) on the webpage
- Look for
[Content]prefixed logs
- Right-click extension icon → “Inspect service worker”
- Look for
[Background]prefixed logs
- Check background console for
[Offscreen]logs - Used for heavy audio processing and Kokoro TTS
- Open DevTools on the webpage
- React app runs in main world but renders in Shadow DOM
Each layer has distinct logging prefixes to help you trace message flow through the architecture.
Adding Features
Adding a New AI Provider
Create background service
Create background service in
extension/background/services/ for extension mode.Add proxy
Create proxy in
src/services/proxies/ to automatically route between demo and extension modes.Adding UI Components
Components insrc/components/ automatically work in both modes. Just create your component and import it where needed.
Adding Settings
Pull Request Process
Make your changes
- Follow existing code style and conventions
- Keep changes focused on a single feature or fix
- Add comments for complex logic
Code Style Guidelines
- Use ES6+ features (async/await, arrow functions, destructuring)
- Component structure: Functional components with hooks
- File naming: PascalCase for components, camelCase for utilities
- Imports: Group by external, internal, relative
- Logging: Use
Logger.log()with appropriate prefixes
Resources
External Documentation
Getting Help
- Questions: Open a Discussion
- Bugs: Open an Issue
- Architecture questions: See Architecture Overview
What to Contribute
Good First Issues
- Documentation improvements
- UI/UX enhancements
- Bug fixes
- Test coverage
- Performance optimizations
Feature Ideas
- New AI provider integrations
- Additional animation types
- Voice/TTS provider options
- Accessibility improvements
- Internationalization (i18n)