
Samuel VolinandMatt Vollmer
f44a3b59d7
feat: Premium Page CTA updates and form handling (#28226)
* Premium page has form for signing up for a trial
* Input validation and normalization for trial form fields
* api endpoint definition to make this processes seamless
* license page updates to access `?success=true` queryparam and confetti
<img width="1512" height="833" alt="Screenshot 2026-08-17 at 10 08
41 PM"
src="https://github.com/user-attachments/assets/1766e724-c63a-4da9-b2bd-a98e6b66cc9b"
/>
<img width="1510" height="874" alt="Aug-17-2026 22-12-38"
src="https://github.com/user-attachments/assets/3a2a0f35-1176-4290-aa0d-b3f7d66c15d6"
/>
```mermaid
sequenceDiagram
autonumber
actor Owner
participant UI as UI<br/>TrialRequestForm + PremiumPage
participant API as API<br/>api.ts + coderd middleware
participant Coderd as Coderd<br/>postTrialLicense + trialer
participant Licensor as Licensor<br/>v2-licensor + Postgres + pubsub + cache
Note over UI: mutation.status = "idle"
Owner->>UI: fills 10 fields, checks acknowledgement
UI->>UI: Yup validate, strip "acknowledged", submit
UI->>API: POST /api/v2/licenses/trial<br/>cookie + X-CSRF-TOKEN
Note over UI: mutation.status = "pending"
API->>API: verify CSRF, apiRateLimiter,<br/>apiKeyMiddleware sets actor
API->>Coderd: dispatch
Coderd->>Coderd: audit.InitRequest, authorize license:create,<br/>httpapi.Read validates, HasLicense is false
Coderd->>Licensor: POST trial request<br/>deployment_id unspoofable, 10s deadline
Licensor-->>Coderd: 200, raw signed JWT
Coderd->>Coderd: ParseClaimsIgnoreNbf, uuid.Parse
Coderd->>Licensor: InsertLicense, updateEntitlements,<br/>publish PubsubEventLicense, commit audit log
Licensor-->>Coderd: database.License
Coderd-->>API: 201 codersdk.License
API-->>UI: 201 codersdk.License
Note over UI: mutation.status = "success"
UI->>Licensor: invalidate entitlements + licenses keys
UI->>Owner: navigate /deployment/premium?success=true
Note over Owner: confetti fires on the success param
```
---------
Co-authored-by: Matt Vollmer <matthewjvollmer@outlook.com>
2026-08-21 09:54:54 -04:00
..
2026-08-21 03:14:55 +03:00
2026-08-20 14:04:23 -04:00
2026-08-19 13:19:20 +02:00
2026-08-20 14:38:33 +01:00
2026-08-04 16:57:16 +02:00
2026-06-16 09:01:43 +00:00
2026-08-21 09:54:54 -04:00
2026-08-19 19:11:52 +00:00
2026-06-23 11:37:33 -05:00
2026-07-01 21:24:42 -05:00
2026-06-26 07:24:21 -04:00
2026-06-25 15:41:09 -06:00
2026-08-19 14:46:10 -05:00
2026-04-03 15:47:26 -05:00
2026-08-18 19:15:30 +02:00
2026-08-20 14:38:33 +01:00
2026-05-21 09:19:29 -06:00
2026-08-19 13:00:31 -08:00
2026-04-28 13:06:45 -07:00
2026-08-18 12:54:45 -07:00
2026-08-19 19:25:18 +00:00
2026-06-24 14:27:23 -05:00
2026-03-19 21:51:26 +00:00
2026-08-13 18:32:47 +02:00
2026-08-20 14:38:33 +01:00
2026-08-20 12:49:47 -07:00
2026-07-30 08:37:45 +01:00
2026-04-02 23:51:02 +02:00
2026-06-17 13:10:53 +02:00
2026-08-10 14:43:16 -05:00
2026-08-19 16:16:51 -06:00
2026-08-11 11:04:51 -05:00
2026-08-20 09:16:04 -07:00
2026-08-10 12:58:01 +02:00
2026-06-23 17:32:47 -05:00
2026-08-16 18:18:02 +05:00
2026-05-07 17:10:50 +01:00
2026-08-06 14:14:37 +10:00
2026-07-15 14:05:18 -04:00
2026-05-21 09:19:29 -06:00
2026-08-18 17:28:36 -07:00
2026-07-30 08:37:45 +01:00
2026-06-10 02:18:44 -05:00
2026-08-10 14:43:16 -05:00
2026-06-17 00:22:41 +10:00
2026-07-28 15:30:12 -05:00
2026-08-03 15:56:56 -05:00
2026-08-21 03:14:55 +03:00
2026-05-21 09:19:29 -06:00
2026-07-07 09:18:30 -07:00
2026-07-07 09:18:30 -07:00
2026-08-20 20:54:52 +00:00
2026-07-01 15:59:55 +03:00
2026-07-06 23:00:09 +01:00
2026-07-01 20:44:15 +00:00
2026-07-06 23:00:09 +01:00
2026-07-06 23:00:09 +01:00
2026-05-27 11:58:43 +02:00
2026-08-04 15:21:23 -04:00
2026-07-06 23:00:09 +01:00
2026-05-25 18:04:12 +02:00
2026-07-28 09:22:58 +01:00
2026-08-19 14:46:10 -05:00
2026-08-18 12:54:45 -07:00
2026-08-20 10:40:31 +02:00
2026-04-01 09:54:59 -04:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-28 18:37:57 +01:00
2026-08-19 19:46:23 +00:00
2026-08-19 19:46:23 +00:00
2026-08-06 09:18:46 -04:00
2026-08-06 09:18:46 -04:00
2026-08-06 09:18:46 -04:00
2026-07-07 10:42:01 +00:00
2026-05-12 22:13:55 +10:00
2026-07-01 20:15:03 +01:00
2026-07-15 17:07:57 -07:00
2026-08-19 14:46:10 -05:00
2026-07-14 12:29:38 -07:00
2026-08-18 12:54:45 -07:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-08-04 12:27:38 +02:00
2026-07-06 13:15:58 +01:00
2026-06-12 13:03:45 +00:00
2026-08-03 18:27:39 +02:00
2026-08-20 16:36:57 +02:00
2026-08-19 18:04:13 +00:00
2026-08-20 16:36:57 +02:00
2026-05-05 02:54:03 +05:00
2026-06-22 19:26:34 -06:00
2026-07-15 12:16:25 -08:00
2026-08-19 13:00:31 -08:00
2026-06-02 10:11:49 -07:00
2026-08-18 12:54:45 -07:00
2026-06-02 08:36:01 -06:00
2026-07-06 13:15:58 +01:00
2026-07-06 13:15:58 +01:00
2026-03-23 19:54:43 +00:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-08-19 19:25:18 +00:00
2026-08-13 18:32:47 +02:00
2026-05-03 11:31:48 -04:00
2026-08-11 12:02:34 +02:00
2026-08-11 12:02:34 +02:00
2026-08-19 19:36:59 +00:00
2026-08-19 19:36:59 +00:00
2026-04-07 12:25:32 -06:00
2026-08-16 18:18:02 +05:00
2026-05-05 02:54:03 +05:00
2026-07-28 16:59:33 -07:00
2026-07-28 16:59:33 -07:00
2026-07-28 16:59:33 -07:00
2026-08-12 13:36:52 -07:00
2026-08-13 09:58:51 -07:00
2026-07-28 16:59:33 -07:00
2026-05-05 02:54:03 +05:00
2026-05-21 09:19:29 -06:00
2026-06-03 10:46:07 +01:00
2026-05-05 02:54:03 +05:00
2026-07-14 13:39:58 -04:00
2026-06-03 10:46:07 +01:00
2026-04-10 09:50:11 -05:00
2026-07-14 13:39:58 -04:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-05-11 08:41:17 -06:00
2026-06-23 23:06:44 +10:00
2026-06-15 11:07:16 -04:00
2026-07-27 16:10:40 -04:00
2026-08-06 14:04:23 +10:00
2026-08-06 14:14:37 +10:00
2026-08-06 14:14:37 +10:00
2026-08-06 14:14:37 +10:00
2026-08-06 14:14:37 +10:00
2026-08-19 16:16:51 -06:00
2026-07-23 16:39:53 -06:00
2026-05-05 02:54:03 +05:00
2026-06-04 14:37:19 -04:00
2026-08-18 12:54:45 -07:00
2026-07-23 11:56:07 -06:00
2026-08-11 13:16:25 +00:00
2026-08-16 18:18:02 +05:00
2026-07-28 09:58:33 -06:00
2026-07-28 09:58:33 -06:00
2026-08-18 12:54:45 -07:00
2026-08-18 12:54:45 -07:00
2026-05-20 19:50:50 +02:00
2026-08-18 12:54:45 -07:00
2026-04-15 11:31:43 +02:00
2026-04-26 14:49:10 -07:00
2026-05-05 02:54:03 +05:00
2026-05-05 02:54:03 +05:00
2026-07-01 15:59:55 +03:00
2026-07-14 13:50:25 +01:00
2026-08-21 03:14:55 +03:00
2026-08-18 18:21:50 -05:00
2026-05-11 14:27:40 -05:00
2026-07-01 20:15:03 +01:00
2026-07-28 13:20:59 -07:00
2026-05-05 02:54:03 +05:00
2026-08-18 11:33:01 -05:00
2026-07-07 09:18:30 -07:00
2026-08-19 16:16:51 -06:00
2026-08-20 10:40:31 +02:00
2026-05-05 02:54:03 +05:00
2026-05-18 08:33:29 -04:00
2026-05-13 14:14:07 +00:00
2026-05-11 11:03:38 +02:00
2026-08-10 14:53:48 -05:00
2026-08-20 10:40:31 +02:00
2026-08-20 10:40:31 +02:00
2026-08-20 10:40:31 +02:00