DUXPLIMA Documentation

The interface

The pages, the hotkeys, the template pattern and the placeholder convention.

The panel is uxrAdminPanelGui, a designed ScreenGui you edit in Studio. The code fills it in; the layout and the styling are yours.

Hotkeys

KeyDoes
/Toggle the panel
;Toggle the command bar
EscapeClose the top dialog
Shift and ,Toggle the command bar
Shift and 7Toggle the panel
u! in chatToggle the panel
u!cmd in chatToggle the command bar

The backslash key also opens the command bar, and the numeric keypad divide also opens the panel.

Hotkeys follow the keyboard layout

The client asks Roblox which key produces / and which produces ; on the player's actual layout, and binds those, rather than binding the physical US positions.

An AZERTY or Turkish keyboard therefore gets the same two characters under the same two fingers. The Shift combinations exist as a fallback for layouts where the lookup fails.

Both can be overridden per player, and the panel's Settings page is where that lives.

The pages

PageShows
HomeThe dashboard
PlayersEverybody in the server, with profiles and actions
CommandsThe full command browser, filtered to what you may run
LogsThe action log
AnalyticsServer statistics
ServersEvery public server, from the cross-server heartbeat
ChatThe admin chat, which crosses servers
SettingsPer-player preferences, including hotkeys

Plus the command popup, which is the bar rather than a page.

Pages are gated by rank, and a page a player may not see is not built. See Ranks and permissions.

The template pattern

Every list in the panel clones a prototype you design. The prototype lives in an unusual place:

ScrollingFrame
  UIGridLayout
    TemplateFrame

The template is a child of the layout object rather than of the scrolling frame, which keeps it out of the layout's own flow. Clones are parented to the scrolling frame.

Do not move the template out of the UIGridLayout

It looks misplaced in the explorer and it is not. Moving it up a level makes it appear as a real row in every list.

Placeholders

Every search box has a sibling label, named SearchTextLabel or TypeLabel, that is shown and hidden as the box gains focus and text.

Do not set PlaceholderText

The system manages the sibling label instead, so setting Roblox's own placeholder property gives you two placeholders at once.

The reason for the convention is styling: a sibling label can carry any font, colour, stroke and animation, and PlaceholderText cannot.

What the code fills in

ElementFilled with
Rank badgesThe rank's colour and display name
Command cardsName, description, required rank, argument hints
Player rowsName, rank, and the actions you may take
Log rowsThe structured log fields
NotificationsTitle, description, kind colour, and an optional click action

Colours for the four notification kinds are fixed: blue for information, teal for success, yellow for warning and red for error.

The composer

A command run from the panel with a required argument missing opens a composer instead of failing: a small form built from the command's own argument list, with a picker for colours, assets and skyboxes where the type calls for one.

The punishment commands open a dedicated composer with tabs, which is what makes a ban with a reason and a duration a two-field form rather than a line of syntax.

The composer is why the argument metadata matters

Every name, type, min, max and default in Commands.luau is read by the composer to build its form.

A command you add with careless metadata still runs from chat and gives a poor form in the panel.

Deploying your changes

Edit the copy inside ServerScriptService/uxrAdminPanelSystem/Client/uxrAdminPanelGui. That is the design-time copy.

StarterGui is only seeded once

The bootstrap copies the ScreenGui into StarterGui only if a ScreenGui of that name is not already there. It never overwrites.

A stale copy in StarterGui from an earlier run silently wins over every change you make. If your edits are not showing up, delete the StarterGui copy and press Play again.

Missing instances

Every lookup is by name with a ten second wait, and a failure logs a warning naming the exact path. The rest of the panel keeps working.

Watch Output while restyling and it tells you precisely what you renamed.