Loading BTX License Admin…
BT xTech
BTX License Admin
BT xTech Sdn Bhd
{{ loginError }}
BT xTech
BTX License Admin
{{ session.user.email }}
{{ stat.value }}
{{ stat.label }}
Customer Package Expires Status Bound to AC Actions
No licenses yet. Click + New License to create one.
{{ lic.customer_name || '(no customer)' }}
{{ lic.customer_email || '—' }}
{{ lic.id }}
legacy: {{ lic.legacy_key }}
{{ lic.package }}
{{ lic.max_users === 0 ? '∞ users' : lic.max_users + ' users' }}
Permanent
{{ formatDate(lic.expires_at) }}
{{ lic.days_remaining }} day(s)
{{ healthLabel(lic.health) }}
• {{ cn }}
{{ lic.autocount_product_id }}
Not yet bound
Customer Email / Phone Packages owned Licenses Joined Actions
No customers yet. Customers are auto-created when you issue a license — go to the Licenses tab and click + New License.
{{ c.name }}
{{ c.notes }}
{{ c.email || '—' }}
{{ c.phone || '—' }}
{{ p }}
{{ c.license_count }}
{{ c.active_count }} active
{{ formatDate(c.created_at) }}

{{ customerTarget.name }}

{{ customerTarget.email || 'no email' }} · {{ customerTarget.phone || 'no phone' }} · since {{ formatDate(customerTarget.created_at) }}

Customer info

Company name (you key this)
{{ customerTarget.company_name || '—' }}
Auto label / audit name
{{ customerTarget.raw_name || customerTarget.name }}
Email
{{ customerTarget.email || '—' }}
Phone
{{ customerTarget.phone || '—' }}
Notes
{{ customerTarget.notes || '—' }}
Company name (displayed everywhere — type the real company)
Auto label / audit name *
Leave the auto "Trial: …" tag alone if you can — useful for audit.
Email
Phone
Notes
{{ editCustomerError }}

License history ({{ customerLicenses.length }})

No licenses yet.
{{ lic.package }} {{ healthLabel(lic.health) }} Issued {{ formatDate(lic.issued_at) }}
{{ lic.id }}
Bound to: {{ lic.autocount_company_names.join(', ') }}
Not yet activated
Expires {{ formatDate(lic.expires_at) }}
Permanent

Issue New License {{ currentProduct.kind === 'plugin' ? '🔌 Plug-in' : '🌐 Webapp' }}

{{ currentProduct.name }}
{{ currentProduct.bindingIdHelp || 'Leave empty to bind on first activation.' }}
{{ pkgSummary }}
Package
{{ currentProduct.packages[0].label }}
{{ currentProduct.packages[0].desc }}
Customer's concurrent session limit. Leave 0 for unlimited.
{{ newDialogError }}

License issued ✅

{{ issuedKey }}
Send this UUID to the customer. They paste it in BTX Batch PDF → Settings → License → Activate.

Edit License

{{ editTarget.id }}
Customer
{{ editTarget.customer_name }}
audit: {{ editTarget.customer_raw_name }}
Current package
{{ editTarget.package }}
Status
{{ healthLabel(editTarget.health) }}
Expires
{{ editTarget.expires_at === null ? 'Permanent' : formatDate(editTarget.expires_at) }}
Company name (displayed everywhere — type if blank, edit anytime)
Renew / Extend
Smart: trial packages reset to today + N (unused trial days are not gifted). Paid licenses extend from existing expiry (remaining days preserved). Expired licenses restart from today. Pick Permanent for perpetual licenses.
Max concurrent users
Current: {{ editTarget.max_users === 0 ? '∞ unlimited' : editTarget.max_users }}
Convert trial → paid Change package (tick to combine) — {{ editTargetProduct.name }}
Tip: after converting, click Apply in Renew/Extend above to set a paid expiry (the trial expiry stays put — package change alone does NOT extend dates).
Notes (internal — not shown to customer)
{{ actionError }}
{{ actionOk }}

Access Log

{{ logTarget.customer_name }} — {{ logTarget.id }}
No activity yet.
WhenEventResultAccount BookMachine
{{ formatDateTime(e.accessed_at) }} {{ e.event_type }} {{ e.result }} {{ e.account_book_name || '—' }} {{ e.machine_name || '—' }}