This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
./mvnw quarkus:dev
Run with live reloading enabled for development. Requires PostgreSQL at localhost:5432/mulkcms (user mulk, empty password); Liquibase migrations run automatically at startup.
./mvnw package # Build JAR (and Docker image config via Jib) ./mvnw package -Pnative # Build native image with GraalVM ant web # Bundle web scripts and stylesheets ant clean # Clean all build artifacts (incl. node_modules, dist) ant deploy # Build, push Docker image, deploy to Kubernetes
./mvnw spotless:apply # Apply Google Java Format ./mvnw spotless:check # Check code formatting
The frontend lives in src/main/resources/META-INF/resources/ and is built with yarn + esbuild (build.js):
ant web.resources # Generate web resources only (yarn install + esbuild) ant web.check # Run Flow and ESLint checks
Or directly in src/main/resources/META-INF/resources/:
yarn run build # esbuild bundle (node build.js) yarn run dev # esbuild in watch mode
Note: the Ant esbuild target is skipped if web_modules/ and dist/ already exist; run ant clean or yarn run build directly to force a rebuild.
./mvnw liquibase:update # Apply database migrations ./mvnw liquibase:rollback # Rollback database changes
Migrations live in src/main/resources/db/changeLog-*.xml, included from changeLog.xml.
There is no test suite (no src/test/ directory and no test dependencies). Verify changes by running the app in dev mode.
MulkCMS2 is a Java-based CMS built with Quarkus, featuring a hybrid architecture with two main systems:
src/main/java/eu/mulk/mulkcms2/)Bookmark, LazychatMessage) inherit from the Post base class (benki/posts/Post.java), which centralizes visibility/access-control queries via the JPA Criteria API. Post bodies live in separate *Text entities keyed by (post, language).benki.users.User and cms.users.User exist for legacy compatibilityPanacheEntityBase for simplified Hibernate operationsRole targets rather than stored directlysmallrye-jwt) signed with a local keystoresrc/main/resources/templates/, organized per resource class, e.g. templates/PostResource/)ant deploy)%dev.* - Development configuration%prod.* - Production configurationsrc/main/resources/application.propertiessrc/main/resources/application.properties - Main configurationsrc/main/resources/db/changeLog.xml - Liquibase migration entry pointpom.xml - Maven dependencies and build configurationbuild.xml - Ant build script for web resources and deploymentsrc/main/resources/templates/ - Qute templatessrc/main/resources/META-INF/resources/ - Frontend sources and static web resources (yarn project)./mvnw spotless:apply before committingant web.check)Post in benki/ packagechangeLog.xmlcommon/hibernate/)