Enter your admin password.
This admin panel manages licenses for all Entertainment IT products (Timer Pro, HyperDeck Backup, etc.). It connects to a Cloudflare Worker API backed by a Supabase (PostgreSQL) database.
How licensing works: When a customer purchases a product, the system creates a license key (XXXXX-XXXXX-XXXXX-XXXXX). The customer enters this key in the app. The app calls our server on every launch to validate the key, register the machine, and check expiration. Each license has a maximum number of machines it can be activated on (e.g. 2 for Timer Pro, 1 for HyperDeck).
License types: Paid = purchased license. Trial = free trial (configurable duration per product). Demo = permanent demo for sales/trade shows.
License statuses: Active = valid and working. Trial = trial period running. Expired = past expiration date. Revoked = manually disabled by admin.
Shows summary statistics across all products: total licenses, active, trial, expired, revoked counts. Also shows per-product breakdown and any licenses expiring within 7 days that may need attention.
Search: Type to search by license key, customer name, email, or company name.
Filters: Filter by status, type, product, company, or expiry timeframe. All filters combine (AND logic).
Group by Company / Customer: Collapses licenses into groups with headers. Useful for seeing all of a company's or customer's licenses together.
Create License: Click "+ Create License". Fill in customer email (required), name, product, type, duration, max machines. Optionally assign to a company. Toggle whether to email the key to the customer.
Click any row to open the license detail modal.
Clicking a license row opens the detail modal showing all information, active machines, add-ons, and event history.
Extend: Add days to the license. If the license is expired or revoked, it reactivates and adds days from today.
Revoke: Immediately disables the license. All machines are deactivated. The user will see a "revoked" message in the app.
Release All Machines: Deactivates all machines without changing the license status. The user will need to re-activate the app. Useful when a customer gets a new computer.
Assign (company licenses): Assign this license to a specific employee by email. Creates the user if they don't exist.
Unassign (company licenses): Return the license to the company pool. All machines are released.
+ Add-On: Attach an add-on (like "web-access") to this license. Choose paid or trial.
Remove Add-On: Removes an add-on from the license. The feature is disabled immediately in the app.
What is a company? A company is an organization that owns multiple licenses. Instead of each employee buying their own license, the company buys a pool of licenses and assigns them to employees.
Setting up a company:
1. Go to the Companies tab → click "+ Create Company". Enter the company name, domain (e.g. "xyzcompany.com"), and contact info.
2. Go to Licenses tab → click "+ Create License". Select the company from the Company dropdown. Create as many licenses as needed.
3. Each license starts as unassigned (in the company pool).
4. Open a license detail → click "Assign" → enter the employee's email. They can now activate the app with that key.
When an employee leaves: Open their license → click "Unassign". This releases all machines and returns the license to the pool. Then assign it to the replacement employee.
Company Portal: Company admins can also self-manage at portal.entertainmentit.co. They log in via magic link (email). To make someone a company admin, set their role to admin in the customers table in Supabase.
What are add-ons? Optional paid features that attach to an existing license. The current add-on is Web Access ($60/year) which unlocks web tunnels, remote viewer, remote control, and Q&A features in Timer Pro.
How add-ons work: When a customer's app calls our server to validate their license, the response includes a features[] array listing active add-ons. The app checks this array to enable/disable features.
Attaching an add-on: Open a license detail → click "+ Add-On" → enter the slug (e.g. "web-access") → choose paid or trial.
Trial: Web Access has a 3-day trial. One trial per license — once used, they must purchase.
Removing: Click "Remove" next to the add-on in the license detail. Feature is disabled immediately.
Bundle product: "Timer Pro + Web Access Bundle" ($79.99/year) includes both Timer Pro and Web Access in one purchase.
View and edit product settings: name, price (in cents), trial days, subscription duration, max devices, trial enabled toggle. Changes take effect immediately — no deploy needed.
Price is in cents. $29.99 = 2999. $365.00 = 36500.
Customer says their key doesn't work: Search by key or email in the Licenses tab. Check the status — it may be expired, revoked, or at max activations.
Customer hit max activations: Open the license → Release All Machines, or release specific machines. They can then re-activate on a new machine.
Customer didn't receive their key after purchase: Check if the Squarespace order was processed. Manually trigger: curl -X POST https://timerpro-license.devsupport-ea0.workers.dev/license/poll-orders -H "Authorization: Bearer YOUR_LICENSE_API_SECRET". Or just create the license manually.
Transfer a company license to a new employee: Open license detail → Unassign (releases machines) → Assign to new employee's email.
Change product pricing or trial duration: Go to Products tab, edit the values, click Save Changes.
Deploy worker changes: cd license-worker && wrangler deploy
Update this admin panel: Edit website/admin-panel.html, then replace the code block content on Squarespace.
Adds days from current expiry (or from today if expired/revoked). Reactivates automatically.
Assign to an employee. They'll be linked to the company.