Commit Graph

1659 Commits

Author SHA1 Message Date
Bryan Frimin
69a7c5fca7 Port data-request feature after main rebase
Main's new compliance-portal data-request pages (rights request
submission and listing) still referenced the sign-in dialog and
package names the earlier rebase's OAuth /initiate migration and
compliancepage -> complianceportal rename had already replaced.
Gate the "New Request" button behind OAuth like the rest of the
portal and point resolvers at the flattened visitor.Service methods.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:23 +02:00
Bryan Frimin
4b4e7ea1f8 Fix OAuth code exchange and go lint
Authorization-code exchange used ExternalClientID, which
is empty for registered clients and broke e2e token
grants. Pass the authenticated client's GID instead.

Also satisfy wsl_v5 blank-line rules, wire the delete
reference dialog through its mutation hook, and name the
filemanager logger.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:23 +02:00
Bryan Frimin
43ce3a7c53 Harden compliance portal auth and TLS
Align console references and OAuth branding with the
compliance-page model, and fix certificate cache eviction,
portal OAuth handlers, and magic-link edge cases left after
the trust-center rename.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:22 +02:00
Bryan Frimin
cb1d7c274b Unblock CI generate, test, and e2e
Generate MCP types before complianceportal, stub apps/trust
dist for embed, fix domains section indent, and start the
compose stack only after bin/probod is built.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:22 +02:00
Bryan Frimin
17d877a8bd Fix CI for compliance portal rename
Workflows still stubbed apps/trust/dist after the rename, so
go:embed and frontend builds failed. Also make step-ca writable
on Linux CI and fix domains section indent lint.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:22 +02:00
Bryan Frimin
caeb6d9225 Resolve custom domain SSL via certificate
Replace flattened SSL fields with a certificate
relation loaded through certmanager, and resolve
domain slots from IDs already on the trust center
instead of reloading the compliance page.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:21 +02:00
Bryan Frimin
bc128ec516 Port trust center features after main rebase
Move Emile's commitment CRUD into complianceportal management,
wire console and visitor GraphQL, and drop portal magic-link
sign-in in favor of OAuth /initiate while keeping documents,
NDA/full-name gates, and access-request resume markers.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:21 +02:00
Bryan Frimin
89f999d55c Restore TrustCenter reference hooks in console
Keep GraphQL-aligned TrustCenterReferenceGraph naming, drop the
unused domain redirect route, and tighten related compliance
page UI review nits around magic-link navigation and links.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:18 +02:00
Bryan Frimin
36bc636a08 Unify console sign-in for connect authorize
Remove the separate portal login page, show OAuth client branding on
sign-in, and preserve authorize continue URLs across auth methods.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:18 +02:00
Bryan Frimin
27e012e47a Point compliance portal frontend at portal OAuth API
Update Relay schema paths and HTTP endpoints so the portal app
talks to the compliance portal GraphQL and OAuth routes.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:14 +02:00
Bryan Frimin
ee3ce94a73 Add console portal login and magic-link error pages
Surface dedicated routes when a portal magic link is expired or
already used, and add the portal login entry point in console.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:14 +02:00
Bryan Frimin
2fd0fbe3d7 Replace trust magic-link flow with OAuth connect
Redirect visitors through the compliance portal OAuth initiate
endpoint and remove the verify-magic-link page and routes.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:14 +02:00
Bryan Frimin
ba53c94bdc Move trust center profile onto the page
Store website, email, and headquarters on the trust center so
public and admin surfaces read branding from one place. Drop the
trust API organization type and wire console, MCP, CLI, and apps
through the updated schema.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:10 +02:00
Bryan Frimin
ec80798243 Update public apps for dedicated host routing
Stop relying on the /trust/{id} path prefix in the public trust app and
serve it from the host root, reading contact and profile data from the
trust center instead of the organization. Mirror the same fragment
ownership change in the compliance portal hero.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:10 +02:00
Bryan Frimin
de367f032f Restructure console brand and overview pages
Decompose the brand page into profile, domains, visual identity, and
custom link sections, and move frameworks and the NDA card onto the
overview page as dedicated fragment components. Remove the standalone
domain page and redirect its route to brand, where domains now live.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:09 +02:00
Bryan Frimin
db24d17455 Add console useMutation and rename compliance graphs
Introduce the app-bound useMutation primitive and rename the trust center
graph and reference hooks to compliance page, moving the shared reference
dialogs alongside them. Sweep the compliance page subpages onto the new
mutation hook and the compliance-portal permission strings, and strip the
profile fields from the organization settings form.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:09 +02:00
Cursor Agent
a3fac4f543 Add rights requests to webhooks
Emit lifecycle events for rights requests created through either the
console or compliance portal. Keep webhook subscription choices in sync
across every API and client surface.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Sacha Al Himdani <SachaProbo@users.noreply.github.com>
Signed-off-by: Cursor Agent <cursoragent@cursor.com>
2026-07-21 13:24:23 +02:00
Émile Ré
854b405979 Align PDF preview with header content
Size desktop pages to HeaderBand's max-w-5xl column so
they line up with the title and toolbar. Mobile gutter is
unchanged.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 19:37:46 +02:00
Émile Ré
f62cb82387 Match PDF desktop gutter to hero padding
Fit-to-width at 100% used a phone-sized inset on all
viewports. Use the HeaderBand px-8 gutter on desktop so
the page aligns with the hero; keep mobile unchanged.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 19:37:46 +02:00
Émile Ré
895f484cf2 Update translation
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 19:37:46 +02:00
Émile Ré
e7e33b9d99 Match list skeletons to the card surface
ListItemSkeleton reused a sand-2 fill that read as a
different card; use the real row shell with pulse bars
instead, and shrink the updates skeleton to five rows.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 19:37:46 +02:00
Émile Ré
311639ae98 Add z-index scale and overview redirect
Introduce a v2 z-1…z-6 stacking scale so portaled
menus sit above in-page media, and redirect the
legacy /overview trust-app URL to home.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 19:37:46 +02:00
Émile Ré
26595b724f Serve compliance-portal instead of trust
Embed and build @probo/compliance-portal for the
/trust path and custom-domain SPA so production
ships the v2 portal. Keep apps/trust in the repo
for local use on port 5175; portal takes 5174.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 17:38:45 +02:00
Cursor Agent
70d0424022 Rename document approval button to Approve
The previous label implied review plus approval, but the action only
approves. Update the consent text to match the new button wording.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-20 17:27:12 +02:00
Émile Ré
07645e6251 Fix document row a11y and PDF page sync
Expose pending access status to assistive tech on
mobile rows, and recompute the visible PDF page
after fit-to-width reflow without writing refs
during render.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 17:07:51 +02:00
Émile Ré
d047f1b323 Extract Base UI Drawer into the v2 kit
Promote the portal burger shell into a reusable
Drawer matching Dialog (thin Base UI + tv slots).
TopBarMobileNav now composes the kit parts.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 16:47:47 +02:00
Émile Ré
ea8377a0cc Localize TopBar menu strings for all locales
The responsive burger drawer added openMenu, closeMenu,
and menuTitle only in en-US and fr-FR. Mirror those keys
across the remaining compliance-portal catalogs.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 16:41:54 +02:00
Émile Ré
89b780c6aa Make compliance portal layout responsive
Add a burger drawer below md, fix document-flow
scrolling so PoweredBy sits after content, and
collapse home grids, list rows, toolbars, and
dialogs for smaller viewports. PDF viewer fits
width; updates skeleton mirrors stacked meta.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 16:39:46 +02:00
Émile Ré
9291cee2a0 Localize subscribe strings for new portal locales
Fill in user-menu and subscribe-dialog copy for the
locales added on main so missing keys do not fall back.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 15:54:35 +02:00
Émile Ré
e9542bc1a5 Harden subscribe resume and sign-out paths
Address PR review: avoid reintroducing cleared URL markers,
treat already-closed sessions as successful logout, and stop
stale subscribe/sign-out completions from racing the UI.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 15:52:10 +02:00
Émile Ré
855a486790 Wire subscribe-to-updates in compliance portal
Visitors can subscribe after sign-in via the Updates
CTA or user menu. Also add trust signOut so Log out
works from the menu.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 15:52:10 +02:00
Bryan Frimin
8d95c1d59a Add Simplified Chinese (zh-CN) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:40 +02:00
Bryan Frimin
dbcb47bd8f Add Ukrainian (uk-UA) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:40 +02:00
Bryan Frimin
cc7a5ce3e6 Add Turkish (tr-TR) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:39 +02:00
Bryan Frimin
97e34cabdd Add Portuguese (pt-PT) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:39 +02:00
Bryan Frimin
80bb03cee4 Add Polish (pl-PL) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:39 +02:00
Bryan Frimin
b49c64b180 Add Korean (ko-KR) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:38 +02:00
Bryan Frimin
fa9603d52e Add Japanese (ja-JP) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:38 +02:00
Bryan Frimin
720dc49be3 Add Italian (it-IT) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:38 +02:00
Bryan Frimin
f081c8fe70 Add Indonesian (id-ID) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:37 +02:00
Bryan Frimin
1774d29591 Add Spanish (es-ES) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:27 +02:00
Bryan Frimin
6ff2cf9946 Add German (de-DE) translation for compliance portal
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:27 +02:00
Bryan Frimin
c61ff9721e Register eleven new compliance-portal locales
Add German, Spanish, Indonesian, Italian, Japanese, Korean, Polish,
Portuguese, Turkish, Ukrainian, and Simplified Chinese to
SUPPORTED_LANGUAGES, and map each one's browser language-tag prefix to
its canonical locale in resolveLanguage() so i18next can be asked to
load it. Catalog JSON for these locales lands in the following
commits.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:15 +02:00
Bryan Frimin
177a5d0361 Rename trust center wording to compliance portal in copy
The English and French compliance-portal strings referred to "trust
center" in a few spots (back-navigation link, empty states) while the
rest of the app already calls this surface the "compliance portal".
Standardize on that term everywhere it appears in copy, and rename the
backing i18n key (backToTrustCenter -> backToCompliancePortal) to
match. Also fixes two spots where the French translation had left
"Compliance Portal" and "trust center" untranslated in English.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-20 15:48:02 +02:00
Émile Ré
776bec7ef8 Add bundling options to put base deps in specific chunks
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 14:53:59 +02:00
Émile Ré
a41aa3ce07 Restore gap above new-request footer
The form wrapper broke DialogPopup's column gap, so the
textarea sat flush against the actions. Match SignInForm.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 14:41:27 +02:00
Émile Ré
1c28f63555 Extract bordered list into UI List
Documents and data requests duplicated the same card and
row chrome. A shared List primitive keeps those surfaces
consistent across the portal.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 14:31:43 +02:00
Émile Ré
622f1ba67d Address PR review on data request pages
Require a verified viewer email before creating a rights request and
validate the free-text fields with the same SafeText bounds the console
uses, so this public portal mutation stays safe and bounded.

