We welcome contributions from the community! Whether you're fixing a bug, adding a feature, or improving documentation, your help is appreciated.
- Check out our open issues on GitHub or OnlyDust.
- Comment on an issue to explain why you're eligible to work on it, mentioning your experience and skills.
- Picking an Issue on OnlyDust: Select an open issue and provide details about your qualifications in the comments.
- Code Style: Use Biome for auto-formatting. Ensure Biome is set as your default formatter in your IDE (
vscode://settings/editor.defaultFormatter). Install the Biome extension.
-
Fork & Clone
git clone https://github.com/yourusername/stellar-rent.git cd stellar-rent -
Install Dependencies
bun install
-
Development Setup
Option A: Docker (Recommended for beginners)
# Navigate to backend and start with Docker cd apps/backend docker-compose up # Test that it's working curl http://localhost:3000/health
Option B: Local Development
# Setup environment variables (see apps/backend/README.md) # Then start development bun run dev
-
Create a Branch
git checkout -b feature/your-feature-name
-
Make Changes & Format
# Make your changes... bun run format-and-lint:fix # Auto-fixes formatting
-
Create Pull Request
- Add a description (any length is fine!)
- Our CI will handle the rest
For easier onboarding, we provide a simple Docker setup especially for the backend:
# 1. Clone and navigate
git clone https://github.com/yourusername/stellar-rent.git
cd stellar-rent/apps/backend
# 2. Create .env file (minimal setup for Docker)
echo "PORT=3000
SUPABASE_URL=https://placeholder.supabase.co
SUPABASE_ANON_KEY=placeholder_key
SUPABASE_SERVICE_ROLE_KEY=placeholder_service_key
JWT_SECRET=test_jwt_secret_for_docker_testing
CORS_ORIGIN=http://localhost:3001
NODE_ENV=development" > .env
# 3. Start Docker containers
docker-compose up
# 4. Test the API
curl http://localhost:3000/health- ✅ No local setup needed: Works out of the box
- ✅ Environment consistency: Same setup for everyone
- ✅ Hot reload: Code changes automatically restart the server
- ✅ Health monitoring: Built-in health checks
- ✅ Easy cleanup:
docker-compose downremoves everything
# Start development environment
docker-compose up
# Run in background
docker-compose up -d
# Stop everything
docker-compose down
# View logs
docker-compose logs backend
# Restart after changes
docker-compose restart backend- Edit code normally: Changes sync automatically with the container
- Install new packages: Restart container after adding dependencies
- Database changes: You'll still need Supabase setup for full functionality
- Debugging: Use
docker-compose logs backendto see server logs
Our CI/CD is designed to be contributor-friendly while maintaining code quality:
- Code Formatting: Auto-formatted with Biome
- Build Validation: Ensures your changes don't break anything
- Security: Basic check for exposed secrets
- Smart Testing: Only tests the apps you modify (faster CI)
- Large PR Warning: Friendly reminder for large changes (doesn't block merge)
- Auto-formatting: Code gets formatted automatically
- No strict commit rules: Write commits however you prefer (though conventional commits are encouraged)
- No required labels: We don't enforce labels on PRs
- Draft PRs: Skip validation until you're ready
- Warnings vs Errors: Most issues are warnings, not blockers
# Format code automatically
bun run format-and-lint:fix
# Check formatting
bun run format-and-lint
# Build all apps
bun run build
# Start development
bun run devWe follow the Conventional Commits specification as configured in our commitlint.config.js. Keep commit messages concise and descriptive.
-
Atomic Commits: Each commit should represent a single, complete change. This means:
- One logical change per commit
- Don't mix different types of changes (e.g., don't mix features with bug fixes)
- Keep commits focused and small
-
Commit Message Structure:
- First line: type and short description (max 72 characters)
- Body: detailed explanation if needed
- Footer: references to issues/tickets if applicable
-
When to Commit:
- After completing a logical unit of work
- When the code is in a working state
- Before making a different type of change
The following commit types are allowed:
feat: A new featurefix: A bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc)refactor: Code changes that neither fix bugs nor add featuresperf: Performance improvementstest: Adding or updating testschore: Build process or tooling changesrevert: Reverting previous commits
For breaking changes, append ! after the type/scope.
# Good: Atomic commit with single change
feat: add user authentication
# Good: Atomic commit with scope
feat(auth): implement JWT token validation
# Bad: Multiple changes in one commit
feat: add auth and fix login bug and update docs
# Good: Breaking change
feat!: migrate to new API versionPlease refer to Conventional Commits for more information.
Naming branches
| Category | Description |
|---|---|
| hotfix | for quickly fixing critical issues, usually with a temporary solution |
| bugfix | for fixing a bug |
| feature | for adding, removing or modifying a feature |
| test | for experimenting something which is not an issue |
| wip | for a work in progress |
Example
feat/your-feature-name- Create a new branch with the name of the feature you want to add
git checkout -b feat/your-feature-name- Make your changes and commit them
git add .
git commit -S -m "feat: your feature name"
git push origin feat/your-feature-name- Create a pull request on github
- Check for conflicts and resolve them
- On the description provide a summary of the changes you have made
- On the reviewers add the reviewers you want to review your PR
- Wait for the reviewers to review your PR
- Description: Tell us what you changed and why
- Working code: Should build without errors
- Perfect commit message format (conventional commits encouraged but not enforced by CI)
- Labels on PRs
- Detailed descriptions (brief is fine!)
- Perfect code style (we auto-format)
- Formatting issues? Run
bun run format-and-lint:fix - Build errors? Check the CI logs for specific errors
- Large PR warning? Consider splitting into smaller PRs (but it won't block merge)
- Questions? Open an issue or ask in your PR
Thanks for contributing! 🎉