openSUSE Kudos is a simple web application that allows contributors to give positive feedback to each other. It provides kudos, badges, a small activity feed, and optional bots for Slack and Matrix.
Developed as part of SUSE Hackweek 25
This repository contains both the backend (Express + Prisma) and the frontend (Vue + Vite).
Badge artwork is stored in a separate repository:
https://github.com/openSUSE/kudos-badges
The badges folder in this project is a Git submodule located at:
frontend/public/badges
To update badges:
cd frontend/public/badges
git pull origin main
cd ../../..
git add frontend/public/badges
git commit -m "Update badges"A clean development environment can be created using Distrobox:
distrobox enter kudos # distrobox is optional
zypper install jq npm22 git
Then clone the repository and prepare the environment:
git clone https://github.com/openSUSE/kudos.git
cd kudos
./runme-clean.sh
# and later following to re-run app without recreating db, npm install etc
./runme-dirty.sh #
This installs all dependencies, resets the development SQLite database and prepares default demo users.
The app only works with OpenID Connect. There are many freely available OIDC servers that you can use for development.
If you copy dot_env.dev as your .env you'll be using https://demo.duendesoftware.com as development OIDC server. There you can login as either bob/bob or alice/alice.
Frontend (Vite on port 5173):
npm run frontend
Backend API (Express on port 3000):
npm run backend
Open the frontend in a browser:
The production setup uses a single server. The frontend is built into static files and served directly by the backend at port 3000.
npm install
npm run build:backend
npm run build:frontend
npm prune --omit=dev
This produces static files in:
backend/public
node backend/src/app.js
Production uses:
- https://localhost:3000 as the main entry point
- the backend serves the compiled frontend
- one systemd service is enough
The backend and frontend use HTTPS in development to allow secure cookies.
Self-signed certificates are stored in:
certs/localhost.pem
certs/localhost-key.pem
You may need to accept the certificate in your browser.
The recognition is important but even more important is that people get to see that person was recognized. We don't really expect users to proactively check kudos. This is when our matrix and slack bots kick in!
The project includes several optional bots in the bots directory:
- Slack bot
- Matrix bot
- OBS badge bot
- Gitea activity bot
- Manual badge bot
Each bot uses its own .env file. Copy an example and adjust the values:
cp bots/.env-slack-test bots/.env.slack
cp bots/.env-matrix-opensuse bots/.env.matrix
Install bot dependencies:
cd bots
npm install
Run a bot:
npm run start:slack
npm run start:matrix
# or
node kudos-slack-bot.js
- Vue 3 + Vite
- Node.js (Express)
- Prisma ORM
- SQLite (development)
- Slack and Matrix integration (optional)
- Gemini (recently), GPT-5.1
Code: Apache 2.0 Badge artwork: CC BY-SA 4.0
© 2025 Lubos Kocman and openSUSE contributors. 💚 Geekos deserve being recognized too!
