Skip to content

feat: add collapsible server grouping with drag-and-drop and dashboard group filter - #102

Open
itzzjustmateo wants to merge 36 commits into
BlueprintFramework:mainfrom
itzzjustmateo:feat/server-grouping
Open

feat: add collapsible server grouping with drag-and-drop and dashboard group filter#102
itzzjustmateo wants to merge 36 commits into
BlueprintFramework:mainfrom
itzzjustmateo:feat/server-grouping

Conversation

@itzzjustmateo

@itzzjustmateo itzzjustmateo commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR adds server grouping to the Hydrodactyl client dashboard, letting users organize their servers into collapsible, user-owned groups and manage them with drag-and-drop. It sits on top of BlueprintFramework/hydrodactyl and changes the following:

Server Groups (data + API)

  • New server_groups table and a group_id foreign key on the servers table (requires php artisan migrate).
  • Group CRUD via ServerGroupController: create, rename, delete, and reorder.
  • Groups are scoped per user; each server belongs to at most one group.

Dashboard UX

  • Collapsible group sections on the dashboard.
  • Drag-and-drop servers between groups and to an "Ungrouped" section, in both list and grid views.
  • Group filter in the dashboard header to narrow the view to a selected group.
  • Dashboard header restructured into a 3-column layout (left / center / right slots).
  • Error boundary restyled to match the 404 page.

Dev environment

  • docker-compose.develop.yml: Garage replaces MinIO for S3-compatible storage.
  • Dev daemon swapped from the Elytra fork to vanilla Pterodactyl Wings (nodes.daemon_type now defaults to wings).

Notes

  • Pagination has not been tested yet. I cannot seed/create even more servers on my local PC

Related Issues

#101

IMPORTANT

If this PR is merged and deployed to production, existing Hydrodactyl installations must run:

php artisan migrate

This adds the server_groups table and the group_id column used for server grouping.

itzzjustmateo and others added 14 commits August 9, 2026 21:07
Updated the security policy to clarify reporting procedures and disclosure process.
…d 3-column header layout

- Add server_groups table and server group_id foreign key (one group per server)
- Create ServerGroup CRUD API (create, update, delete, add/remove servers, reorder groups)
- Add group filter and sort to dashboard server list
- Add group view mode with collapsible sections and drag-and-drop
- Add group dropdown filter in header
- Restructure header into 3-column layout (left actions | centered search | right actions)
- Add HeaderContext left/center/right slot support (backward-compatible)
- Improve ErrorBoundary styling to match 404 page
- Fix CreateGroupModal crash (was using FormikFieldWrapper outside Formik context)
- Swap MinIO for Garage in docker-compose.develop.yml
- Remove p:user:make from devSetup.sh (use UI wizard instead)

Note: untested with actual servers running — cannot verify end-to-end locally.
@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

I gotta fix a filter issue, if I filter to only see 1 group, nothing happens, but tmrw

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

task for tmrw
haha lol

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

currently testing with real servers locally

- Add groups enabled toggle to Admin > Advanced Settings
- Add config key pterodactyl.client_features.groups.enabled (default: true)
- Add validation rule for the new setting
- Register DB override key in SettingsServiceProvider
- Return groups_enabled flag from filterOptions API
- Conditionally show/hide group UI (tab, dropdown, mode) based on setting
- Add backend guards on all ServerGroupController endpoints
- Fix icon import: MoreVertical -> EllipsisVertical
- Use SWR global mutate to revalidate server list after group operations
- Drag-and-drop now instantly moves server between groups in the UI
- Delete group now instantly ungroups servers in the UI
- Fix node daemon token encryption (root cause of 500 errors)
- More spacing between groups (space-y-6)
- Drag-and-drop to ungrouped section with visual drop indicator
- Groups always visible (empty groups show placeholder text)
- Ungrouped section always visible (dashed border drop zone)
- Collapsed chevron indicator on folder icon
- Cleaner header with uppercase tracking-wider labels
- Subtle hover states on group cards
- Accent glow shadow on drag-over
- Better empty state with icon container
- Server count badges on group and ungrouped headers
@itzzjustmateo
itzzjustmateo marked this pull request as draft August 25, 2026 19:12
- Lifted Pagination to wrap all views (groups, list, grid) once
- GroupDropdown now uses gravity-ui Folder icon (matches other header dropdowns)
- Removed redundant per-view Pagination wrappers
- Replaced all #ffffff border/background references with cream-500/cream-400 tokens
- Increased vertical spacing between all sections (space-y-6 → space-y-8)
- Added mt-2 gap between grouped cards and ungrouped drop zone
- Renamed dialog label uses cream-400/50 instead of white
@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

