Total Alerts
Last Hour
Last 24h
Entities
Top Product
Display NameUsernameRoleCreatedActions
Roblox Script Snippet
Keeps your existing Parcel whitelist. Just replace the else block in each server script. Authentication is handled automatically via JWT — no secret key required:
local Parcel = require(9428572121)
if Parcel:Whitelist("678f0642919e65ea0a9c3a61", "PRODUCT_ID") then
	-- SCRIPT HERE
else
	local HttpService = game:GetService("HttpService")
	local MarketplaceService = game:GetService("MarketplaceService")
	local Players = game:GetService("Players")
	local GroupService = game:GetService("GroupService")

	local AUTH_URL  = "https://nyxant-dashboard-production.up.railway.app/auth"
	local ALERT_URL = "https://nyxant-dashboard-production.up.railway.app/alert"

	-- Get a single-use JWT token for this server session
	local token = nil
	local authOk, authResult = pcall(function()
		local response = HttpService:PostAsync(
			AUTH_URL,
			HttpService:JSONEncode({
				placeId = game.PlaceId,
				jobId   = game.JobId
			}),
			Enum.HttpContentType.ApplicationJson
		)
		return HttpService:JSONDecode(response).token
	end)
	if authOk then token = authResult end

	local creatorName = nil
	if game.CreatorType == Enum.CreatorType.User then
		local success, name = pcall(Players.GetNameFromUserIdAsync, Players, game.CreatorId)
		if success then creatorName = name end
	elseif game.CreatorType == Enum.CreatorType.Group then
		local success, groupInfo = pcall(GroupService.GetGroupInfoAsync, GroupService, game.CreatorId)
		if success and groupInfo then
			creatorName = groupInfo.Name
		end
	end

	local placeName = "Unknown Game"
	local success2, info = pcall(function()
		return MarketplaceService:GetProductInfo(game.PlaceId, Enum.InfoType.Asset)
	end)
	if success2 and info then placeName = info.Name end

	local success, pos = pcall(function()
		HttpService:PostAsync(
			ALERT_URL,
			HttpService:JSONEncode({
				token     = token,
				product   = "Server Browser System",
				userId    = game.CreatorId,
				username  = creatorName,
				placeId   = game.PlaceId,
				placeName = placeName,
				gameLink  = "https://www.roblox.com/games/" .. game.PlaceId,
				creatorId = game.CreatorId
			}),
			Enum.HttpContentType.ApplicationJson
		)
	end)

	warn("YOU DO NOT OWN SERVER BROWSER SYSTEM | CONTACT STAFF IF MISTAKE.")
	local SOUND_ID = "rbxassetid://103633249702458"
	local KICK_MESSAGE = "You do not own a license for this Arion Product\n\nIf you believe this an error open a support ticket in our communications server."
	local function handlePlayer(player)
		local gui = Instance.new("ScreenGui")
		gui.Name = "ArionLicenseScreen"
		gui.IgnoreGuiInset = true
		gui.ResetOnSpawn = false
		gui.DisplayOrder = 999999
		gui.Parent = player:WaitForChild("PlayerGui")
		local frame = Instance.new("Frame")
		frame.Size = UDim2.new(1,0,1,0)
		frame.BackgroundColor3 = Color3.fromRGB(57,59,61)
		frame.BorderSizePixel = 0
		frame.Parent = gui
		local sound = Instance.new("Sound")
		sound.SoundId = SOUND_ID
		sound.Volume = 1
		sound.Parent = gui
		sound:Play()
		task.wait(1)
		player:Kick(KICK_MESSAGE)
	end
	for _, player in ipairs(Players:GetPlayers()) do
		task.spawn(handlePlayer, player)
	end
	Players.PlayerAdded:Connect(handlePlayer)
end
Products Catalog
Products and their credit values. Used to calculate balance for customers without credit logs.
Product Name Price (R$) Earns Redeem Cost
Danger Zone
Permanently delete all alert data
Total
Open
Active
Closed
All
Open
Awaiting Dev
Investigating
Repairing
Closed
Display Name
Shown in the sidebar and to other team members.
Display Name
Change Password
Current Password
New Password
Confirm New Password
Passkeys
Sign in without a password using Face ID, Touch ID, or a hardware security key.
Account Info
Username
Role
Total Sales
Unique Customers
This Month
Top Product
SALES BY MONTH
SALES BY YEAR
PAYMENT METHOD
TOP PRODUCTS
TOP CUSTOMERS
Total Customers
Total Sales
Credit Events
Total
Pending
Approved
Denied
All
Pending
Approved
Denied