How to Contribute
we use a fork-based contribution workflow.
How to Contribute
We use a fork-based contribution workflow. The main branch is protected for production. All external contributions go through the develop branch.
Contribution Flow: Fork → Clone → Branch → Commit → Push → Pull Request → Review → Merge
Step 1: Fork the Repository
Go to https://github.com/betterbugs/dev-tools and click the Fork button in the top-right corner. This creates your own copy of the repository.
Step 2: Clone Your Fork Locally
git clone https://github.com/YOUR-USERNAME/dev-tools.git
cd dev-toolsAdd the upstream remote to keep your fork synced:
git remote add upstream https://github.com/betterbugs/dev-tools.git
git fetch upstreamStep 3: Create a Feature Branch
Always work on a new branch, never directly on develop or main:
Branch naming:
feature/tool-name— New toolfix/bug-description— Bug fixdocs/description— Documentationrefactor/component-name— Code improvements
Step 4: Make Your Changes
Adding a new tool? Read the Feature and Module Structure guide.
General guidelines:
Follow the Google JavaScript Style Guide
Keep components focused and reusable
Use TypeScript types (avoid
any)Reuse existing UI components from
app/components/ui/Add shared logic to
app/libs/helpers.tsx, not duplicated in components
Building Tools with Network Features?
Network requests are completely fine! We're building tools for developers.
All of these are acceptable:
Fetching data from public APIs
AI features using user-provided API keys
Tools that enhance with network features
Integrations with external services
When using network features, follow these best practices:
1. Make it optional and graceful
Core tool works without the API/network
If API is unavailable, feature gracefully disables itself
Show clear error messages ("API key missing" or "Network unavailable")
Provide fallbacks or helpful UI states
2. Document clearly
Which APIs are needed
How to get API keys (if required)
What happens if the feature is unavailable
Example: "This feature requires an OpenAI API key. If not provided, the tool still works for basic conversion."
3. Environment variables
Use env vars for API keys and sensitive data
Document required env vars in README or tool description
If env var is missing, the feature should disable gracefully
Example: If
NEXT_PUBLIC_OPENAI_KEYis missing, button says "Configure API key to unlock AI features"
Example implementation:
Offline-Safe Tools
Most of our current tools work locally (recommended):
Process data entirely in the browser
No network calls needed
Works fully offline
Best user experience
Examples: JSON formatter, base64 encoder, text converters, CSS minifier, etc.
Step 5: Commit with Conventional Commits
We follow Conventional Commits for consistent, readable history.
Types:
feat:— New feature or toolfix:— Bug fixdocs:— Documentationrefactor:— Code cleanupstyle:— Code formattingtest:— Tests
Examples:
Step 6: Check Code Quality
Before pushing, run the linter:
Fix any warnings or errors. Your code must pass linting before opening a PR.
Step 7: Push to Your Fork
Step 8: Open a Pull Request
Go to https://github.com/betterbugs/dev-tools. You'll see a prompt to open a PR. Click Compare & pull request.
Important: Make sure you're merging INTO develop, not main.
Fill out the PR Template:
Example PR:
PR with Network Features:
Step 9: Code Review
The core team reviews your PR. They may ask for:
Code changes
Additional documentation
Clarification on network features
Screenshots or demos
Respond to feedback:
Read the comments
Make requested changes
Commit and push (same branch)
The PR updates automatically
Ask questions in the PR comment thread if something isn't clear!
Step 10: Merge
Once approved, a maintainer merges your PR into develop.
Cleanup your local branches:
Your code is now part of the project! 🎉
Later, the core team promotes changes from develop to main for production releases.
Important: Feature Labeling
When your PR is merged, we'll label it with one of these tags so users understand what they're getting:
🟢 offline-safe — Works fully offline, no network calls 🔵 network-enabled — Uses APIs or external services 🟡 experimental — New, may change or be removed 🟠 requires-api-key — User must configure API credentials
This builds trust. Users choose knowingly.
Key Documents
Before contributing, read:
CODE_OF_CONDUCT.md — Community standards
CONTRIBUTING.md — Detailed guidelines
SECURITY.md — Security vulnerabilities → email [email protected]
Feature and Module Structure — How tools are built
PWA and Offline Behavior — Understanding offline support
Need Help?
Discord: Join (fastest!)
Ask in your PR: Comment with questions
Check issues: Existing discussions may help
Read docs: README, CONTRIBUTING, guides
Quick Reference Checklist
Before opening a PR:
Ready? Pick an open issue or propose a feature. Let's build! 
Last updated