Puttin' bugz in their place since '26
A visual Kanban board for Mozilla Bugzilla that lets you drag and drop bugs between status columns and batch-update them.
- Visual Kanban Board: See your bugs organized by status in a clean, dark-themed interface
- Drag & Drop: Move bugs between columns with smooth animations
- Batch Updates: Stage multiple changes and apply them all at once
- Secure: Your API key is encrypted and stored locally - never sent to any server except Bugzilla
- Filter by Whiteboard Tag or Component: Focus on the bugs that matter to you
Bugs are organized into columns based on their Bugzilla status:
| Column | Bugzilla Statuses |
|---|---|
| Backlog | NEW, UNCONFIRMED |
| Todo | ASSIGNED |
| In Progress | IN_PROGRESS |
| In Review | RESOLVED |
| Done | VERIFIED, CLOSED |
- Log into bugzilla.mozilla.org
- Go to Preferences → API Keys
- Generate a new API key
- Copy the key
- Visit the app at your deployed URL
- Paste your API key when prompted
- Enter a whiteboard tag (e.g.,
[kanban]) or component to filter bugs - Click Apply Filters to load your bugs
- Drag bugs between columns to change their status
- Click Apply Changes to update Bugzilla
- Node.js 18+
- npm 9+
# Clone the repository
git clone https://github.com/msujaws/bugzilla-kanban.git
cd bugzilla-kanban
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:5173.
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run preview |
Preview production build |
npm run test |
Run unit tests |
npm run test:ui |
Run unit tests with UI |
npm run test:coverage |
Run tests with coverage report |
npm run test:e2e |
Run Playwright E2E tests |
npm run lint |
Run ESLint |
npm run lint:fix |
Fix ESLint issues |
npm run lint:css |
Run Stylelint |
npm run typecheck |
Run TypeScript type checking |
src/
├── components/ # React components
│ ├── Auth/ # API key input and status
│ ├── Board/ # Kanban board, columns, cards
│ ├── FAQ/ # FAQ modal
│ ├── Filters/ # Filter bar components
│ └── Notifications/# Toast notifications
├── lib/
│ ├── bugzilla/ # Bugzilla API client
│ └── storage/ # Encrypted localStorage
├── store/ # Zustand state management
└── types/ # TypeScript type definitions
api/ # Vercel serverless functions (CORS proxy)
tests/
└── integration/ # Playwright E2E tests
# Run all unit tests
npm run test
# Run with coverage
npm run test:coverage
# Run in watch mode
npm run test -- --watch# Install Playwright browsers (first time only)
npx playwright install
# Run E2E tests
npm run test:e2e
# Run with UI
npx playwright test --uiThe app is designed to be deployed on Vercel:
- Push your code to GitHub
- Connect your repository to Vercel
- Vercel will automatically deploy on every push to
main
No environment variables are required. The app communicates directly with Bugzilla through a CORS proxy serverless function.
- Framework: React + TypeScript
- Build Tool: Vite
- State Management: Zustand
- Styling: Tailwind CSS
- Animations: Framer Motion
- Drag & Drop: @dnd-kit
- Icons: Google Material Icons
- Testing: Vitest + Playwright
- Linting: ESLint + eslint-plugin-unicorn
- API Key Storage: Your Bugzilla API key is encrypted using the Web Crypto API before being stored in localStorage
- No Server Storage: The app is entirely client-side. Your API key is only sent directly to Bugzilla
- CORS Proxy: The Vercel serverless function only proxies requests to
bugzilla.mozilla.org
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please follow the Conventional Commits specification for commit messages.
MIT
Created by @jaws