Want to help? Cool! Here's how.
Check the documentation first if you're new to the project.
Don't be a jerk. That's it.
- Be respectful
- Give constructive feedback
- Help others when you can
- Node.js 22+ and pnpm 10 (
corepack enable) - Docker & Docker Compose v2.0+
- Git
- Any code editor (VS Code works great)
-
Fork the repo
-
Clone it:
git clone https://github.com/YOUR_USERNAME/minepanel.git cd minepanel -
Add upstream:
git remote add upstream https://github.com/Ketbome/minepanel.git
-
Create a branch:
git checkout -b feature/my-thing
- Fix bugs
- Add features
- Improve docs
- Translate to other languages
- Write tests
- Make the UI better
The repo is a pnpm workspace (backend + frontend); pnpm install at the root
installs both and the git hooks. Node 22+ and pnpm 10 (corepack enable).
pnpm install
pnpm dev:backendRuns on http://localhost:8091
pnpm install
pnpm dev:frontendRuns on http://localhost:3000
pnpm install
pnpm docs:devRuns on http://localhost:5173
# Full stack
docker-compose -f docker-compose.split.yml up --build
# Logs
docker-compose logs -f
# Stop
docker-compose downminepanel/
├── backend/ # NestJS backend API
│ ├── src/
│ │ ├── auth/ # Authentication module
│ │ ├── server-management/ # Server management logic
│ │ └── docker-compose/ # Docker operations
│ │ └── settings/ # User Settings
│ │ └── users/ # User
│ └── test/
├── frontend/ # Next.js frontend
│ ├── src/
│ │ ├── app/ # App router pages
│ │ ├── components/ # React components
│ │ ├── lib/ # Utilities and hooks
│ │ └── services/ # API services
│ └── public/
├── doc/ # VitePress documentation
│ ├── .vitepress/
│ └── *.md
└── servers/ # Minecraft server data (created at runtime)
-
Update from upstream:
git fetch upstream git rebase upstream/main
-
Run tests:
pnpm test -
Lint (
pnpm verifyruns lint + typecheck + tests, the same gate as the pre-push hook and CI):pnpm lint
-
Test manually
-
Push:
git push origin feature/my-thing
-
Open a PR on GitHub
-
Fill out the template:
- What changed
- Related issues
- Screenshots for UI stuff
- How to test
feat(server): add Purpur support
fix(ui): correct button alignment
docs: update installation guide
- Someone will review it
- Make requested changes
- It gets merged
Before opening an issue:
- Check if it's already reported
- Try the latest version
- Get logs and screenshots
## What's wrong
Clear description of the bug
## How to reproduce
1. Do this
2. Do that
3. See error
## Expected vs actual
Expected: X should happen
Actual: Y happened instead
## Environment
- OS: Ubuntu 22.04
- Docker: 24.0.0
- Minepanel: 1.0.0
- Browser: Chrome 120
## Logs
[Paste logs here]
## Screenshots
[If you have any]Before suggesting:
- Check the roadmap
- Check existing issues
- Make sure it fits the project
## What
Brief description
## Why
What problem does it solve?
## How
Detailed explanation
## Implementation ideas
(Optional) How it could work
## Alternatives
(Optional) Other solutions considered
## Context
(Optional) Screenshots, mockups, examplesWant to add a new language?
-
Create
frontend/src/lib/translations/fr.ts:import type { TranslationKey } from './en'; export const fr: Record<TranslationKey, string> = { // Copy from en.ts and translate every key. };
Dictionaries must be complete: the build fails if any key from
en.tsis missing. -
Register its dictionary and display metadata once in
frontend/src/lib/translations/index.ts:import { fr } from "./fr"; const locales = { // ... fr: { dictionary: fr, flag: '🇫🇷', name: 'Français' }, };
translations,Language, andlanguageOptionsare derived from this registry. The locale code must match the dictionary import. -
Do not edit
LanguageSwitcher,LanguageSelector, or the settings service. Both selectors renderlanguageOptions, and the settings API uses the canonicalLanguagetype from the registry.Discord webhook notifications are separate backend translations and currently support only
en,es, andnl. Add a backend translation only when the new locale must also be used in notifications. -
Test it:
pnpm --filter ./frontend lint pnpm --filter ./frontend build
Also select the new locale on the login page and in Settings → Preferences.
Docs are at minepanel.ketbome.com and built with VitePress (in doc/).
Types of docs needed:
- API endpoints
- User guides
- Examples
- Troubleshooting
Keep it:
- Simple and clear
- With code examples
- Updated with changes
- With screenshots when helpful
- GitHub Discussions
- Open an issue
- Check the FAQ
Thanks for helping!