Docs
17 user-facing guides, from setup to troubleshooting. · 17 guides
Getting started
Getting started in 5 minutes
No containers required; a local JDK 21 and one MySQL instance are enough to boot, sign in and generate a module.
Read →Local development
Common commands, directory tour, configuration discipline and troubleshooting.
Read →Deployment
The standard shape: jar + MySQL + reverse proxy. This site ships no container images or orchestration files.
Read →Architecture
Layering and dependency direction
app to domain to data/infra to common/config; the direction only points down and the build enforces it.
Read →Modules and package structure
Module name equals table prefix; naming conventions at a glance; where the reference implementation is.
Read →The golden slice: adding a module
One complete path from table creation to go-live, which is also what the skeleton generator does for you.
Read →Identity and permissions
Roles and the permission model
One permission table carries directories, menus, buttons and endpoints; multi-role RBAC; annotations are the single source of truth.
Read →One source for permission codes
Defined centrally, literals banned, three places kept consistent, verified by the build.
Read →Row-level data scope
All / department / department and below / self only / custom, injected uniformly by the data access layer.
Read →Data and writes
Queries and the condition allowlist
Only annotated fields reach WHERE; a type mismatch throws; sorting and pagination both have guardrails.
Read →Transactions and writes
Write methods live in the Repository only; transaction boundaries sit in app/domain and assertions hold them.
Read →Soft delete
The base class brings soft delete; hand-written SQL must add the condition; the column is NOT NULL DEFAULT 0.
Read →Changing the schema
Liquibase is the only entry point; applied scripts are frozen and append-only.
Read →