Move myRightsRequests onto the base Query, drop the now-dead count
loaders, and order the RECTIFICATION enum value before PORTABILITY so
the Postgres sort order matches RightsRequestTypes().

Harden the v2 kit primitives: SegmentedControl keeps equal-width cards
(auto-fill), preserves its selection when the active card is toggled,
and forwards an accessible name; Field associates its label and error
by id/aria instead of wrapping the control in a label. Give the type
group an accessible name, require the name field for non-complaint
types, use a timezone-stable reference year, drop the underreporting
header count, and neutralize the response-deadline copy.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 14:31:42 +02:00
Émile Ré
6623cbc6f2 Add data request pages to compliance portal
Let trust-portal data subjects submit and track GDPR/CCPA rights
requests. The new Data Requests page lists the viewer's own requests
and a dialog submits new ones, scoped server-side to the verified
viewer email so former or inactive users can still exercise their
rights. Submission requires magic-link sign-in (reusing the existing
gate) but not the NDA gate.

Extend the shared rights_request enums with RECTIFICATION, OBJECTION
and COMPLAINT types plus a REJECTED state, and keep the console
GraphQL, @probo/helpers and the MCP specification in sync. Expose a
trust GraphQL surface (myRightsRequests query, createRightsRequest
mutation) backed by a trust service and contact-scoped coredata
loaders.

Add the missing v2 UI kit primitives the dialog needs on top of Base
UI: a SegmentedControl radio-cards group, a form Textarea, and a
Field wrapper.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-20 14:31:42 +02:00
Cursor Agent
e5c7cf9b9c Rename Inherent to Initial in risk module UI
Several risk views already used "Initial" while others still showed
"Inherent". Align user-facing labels across the console, shared UI
components, CLI help, n8n fields, generated documents, and MCP
descriptions. API and database field names are unchanged.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-20 12:06:46 +02:00