# Contributing to ServerKit
Thank you for your interest in contributing to ServerKit! This guide will help you get started.
---
## Table of Contents
- [Code of Conduct](#code-of-conduct)
- [Getting Started](#getting-started)
- [Development Setup](#development-setup)
- [Project Structure](#project-structure)
- [Making Changes](#making-changes)
- [Coding Standards](#coding-standards)
- [Testing](#testing)
- [Submitting Changes](#submitting-changes)
- [Priority Areas](#priority-areas)
---
## Code of Conduct
- Be respectful and inclusive
- Provide constructive feedback
- Focus on the issue, not the person
- Help others learn and grow
---
## Getting Started
### Prerequisites
- Python 3.11+
- Node.js 20+
- Docker (optional, for testing)
- Git
### Fork and Clone
```bash
# Fork the repository on GitHub, then:
git clone https://github.com/YOUR_USERNAME/ServerKit.git
cd ServerKit
git remote add upstream https://github.com/jhd3197/ServerKit.git
```
---
## Development Setup
### Backend Setup
```bash
# Create virtual environment
cd backend
python -m venv venv
# Activate virtual environment
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt # Development dependencies
# Copy environment file
cp ../.env.example .env
# Edit .env with your settings
# Run development server
python run.py
```
The backend will be available at `http://localhost:5000`.
### Frontend Setup
```bash
# In a new terminal
cd frontend
# Install dependencies
npm install
# Run development server
npm run dev
```
The frontend will be available at `http://localhost:5173` with hot-reload.
### Running Both Together
For development, run both the backend and frontend servers:
```bash
# Terminal 1 - Backend
cd backend && python run.py
# Terminal 2 - Frontend
cd frontend && npm run dev
```
Or use Docker:
```bash
docker compose -f docker-compose.dev.yml up
```
---
## Project Structure
```
ServerKit/
├── backend/ # Flask API
│ ├── app/
│ │ ├── api/ # API route blueprints
│ │ ├── models/ # SQLAlchemy models
│ │ └── services/ # Business logic
│ ├── config.py # Configuration
│ ├── run.py # Application entry point
│ └── requirements.txt
│
├── frontend/ # React application
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API client
│ │ └── styles/ # LESS stylesheets
│ ├── package.json
│ └── vite.config.js
│
├── docs/ # Documentation
├── nginx/ # Nginx configuration
└── docker-compose.yml
```
### Key Files
**Backend:**
- `backend/app/__init__.py` - Flask app factory
- `backend/app/api/` - API endpoints (one file per feature)
- `backend/app/services/` - Business logic services
- `backend/app/models/` - Database models
**Frontend:**
- `frontend/src/App.jsx` - Main app with routing
- `frontend/src/pages/` - Page components
- `frontend/src/components/` - Shared components
- `frontend/src/services/api.js` - API client
- `frontend/src/styles/` - LESS stylesheets
---
## Making Changes
### Branch Naming
Use descriptive branch names:
```
feature/multi-server-support
fix/login-redirect-loop
docs/api-examples
refactor/notification-service
```
### Commit Messages
Write clear, concise commit messages:
```
Add Discord webhook notification support
- Create NotificationService for webhooks
- Add notification API endpoints
- Implement Discord embed formatting
- Add frontend notification settings
```
Format:
- First line: Brief summary (50 chars max)
- Blank line
- Body: Detailed description (wrap at 72 chars)
---
## Coding Standards
### Python (Backend)
- Follow PEP 8 style guide
- Use type hints where helpful
- Document public functions with docstrings
- Use meaningful variable names
```python
def get_system_stats() -> dict:
"""
Retrieve current system statistics.
Returns:
dict: CPU, memory, disk, and network stats
"""
cpu_percent = psutil.cpu_percent(interval=1)
memory = psutil.virtual_memory()
# ...
```
### JavaScript/React (Frontend)
- Use functional components with hooks
- Use meaningful component and variable names
- Keep components focused and small
- Use LESS for styling (not inline styles)
```jsx
const ServerStats = ({ serverId }) => {
const [stats, setStats] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchServerStats(serverId).then(setStats);
}, [serverId]);
if (loading) return ;
return ;
};
```
### LESS/CSS (Styles)
- Use the existing design system variables
- Follow BEM-like naming conventions
- Keep specificity low
- Use the component/page file structure
```less
.notification-card {
background: @card-bg;
border-radius: @border-radius-md;
&__header {
padding: @spacing-md;
}
&--expanded {
border-color: @primary-color;
}
}
```
---
## Testing
### Backend Tests
```bash
cd backend
pytest
pytest --cov=app # With coverage
```
### Frontend Tests
```bash
cd frontend
npm test
npm run test:coverage # With coverage
```
### Manual Testing
Before submitting, test your changes:
1. Run the full application
2. Test the feature in multiple browsers
3. Test error cases and edge cases
4. Verify responsive design (mobile/tablet)
---
## Submitting Changes
### Pull Request Process
1. **Update your fork:**
```bash
git fetch upstream
git rebase upstream/main
```
2. **Push your branch:**
```bash
git push origin feature/your-feature
```
3. **Create Pull Request:**
- Go to GitHub and create a PR
- Fill out the PR template
- Link any related issues
4. **PR Description:**
- Describe what changed and why
- Include screenshots for UI changes
- List testing steps
- Note any breaking changes
### PR Checklist
- [ ] Code follows project style guidelines
- [ ] Self-reviewed the code
- [ ] Added/updated tests if needed
- [ ] Updated documentation if needed
- [ ] No console errors or warnings
- [ ] Tested on multiple browsers (for frontend)
### Review Process
1. Maintainers will review your PR
2. Address any requested changes
3. Once approved, your PR will be merged
---
## Priority Areas
We especially welcome contributions in these areas:
### High Priority
- **Multi-Server Support** - Agent development, remote monitoring
- **Git Deployment** - GitHub/GitLab webhooks, auto-deploy
- **Backup System** - S3/B2 integration, scheduled backups
- **Security Enhancements** - Fail2ban, SSH key management
### Medium Priority
- **Email Server** - Postfix/Dovecot integration
- **API Improvements** - Rate limiting, API keys
- **Team Features** - Multi-user, RBAC
### Always Welcome
- Bug fixes
- Documentation improvements
- Test coverage
- UI/UX improvements
- Performance optimizations
- Accessibility improvements
---
## Questions?
- Open a [GitHub Discussion](https://github.com/jhd3197/ServerKit/discussions)
- Check existing [Issues](https://github.com/jhd3197/ServerKit/issues)
- Review the [Documentation](docs/README.md)
---
Thank you for contributing to ServerKit!