Skip to content

Feat/pcq - #2

Merged
mrjosh merged 3 commits into
mainfrom
feat/pcq
May 1, 2026
Merged

Feat/pcq#2
mrjosh merged 3 commits into
mainfrom
feat/pcq

Conversation

@mrjosh

@mrjosh mrjosh commented May 1, 2026

Copy link
Copy Markdown
Contributor

feat: groups/queues UI overhaul, per-queue disable, and PCQ reliability fixes
Groups:

  • Add group creation modal (add_group_modal.tmpl) replacing inline form
  • Add bulk member add modal with user list and checkboxes (group_add_members_modal.tmpl)
  • Add delete-group and remove-member confirmation modals replacing alert()/confirm()
  • Restyle group detail page: flush full-width layout, members table matches All Groups
    style (zebra rows, flat rounded border, icon-only remove button)
  • Remove back button from group detail header; title+buttons always in one row
  • Show toast notifications for add-members success/error via HX-Trigger
    Queues:
  • Move queue detail page from /ui/groups/{id}/pcq to /ui/queues/{group_id}
    (301 redirects kept for legacy paths)
  • Add per-queue is_disabled flag (schema patch + idempotent ALTER TABLE)
  • Disable/Enable toggle button on queue detail and overview table rows
  • Disabled queues excluded from LoadPeerLimits/LoadPeerLimitsForGroup (AND p.is_disabled=0)
  • Overview table shows "Limits Off" red badge for disabled queues
  • Queue detail: tc preview collapsed by default with chevron toggle
  • Queue detail: buttons moved to right, back button removed, description in header
  • Hide "Groups without a queue preset" panel when every group has a preset
    PCQ / NETPLUG_PCQ_DISABLE:
  • reconcilePCQ() and startup pcq.Apply call are skipped entirely when PCQDisabled=true;
    no tc commands run at all when the flag is set
  • Auto-inject PCQDisabled into every view.Render call via view.SetPCQDisabled()
  • Sidebar Queues item renders as a non-clickable disabled element with a body-level
    fixed tooltip ("Queues is disabled") when NETPLUG_PCQ_DISABLE=1
  • Queues pages show an amber banner explaining shaping is inactive
    UI / UX:
  • Rebuilt Tailwind CSS bundle (npm run build:css) — all emerald/amber/teal/red classes
    now compiled; previously added classes were missing from the bundle
  • Richer toast notifications: per-type color scheme (success/error/warning), left accent
    stripe, SVG icon, close button, slide-in/out animation
  • QR config modal: WireGuard syntax highlighting, trailing whitespace trimmed, copy
    button shows "Config copied!" feedback and swaps to check icon
  • Delete Group button style matches VPN User delete (border-red-700, transparent bg)
  • Linux tc preview section: collapsed by default, click header to expand/collapse
  • Sidebar active state follows sub-paths (/ui/groups/123 activates Groups item)
    Docker:
  • Add openresolv to Alpine runner image so wg-quick DNS= lines work (resolvconf)

mrjosh added 3 commits May 1, 2026 21:47
…ty fixes

  Groups:
  - Add group creation modal (add_group_modal.tmpl) replacing inline form
  - Add bulk member add modal with user list and checkboxes (group_add_members_modal.tmpl)
  - Add delete-group and remove-member confirmation modals replacing alert()/confirm()
  - Restyle group detail page: flush full-width layout, members table matches All Groups
    style (zebra rows, flat rounded border, icon-only remove button)
  - Remove back button from group detail header; title+buttons always in one row
  - Show toast notifications for add-members success/error via HX-Trigger
  Queues:
  - Move queue detail page from /ui/groups/{id}/pcq to /ui/queues/{group_id}
    (301 redirects kept for legacy paths)
  - Add per-queue is_disabled flag (schema patch + idempotent ALTER TABLE)
  - Disable/Enable toggle button on queue detail and overview table rows
  - Disabled queues excluded from LoadPeerLimits/LoadPeerLimitsForGroup (AND p.is_disabled=0)
  - Overview table shows "Limits Off" red badge for disabled queues
  - Queue detail: tc preview collapsed by default with chevron toggle
  - Queue detail: buttons moved to right, back button removed, description in header
  - Hide "Groups without a queue preset" panel when every group has a preset
  PCQ / NETPLUG_PCQ_DISABLE:
  - reconcilePCQ() and startup pcq.Apply call are skipped entirely when PCQDisabled=true;
    no tc commands run at all when the flag is set
  - Auto-inject PCQDisabled into every view.Render call via view.SetPCQDisabled()
  - Sidebar Queues item renders as a non-clickable disabled element with a body-level
    fixed tooltip ("Queues is disabled") when NETPLUG_PCQ_DISABLE=1
  - Queues pages show an amber banner explaining shaping is inactive
  UI / UX:
  - Rebuilt Tailwind CSS bundle (npm run build:css) — all emerald/amber/teal/red classes
    now compiled; previously added classes were missing from the bundle
  - Richer toast notifications: per-type color scheme (success/error/warning), left accent
    stripe, SVG icon, close button, slide-in/out animation
  - QR config modal: WireGuard syntax highlighting, trailing whitespace trimmed, copy
    button shows "Config copied!" feedback and swaps to check icon
  - Delete Group button style matches VPN User delete (border-red-700, transparent bg)
  - Linux tc preview section: collapsed by default, click header to expand/collapse
  - Sidebar active state follows sub-paths (/ui/groups/123 activates Groups item)
  Docker:
  - Add openresolv to Alpine runner image so wg-quick DNS= lines work (resolvconf)
@mrjosh
mrjosh merged commit 1fc7d29 into main May 1, 2026
1 check passed
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.

1 participant