MetalStack is a private knowledge sharing and developer Q&A platform tailored for internal team collaboration.
- Backend: Spring Boot 3.5 + Java 25 (Temurin), Gradle, Flyway, Spring Data JPA.
- Frontend: React 19, Vite 8, Vanilla CSS (Premium Dark Mode design), Axios,
keycloak-js. - Identity Provider: Keycloak 25 (OIDC Authorization Code Flow with PKCE, RBAC mapping).
- Database: PostgreSQL 16 (Postgres full-text search).
- Email Server: MailHog (dev SMTP catcher).
- Containerization: Google Jib + Podman.
Launch the required background containers using Podman:
podman compose up -dNote: Keycloak will automatically boot and import the metalstack realm client configuration from keycloak-realm.json.
Run the Spring Boot application. Flyway will automatically run database schema migrations on start:
cd backend
./gradlew bootRunThe server will start on port 8080.
Once the backend is running and migrations are finished, execute the external seed script to populate development data:
./seed.shThis populates Alice (user1), Bob (user2), Moderator (moderator), and Admin (admin) profiles, together with test questions, votes, comments, and answers.
Install node dependencies and start the Vite dev server:
cd frontend
npm install
npm run devThe React app will open on http://localhost:5173/.
| Username | Password | Role | Description |
|---|---|---|---|
admin |
admin |
ADMIN |
Can delete any question, answer, or comment. |
moderator |
moderator |
MODERATOR |
Can close/lock questions. |
user1 |
user1 |
USER |
Alice Developer (author of Question 1). |
user2 |
user2 |
USER |
Bob Architect (author of Question 2). |
- Secure OIDC Auth: Keycloak handles registration, credentials, and tokens. The frontend uses
keycloak-jsand the backend is a pure OAuth2 Resource Server validating JWTs. - Curated Tagging: Auto-suggesting tags search bar (
GET /api/tags/search) which guides users to select from existing tags, while allowing new ones. - Rich Markdown: Write and render full Markdown for questions, answers, and comments (includes code block syntax highlighting).
- Email Alerts: Trigger asynchronous email notifications when someone answers your question (preference togglable in User Profile).
- Interactive Voting: Vote up/down on questions/answers with visual feedback.
- Reputation Engine: Users accumulate reputation points when they write quality answers or have their answer accepted.