gonna improve the UI tmrw

@A53o

A53o commented Aug 28, 2026

Copy link
Copy Markdown

No rush, just wondering if there's any updates on this?

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

oh yeah! it's kinda done, I forgot to continue haha

@itzzjustmateo
itzzjustmateo marked this pull request as ready for review August 29, 2026 08:02
…iew/topbar

Replace the undefined accent drop-highlights with cream/mocha tokens, add a custom cream-styled floating drag preview via setDragImage, and extract a reusable DraggableServer component to match codebase conventions. Make the group view and dashboard topbar resilient at all screen sizes.
…e group modals

- Collapse the entity/group/sort filter dropdowns into a 'Filters' hamburger menu (FiltersMenu) below lg so the navbar no longer overlaps at half-width; revert the overflow-x-auto fallback in AppHeader.
- Remove the colored glow on drag targets, replacing it with a cream ring + tint; dim the source row while dragging.
- Increase spacing between groups and the ungrouped zone.
- Rebuild rename/delete modals using Dialog.Icon + Dialog.Footer: rename gets an info icon, Enter-to-save, and a disabled-until-changed Save button; delete gets a danger icon and states how many servers will become ungrouped with a destructive Delete button.
- Lazy-load every route-level page container (DashboardContainer, ServerConsoleContainer, account/server screens) so each is its own on-demand chunk.
- Fix the rolldown codeSplitting grouping: under pnpm all deps collapsed into one 3.4 MB .pnpm chunk. The name function now extracts the real package name for npm, pnpm, and scoped packages (e.g. @hugeicons/core-free-icons).
- Resolves the 'chunks larger than 500 kB' build warning; largest chunk is now ~287 kB (@xterm/xterm).
- Bump intra-group server list spacing from space-y-1.5 to space-y-3.
- Bump spacing between groups from space-y-8/sm:space-y-12 to space-y-12/sm:space-y-16.
@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

Almost done, fixing some bugs and improving it abit =D

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

Fixing the last bug =D

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author
image I hate the logo, why did I need to break it 😭

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

Can be reviewed and merged =D If there are any issues, just tell me

@itzzjustmateo itzzjustmateo changed the title feat: server grouping with drag-and-drop feat: add collapsible server grouping with drag-and-drop and dashboard group filter Aug 29, 2026
@naterfute

Copy link
Copy Markdown
Member
image

@itzzjustmateo

itzzjustmateo commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

What's about it? @naterfute

@A53o

A53o commented Sep 5, 2026

Copy link
Copy Markdown

The logo I think

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

ooh that, yeah I somehow broke it again, and could not fix it.. uhm..

@Blueberryboom

Copy link
Copy Markdown
Contributor

ooh that, yeah I somehow broke it again, and could not fix it.. uhm..

How dare you break my beloved centred logo 😭

@itzzjustmateo

Copy link
Copy Markdown
Contributor Author

ooh that, yeah I somehow broke it again, and could not fix it.. uhm..

How dare you break my beloved centred logo 😭

I am so sorry bro 😭🙏 I already tried everything fixing it, how did you fix it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants