Reserved CountryCode "XX" (Inbound.BalancerCountryCode) marks an inbound
behind a load balancer whose exit country is unknown: the site shows a
Shuffle icon with a tooltip instead of a flag, the bot shows 🔀. Admin can
pick it in the publish dialog. Fits the existing column, no migration.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Docker restore failed on NU1902/NU1903 (warnings as errors) for transitive
System.Security.Cryptography.Pkcs/Xml 10.0.10. Servicing release 10.0.13
pulls patched versions; Microsoft.OpenApi bumped to 2.12.2 as required by
Microsoft.AspNetCore.OpenApi 10.0.13.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two new maintenance actions remove VpnConfig records (with their traffic
samples) from the database: all revoked configs, and configs whose inbound
or node no longer exists. 3x-ui is not touched; both write an AuditLog entry.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner's reply goes to all admins (text preview + link to the ticket),
admin's reply goes to the ticket owner as a DM. The comment author is
never notified.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Invalidate available-inbounds when the create dialog opens, after a
config is created or revoked, and on realtime config status changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Inbound.CountryCode (ISO alpha-2), set on publish; flag shown before
the location name (SVG via country-flag-icons on the site, emoji in bot)
- Node.Capacity (optional, not a limit); available inbounds report load
percent of capacity or active config count, sorted least loaded first
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Matches the production compose so the stack data lives next to the
compose file and can be backed up with the server. ticket_uploads stays
a named volume to avoid losing existing attachments on pull.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>