Thank you for your interest in contributing to Sharp Tabs!
git clone https://github.com/maddada/sharptabs.git
cd sharptabspnpm installCopy the example environment files:
# For the extension
cp apps/extension/.env.example apps/extension/.env.local
# For backend features (optional)
cp apps/extension/.env.local.example apps/extension/.env.localEdit apps/extension/.env.local with your own values.
- Go to Google Cloud Console
- Create a new project or select an existing one
- Create an OAuth 2.0 Client ID (Chrome Extension type)
- Add your extension ID to the authorized origins
- Copy the Client ID to
VITE_OAUTH_CLIENT_IDin your.env.local
- Build and load the extension once (see below)
- Go to
chrome://extensions - Enable Developer mode
- Find your extension and copy its key
- Add it to
VITE_EXTENSION_KEYin your.env.local
pnpm dev:extensionThis starts Vite in watch mode. Load the extension in Chrome:
- Go to
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked"
- Select
apps/extension/dist
pnpm buildpnpm test:extensionpnpm lint:extensionSee ARCHITECTURE.md for detailed project structure.
Sharp Tabs uses several backend services for premium features:
- Convex - Real-time database and serverless functions
- Firebase - Authentication
- Stripe - Payments
The extension works without these services for core functionality (tab management, suspend, workspaces). AI features and sync require the backend.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Make your changes
- Run tests and linting
- Commit your changes
- Push to your fork
- Open a Pull Request
- TypeScript for all code
- Use
typeoverinterface(see.claude/rules/typescript-best-practices.md) - Named exports over default exports
- Keep files under ~250 lines when possible
Open an issue on GitHub if you have questions or run into problems.