
The challenge
Moderation is a workflow, not a single command.
A staff team reviews people, investigates problems, and records decisions that affect members of the community. Steward is designed around the practical needs that come with that work.
Related tools in one place
Staff need player information, reports, warnings, and actions in a consistent interface, instead of remembering a separate command for each task.
Appropriate authority
Sensitive actions need permission and staff-hierarchy checks, so team members can only act within the authority they have been given.
Clear report ownership
Reports need someone responsible for them and defined steps to a resolution, so nothing is handled twice or left unanswered.
Decisions with context
Moderation decisions need persistent history, so staff can see what has already happened before deciding what to do next.
Context that carries through
As staff move between a player, their records, and an action, the interface should keep track of where they are and what they were reviewing.
Implemented capabilities
Connected interfaces, enforced permissions, and lasting records.
These modules are implemented in the codebase. Not every module has completed in-game runtime acceptance yet; see the development status below.
Connected staff interfaces
Related information and actions are organized around the player or issue being reviewed.
- A staff control panel opened with the /steward command
- A player browser and individual player profiles
- Contextual actions with return navigation to where staff started
- Player-specific and server-wide moderation history
- Detail views and clickable record identifiers
Permission and hierarchy enforcement
Permission checks apply when an action is confirmed and executed, not only by hiding buttons a staff member should not use.
- Integration with the LuckPerms permissions plugin
- Action-specific permissions
- Primary-group weight comparisons for relevant actions that affect another player
- Separate hierarchy bypass permissions for different families of actions
- Restrictions on targeting yourself
- Actions are denied when the required hierarchy information cannot be resolved
Warning lifecycle
A guided process for issuing a warning and following it through to expiration or revocation.
- Guided selection of severity, category, reason, and expiration
- Optional private staff notes and evidence references
- Review and confirmation before a warning is issued
- Acknowledgment that only the warned player can complete
- Expiration, revocation, escalation, and persistent history
Reports and staff notes
A report moves from submission to staff ownership and a recorded resolution.
- Player-submitted reports with a submission cooldown and a limit on duplicate open reports
- A staff queue with claim, release, resolve, and dismiss actions
- Ownership rules and resolution notes
- Notifications when reports close, deferred until offline reporters return
- Persistent staff notes associated with players
Moderation and investigation tools
The everyday actions a staff team relies on, connected to the same records and permission checks.
- Freeze and controlled relocation
- Kick, mute, temporary ban, permanent ban, and revocation workflows
- Staff teleport tools and vanish
- Private staff chat with history
- Read-only inventory snapshots of online players, with an explicit refresh action
Persistent records
Records and operational state are kept on disk and restored when the server starts.
- JSON-backed records and operational state
- Shared storage helpers used across modules
- Writes to a temporary file, then atomic replacement where supported
- Restoration of relevant records on startup
- Moderation history that connects multiple action types
“GUI-first” means the main workflows run through menus, while some free-form input, such as a written reason, uses command-backed prompts. Evidence is a reference stored with a warning, not an upload system, and escalation offers recommendations within a staff-controlled workflow rather than issuing punishments on its own. Inventory inspection does not edit inventories or sync continuously. Steward does not include Discord integration, a web moderation dashboard, cross-server management, or AI moderation.
Technical highlights
The engineering behind the workflows.
Three parts of the project that apply directly to internal tools, case-management systems, and other administrative applications.
Workflow-oriented interface design
Each screen is a step in a larger journey, so staff always know where they are, what they are looking at, and how to get back.
- 01
Browse
Staff open the control panel and find a player or report from a browser view.
- 02
Review
A profile or detail view gathers the related history, notes, and available actions.
- 03
Confirm
Consequential actions go through a review screen before anything is recorded.
- 04
Return
After acting, staff return to where they started with their context intact.
Browsers, profiles, confirmation screens, and detail views link together instead of standing alone. The same pattern suits any case-management or back-office tool, where people move from a list to a record to a decision and need the surrounding context at every step.
Server-side authorization
Hiding a button is a convenience, not a control. Consequential operations are checked on the server at the moment they are confirmed and carried out.
Each action has its own permission, resolved through LuckPerms. For actions that affect another player, Steward also compares the staff member’s primary-group weight with the target’s, so a moderator cannot act against someone above them unless they hold the bypass permission for that family of actions. Staff cannot target themselves, and if the hierarchy cannot be determined, the action is denied rather than allowed.
These checks reduce the chance of an action being taken without the right authority; they are not a security certification or a guarantee against misuse. The same approach applies to role-controlled business tools, where what someone may do depends on both their role and whose record they are changing.
Modular architecture and persistence
Separating shared services from individual features keeps the project easier to extend, and keeps records available across restarts.
Core services, such as permissions and storage, are kept apart from feature modules like warnings, reports, and moderation actions. Within each module, services hold the logic, models describe the data, interfaces present it, and storage helpers handle reading and writing.
Records are stored as JSON. Writes go to a temporary file first and replace the original atomically where the system supports it, which lowers the risk of a half-written file; it is not a guarantee against data loss, and it is not a database or an immutable audit log. Relevant records are restored when the server starts.
Technology
Built with
- Language
- Java 25
- Platform
- Minecraft 26.2, Fabric Loader, and Fabric API
- Permissions
- LuckPerms API
- Build tooling
- Gradle and Fabric Loom
- Interface
- Minecraft inventory-based interfaces
- Persistence
- JSON / Gson
- Development workflow
- GitHub and a GitHub Actions build workflow
- License
- Mozilla Public License 2.0
Development status
Active development, with implemented modules undergoing further runtime validation.
The repository’s development roadmap tracks three separate stages for each module, so finished code is not mistaken for fully tested functionality.
Implemented functionality
The roadmap records the major modules described above as implemented in code.
Build validation
The repository includes a GitHub Actions build workflow. Its current result is not reported here.
Runtime acceptance
Consolidated in-game runtime checks for the implemented modules are still pending.
An automated test suite is planned but not yet part of the repository.
What this demonstrates
The same skills, applied to your project.
Steward is an independent project for Minecraft servers, but the work behind it is the same work behind internal tools and administrative applications. These are capabilities it demonstrates and the kind of work I can build for you.

