Thank you for your interest in contributing to Keyper!
Made with ❤️ by Pink Pixel - Dream it, Pixel it ✨
We welcome contributions from the community and are excited to see what you'll bring to this self-hosted credential management project!
- 🚀 Getting Started
- 🛠️ Development Setup
- 📝 How to Contribute
- 🐛 Reporting Bugs
- 💡 Suggesting Features
- 📖 Documentation
- 🔍 Code Review Process
- 📏 Style Guidelines
- 🧪 Testing
- 📄 License
- Node.js 18+ installed
- Git for version control
- Supabase account for testing (free tier works)
- Modern code editor (VS Code recommended)
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/keyper.git cd keyper - Add upstream remote:
git remote add upstream https://github.com/pinkpixel-dev/keyper.git
- Install dependencies:
npm install
- Start development server:
npm run dev
keyper/
├── src/
│ ├── components/ # React components
│ ├── hooks/ # Custom React hooks
│ ├── integrations/ # Supabase integration
│ ├── lib/ # Utility functions
│ └── pages/ # Page components
├── bin/ # CLI binary
├── public/ # Static assets
├── supabase/ # Database configuration
└── docs/ # Documentation
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLint
npm start # Start CLI server- Create
.env.localfile (optional for development):VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_ANON_KEY=your_supabase_key
- Set up your Supabase test database using
supabase-setup.sql
- Browse open issues
- Look for issues labeled
good first issueorhelp wanted - Comment on the issue to let others know you're working on it
git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description- Write clean, readable code
- Follow our style guidelines
- Add tests for new functionality
- Update documentation as needed
npm run lint # Check code style
npm run build # Ensure it builds
npm start # Test the CLIgit add .
git commit -m "feat: add new credential export feature"Commit Message Format:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesstyle:- Code style changesrefactor:- Code refactoringtest:- Adding testschore:- Maintenance tasks
git push origin feature/your-feature-nameThen create a Pull Request on GitHub with:
- Clear title and description
- Reference any related issues
- Screenshots for UI changes
- Testing instructions
- Search existing issues to avoid duplicates
- Test with latest version to ensure bug still exists
- Check the troubleshooting guide in README.md
**Bug Description**
A clear description of what the bug is.
**Steps to Reproduce**
1. Go to '...'
2. Click on '...'
3. See error
**Expected Behavior**
What you expected to happen.
**Screenshots**
If applicable, add screenshots.
**Environment:**
- OS: [e.g. Windows 10, macOS 12]
- Browser: [e.g. Chrome 96, Firefox 95]
- Keyper Version: [e.g. 0.1.0]
- Node.js Version: [e.g. 18.17.0]
**Additional Context**
Any other context about the problem.We love new ideas! Before suggesting a feature:
- Check existing issues for similar requests
- Consider the scope - does it fit Keyper's mission?
- Think about implementation - how would it work?
**Feature Description**
A clear description of what you want to happen.
**Problem Statement**
What problem does this solve?
**Proposed Solution**
How would you like it to work?
**Alternatives Considered**
Other solutions you've considered.
**Additional Context**
Screenshots, mockups, or examples.- README.md - Main project documentation
- SELF-HOSTING.md - Self-hosting guide
- Code Comments - Inline documentation
- JSDoc - Function/component documentation
- Use clear, concise language
- Include code examples
- Add screenshots for UI features
- Keep it up-to-date with code changes
- Use emojis and formatting for readability
- ✅ Functionality - Does it work as intended?
- ✅ Code Quality - Is it clean and maintainable?
- ✅ Performance - Does it impact app performance?
- ✅ Security - Are there any security concerns?
- ✅ Tests - Are there adequate tests?
- ✅ Documentation - Is it properly documented?
- Initial Review: Within 2-3 days
- Follow-up: Within 1-2 days after changes
- Merge: After approval from maintainers
- ESLint configuration enforces most rules
- TypeScript for type safety
- Prettier for code formatting (if configured)
// Use functional components with hooks
const MyComponent: React.FC<Props> = ({ prop1, prop2 }) => {
const [state, setState] = useState<string>('');
return (
<div className="my-component">
{/* Component content */}
</div>
);
};
// Export at bottom of file
export default MyComponent;- Use Tailwind CSS classes
- Follow mobile-first responsive design
- Use semantic class names when custom CSS is needed
- Maintain dark theme compatibility
- Components:
PascalCase.tsx - Hooks:
use-kebab-case.ts - Utils:
kebab-case.ts - Pages:
PascalCase.tsx
- Unit Tests - Individual functions/components
- Integration Tests - Component interactions
- E2E Tests - Full user workflows (future)
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report- Test user interactions, not implementation details
- Use descriptive test names
- Mock external dependencies (Supabase)
- Test error states and edge cases
By contributing to Keyper, you agree that your contributions will be licensed under the Apache License 2.0.
Contributors will be:
- Listed in our contributors section
- Mentioned in release notes for significant contributions
- Invited to our contributor Discord channel
- Thanked publicly on social media
- 📧 Email: admin@pinkpixel.dev
- 💬 Discord: @sizzlebop
- 🐛 Issues: GitHub Issues
- 💡 Discussions: GitHub Discussions
Thank you for contributing to Keyper! 🚀
Made with ❤️ by Pink Pixel ✨
Dream it, Pixel it