openSUSE Kudos is a lightweight web application that allows contributors to recognize each other through positive feedback.
It provides:
- ๐ฌ Kudos messages
- ๐ Badges
- ๐ Activity feed
- ๐ค Optional Slack & Matrix bots
Originally developed during SUSE Hackweek 25.
This repository contains:
- Backend: Express + Prisma
- Frontend: Vue + Vite
A public instance is available:
๐ https://kudos.opensuse.org
๐ฌ Matrix room (bot + community):
๐ https://matrix.to/#/#chat:opensuse.org
Kudos is packaged and deployed within openSUSE infrastructure:
-
Source: https://src.opensuse.org/kudos
-
Build project: https://build.opensuse.org/project/show/openSUSE:infrastructure:kudos
-
Installed via:
zypper in kudos kudos-badges kudos-bots -
Bots source (Gitea, no source archives): https://src.opensuse.org/kudos/kudos-bots
-
Configuration: https://github.com/openSUSE/heroes-salt
-
Runs as systemd services (including bots)
When updating schema or refreshing predefined data (e.g. badges, categories):
npx prisma db pushexport DATABASE_URL="file:/var/lib/kudos/kudos.db"
node backend/prisma/seed-prod.jsExample output:
๐ฑ Running production seed (categories + badges only)โฆ
๐ฟ Categories initialized (8).
๐
Badges initialized (43).
โโโโโโโโโโโโโโฌโโโโโโโโโ
โ (index) โ Values โ
โโโโโโโโโโโโโโผโโโโโโโโโค
โ categories โ 8 โ
โ badges โ 43 โ
โโโโโโโโโโโโโโดโโโโโโโโโ
๐ณ Production seed complete.
โ ๏ธ db pushis intended for development. For production, ensure schema changes are applied carefully and data is backed up.
Badge artwork is maintained in a separate repository:
๐ https://github.com/openSUSE/kudos-badges
This project does not bundle badge assets directly.
Ensure badges are available in your deployment environment.
The bots (Slack & Matrix) are developed and packaged separately:
๐ https://src.opensuse.org/kudos/kudos-bots
The recommended way to develop Kudos is inside a Distrobox container based on openSUSE Leap 16.0.
distrobox create -n kudos -i registry.opensuse.org/opensuse/leap:16.0
distrobox enter kudosInstall dependencies:
zypper install jq npm22 git mkcertgit clone https://github.com/openSUSE/kudos.git
cd kudos
./runme-clean.shThis will:
- install all dependencies
- initialize the SQLite database
- create demo users
- build and start the full stack
./runme-dirty.shThe app requires OpenID Connect.
For development:
cp .env.dev .envThis uses: ๐ https://demo.duendesoftware.com
Test accounts:
bob / bobalice / alice
After running runme-clean.sh, the full stack is already running.
If needed, you can run services manually:
Frontend (Vite, port 5173):
npm run frontendBackend (Express, port 3000):
npm run backendOpen: ๐ https://localhost:5173
Single-server deployment.
npm install
npm run build:backend
npm run build:frontend
npm prune --omit=devBuild output:
backend/public
node backend/src/app.js- Application runs on: https://localhost:3000
- Backend serves the compiled frontend
- One systemd service is sufficient
Self-signed certificates are stored in:
certs/localhost.pem
certs/localhost-key.pem
You may need to trust the certificate in your browser.
Available in multiple languages:
๐ธ๐ฆ ๐จ๐ฟ ๐ ๐ฉ๐ช ๐ฌ๐ท ๐ฌ๐ง ๐ช๐ธ ๐ซ๐ท ๐ฎ๐ณ ๐ญ๐บ ๐ฎ๐ฉ ๐ฎ๐น ๐ฏ๐ต ๐ฐ๐ท ๐ณ๐ฑ ๐ต๐ฑ ๐ง๐ท ๐ต๐น ๐ท๐ด ๐ท๐บ ๐ธ๐ฐ ๐ธ๐ช ๐น๐ท ๐บ๐ฆ ๐ป๐ณ ๐จ๐ณ ๐น๐ผ
Want to contribute?
๐ https://github.com/openSUSE/kudos/blob/main/frontend/src/locales/CONTRIBUTING.md
- Vue 3 + Vite
- Node.js (Express)
- Prisma ORM
- SQLite (development)
- Slack & Matrix integrations
- Weblate
- LLM integrations (Gemini, GPT-5.1)
- Code: Apache 2.0
- Badge artwork: CC BY-SA 4.0
ยฉ 2025 Lubos Kocman and openSUSE contributors
๐ Geekos deserve recognition too!
