Recent Activations
| Product | Version | Time |
|---|
Activations
| Machines | Versions | Last Active | Actions |
|---|
Generate Activation Key
The key is a deterministic hash of email + product — same email always produces the same key for that product.
It's an identity marker: "this email has been issued a license for MyBooks." Nothing else is baked in.
Everything mutable — update-support expiry, seat count, purchase amount, renewal history, block status — lives server-side in dbo.purchases / dbo.blocked. The client app calls the API on every activation + update check to get the live state.
That means you never need to re-issue a key when someone renews, adds a seat, changes their password, etc. — it just keeps working. Resending the same email/key pair to a customer who lost their receipt is the normal recovery path.
Blocked Emails
| Product | Reason | Blocked At | Actions |
|---|
Support Tickets
| ID | Subject | Customer | Type | Status | Msgs | Updated |
|---|
Purchases
| Date | Product | Amount | Activation Key | Seats | Support | Mode |
|---|
Trial Downloads
| Last Download | Downloads | Product | Version | Status |
|---|
Users & Help Agents
Admin can do everything, including managing other users and changing their passwords. Help Agent can view and reply to tickets, look up customers and activations, and handle day-to-day support — but cannot manage users or change another user's password.
| Username | Name | Role | Created | Actions |
|---|
Customers
| Name | Phone | Products | Spent | Machines | Support | Last Active |
|---|