Thanks for your interest in contributing to FilterFlow! This guide will help you get started.
-
Fork and clone the repository
git clone https://github.com/JamesShaver/FilterFlow.git cd FilterFlow -
Install dependencies
npm install
-
Configure OAuth — replace the
client_idinmanifest.jsonwith your own Google Cloud OAuth 2.0 Client ID (Chrome Extension type). You'll also need the Gmail API enabled in your Google Cloud project. -
Build and load
npm run build
Then load the
dist/folder as an unpacked extension atchrome://extensions/with Developer mode enabled. -
Develop in watch mode
npm run dev
After each rebuild, click the reload button on the FilterFlow card at
chrome://extensions/.
src/
background/ # Service worker: auth, Gmail API, message routing, alarms
content/ # Content script: detects email sender/subject in Gmail
shared/ # Types and constants shared across contexts
sidepanel/ # React app
components/ # UI components (filters, folders, common, layout)
context/ # Global state (AppContext + appReducer)
hooks/ # useAuth, useFilters, useFolders, useDryRun, useEmailContext
lib/ # Utilities (filter analysis, storage, message passing)
Create a branch from main with a descriptive name:
feat/short-description— new featuresfix/short-description— bug fixesdocs/short-description— documentation updates
- TypeScript — all source files use TypeScript with strict mode
- Tailwind CSS v4 — use utility classes for styling; avoid inline styles
- React 19 — use functional components with hooks
- Run
npm run buildbefore submitting to ensure there are no type errors
Write clear, concise commit messages. Use the imperative mood:
feat: add filter search debouncefix: prevent duplicate filter creationdocs: update setup instructions
- Push your branch to your fork
- Open a pull request against
main - Describe what the change does and why
- Link any related issues
Pull requests should be focused — one feature or fix per PR. Keep diffs small and reviewable when possible.
Open a GitHub issue with:
- Steps to reproduce
- Expected vs. actual behavior
- Chrome version and OS
- Console errors (if any) from the extension's service worker or side panel
Feature ideas are welcome! Open an issue describing:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you considered
Please do not open public issues for security vulnerabilities. See SECURITY.md for responsible disclosure instructions.
By contributing, you agree that your contributions will be licensed under the MIT License.