kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Contributing to Kaneo#

Thanks for wanting to contribute to Kaneo! Whether you're fixing bugs, adding features, or improving docs, we appreciate your help.

Table of Contents#

Code of Conduct#

We want everyone to feel welcome here. Please be respectful and follow our Code of Conduct.

Getting Started#

What You'll Need#

  • Node.js (18 or newer)
  • pnpm (we use this instead of npm/yarn)
  • Git
  • Docker (optional, for testing full deployments)

Setting Up Your Dev Environment#

  1. Fork and clone the repo:
git clone https://github.com/yourusername/kaneo.git
cd kaneo
  1. Install dependencies:
pnpm install
  1. Set up environment variables: Create .env files for both the API and web apps. See ENVIRONMENT_SETUP.md for detailed instructions on all required environment variables.

  2. Start everything up:

pnpm run dev

This starts both the API (port 1337) and web app (port 5173). Both will automatically reload when you make changes.

Tip: The web app at http://localhost:5173 will automatically connect to the API at http://localhost:1337

Need help with setup? See our Environment Setup Guide for detailed instructions and troubleshooting tips.

Making Your First Contribution#

Finding Something to Work On#

  • Browse open issues - look for "good first issue" labels
  • Check our Discord - we often discuss features and bugs there
  • Found a bug? Feel free to fix it and open a PR

The Process#

  1. Create a branch for your work:
git checkout -b fix/whatever-youre-fixing
# or
git checkout -b feat/cool-new-feature
  1. Make your changes and test them locally (pnpm test for unit tests; pnpm test:integration for API integration tests with PostgreSQL)

  2. Commit using conventional commits:

git commit -m "fix: resolve calendar date selection bug"
git commit -m "feat: add bulk task operations"
git commit -m "docs: update deployment guide"
  1. Push and create a PR:
git push origin your-branch-name

Then open a pull request on GitHub with a clear description of what you changed and why.

Development Guidelines#

Code Style#

We use Biome for formatting and linting. Before you commit:

pnpm run lint

This will check and automatically fix formatting issues. Most editors can auto-format on save if you install the Biome extension.

Commit Messages#

We use conventional commits to keep our history clean:

  • feat: - New features
  • fix: - Bug fixes
  • docs: - Documentation changes
  • refactor: - Code changes that don't add features or fix bugs
  • test: - Adding or updating tests
  • chore: - Maintenance tasks

Localization (i18n)#

Kaneo uses i18next with react-i18next in the web app. We want user-facing copy to stay consistent, translatable, and easy to maintain.

Approach#

  • Use translation keys for all user-facing strings instead of hardcoded copy
  • In React components, call t("namespace:key.path") from useTranslation()
  • Translation files live in i18n/ and use locale-style filenames such as en-US.json and de-DE.json
  • i18n/en-US.json is the source of truth for translation keys
  • Locale selection comes from the signed-in user's saved preference when available, otherwise from the browser locale

i18n commands#

The root package.json includes scripts to keep locale files in sync:

Command Description
pnpm i18n:check [locale] Compares en-US.json with the other locale files and reports missing or extra keys. You can filter by locale, for example pnpm i18n:check de-DE.
pnpm i18n:check:fix [locale] Adds missing keys to other locale files using the English source text from en-US.json.
pnpm i18n:report Scans .ts and .tsx files in the React app and reports missing keys, unused locale keys, and dynamic translation calls that static analysis cannot verify.
pnpm i18n:report:fix Removes unused keys from en-US.json and the other locale files.
pnpm i18n:schema Generates i18n/schema.json from en-US.json for editor and tooling validation.

Adding a new locale#

  1. Create a new file in i18n/ using a locale code filename such as fr-FR.json.
  2. Copy i18n/en-US.json and translate the values.
  3. Register the locale in i18n/resources.ts by updating supportedLocales and resources.
  4. If the locale should be selectable in the UI, add it to the language picker in apps/web/src/routes/_layout/_authenticated/dashboard/settings/account/preferences.tsx.
  5. Run pnpm i18n:check, pnpm i18n:report, and pnpm i18n:schema before opening your PR.

Adding translations#

  1. Add the new key to i18n/en-US.json first.
  2. Use it in code with a static key:
const { t } = useTranslation();

return <p>{t("common:actions.close")}</p>;
  1. Use interpolation for dynamic values instead of concatenating translated strings:
t("projects:greeting", { name: userName });
  1. Keep translation keys static. Calls like t(someVariable) or t(`tasks:${key}`) cannot be validated by the i18n report and will be flagged.

Translation key conventions#

  • Use namespaces at the top level such as common, settings, and tasks
  • Use dot notation inside each namespace, for example settings.preferencesPage.title
  • Keep keys descriptive and stable
  • Put widely shared labels in common
  • Group feature-specific keys under the feature or component they belong to

Contribution notes#

  • If you change UI copy, update the locale files in the same PR
  • If you remove or rename translation keys, run pnpm i18n:report:fix to keep locale files clean
  • If a locale is not fully translated yet, leaving the English source text as a placeholder is fine

Project Structure#

kaneo/
├── apps/
│   ├── api/          # Backend API (Node.js/Hono)
│   ├── docs/         # Documentation site (Next.js)
│   └── web/          # Frontend app (React/Vite)
├── packages/         # Shared code and configs
└── charts/           # Kubernetes Helm charts

Need Help?#

  • Discord: Join our Discord server for real-time help
  • Issues: Open a GitHub issue for bugs or feature requests
  • Discussions: Use GitHub Discussions for questions about contributing

Types of Contributions We Love#

  • Bug fixes - Found something broken? Fix it!
  • New features - Have an idea? Let's discuss it first
  • Documentation - Help others understand how to use Kaneo
  • Performance improvements - Make things faster
  • Accessibility - Help make Kaneo usable for everyone

Thanks for contributing to Kaneo! 🚀