Commit Graph

28 Commits

Author SHA1 Message Date
Bryan Frimin
bb2f55574f Rename shared packages for portal
Move helpers, emails, and coredata exports to
Compliance Portal names so frontend apps and
workers share one vocabulary.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:25 +02:00
Sacha Al Himdani
4c57d201a4 Make license declarations consistently MIT
The source headers, LICENSE files, and license metadata had drifted
apart. Align the entire project to MIT:

- Convert every source-file header to the MIT text across all comment
  styles (Go, TS, TSX, JS, MJS, SQL, CSS, GraphQL, shell), including
  SPDX-License-Identifier tags
- Set the root and cookie-banner LICENSE files to the MIT text with a
  "MIT License" title line
- Switch the package.json license fields, Docker image label, and
  cookie-banner README to MIT
- Update docs and the genmodels header generator accordingly
- Normalize copyright lines to a single format
  (Copyright (c) <year(s)> Probo Inc <hello@probo.com>.): unify the
  hello@getprobo.com and hello@probo.inc emails to hello@probo.com and
  the comma-separated years to a hyphenated range

Genuine third-party references are intentionally left untouched: the
Lucide icon attributions (Lucide is ISC) and the trivy dependency
license allowlist.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-13 16:21:14 +02:00
Sacha Al Himdani
f462b124e6 Batch signature and approval notifications via debounced worker
Replace the immediate per-document approval email and the manual
"send signing notifications" action with a single debounced worker that
batches pending requests per recipient and organization.

The worker (go.gearno.de/kit/worker) polls on an interval (default 5m)
and claims one (organization, recipient) group at a time, sending one
consolidated signing email and/or one approval email per recipient/org
that lists every document awaiting their signature or approval. The
claim is a conditional UPDATE that doubles as concurrency-safe dedup, so
several workers never email the same group twice.

Each request is notified once it has been pending past the debounce
delay (default 15m), then reminded at 1x, 2x and 3x the reminder
interval (default 1 day) after the previous email, after which it stops.
New last_notified_at and notification_count columns on signatures and
approval decisions drive the debounce, the widening reminder cadence and
the four-email cap.

Email copy lists each document with its title, type and a deep link to
the employee page. Removed the inline approval-on-publish email, the
SendSigningNotifications service method/mutation/MCP tool, its IAM action,
and the related console UI and n8n operation.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-06-18 15:39:04 +02:00
Sacha Al Himdani
127b78cace Migrate emails to the unified react-email package
Replace the deprecated @react-email/components dependency (and its
deprecated sub-packages) with the unified react-email package per the
React Email 6 migration, updating all component and render imports across
the email templates from "@react-email/components" to "react-email".

This removes the npm deprecation warnings emitted by the old
@react-email/* packages while keeping the template build output
unchanged.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-06-17 17:41:46 +02:00
Sacha Al Himdani
c7e2fc209f Use probo.com for bare and marketing domain references
Replace the bare `getprobo.com` domain and the `www.getprobo.com`
marketing host with `probo.com` / `www.probo.com` across the codebase.
Functional subdomains (app, console, notification, custom, test,
cookie-banner, compliance) keep their existing `getprobo.com` hosts,
and changelog entries are left untouched.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-06-11 13:46:10 +02:00
Sacha Al Himdani
9ac71f948f Update contact email to hello@probo.com
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-06-09 16:45:23 +02:00
Bryan Frimin
11d6f8606c Make magic link expiry warning more visible
Users were missing the expiry notice and hitting link errors. Replace the
small gray footer text with a prominent yellow callout box in the HTML
email, and prefix the plain-text version with IMPORTANT.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-05 14:33:10 +02:00
Sacha Al Himdani
6948a6b9ab Tailor signature certificate email copy for approvals
Store the per-signature email subject as text on the electronic_signatures
row at creation time, mirroring the consent_text pattern. The document
approval service sets "Your approved <Title> - Certificate of Completion";
other callers default to "Your signed <Name> - Certificate of Completion".
The certificate worker uses signature.email_subject as the email subject,
falling back to the default format when the column is empty.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-21 14:49:19 +02:00
Sacha Al Himdani
ee22e9f964 Address CodeQL findings: unused imports, missing semicolons, dead conditionals
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-12 14:09:35 +02:00
Sacha Al Himdani
851e585b9b Add ISC license headers to Go, TypeScript, and SQL files
Add ISC license headers to all .go, .ts, .tsx, and .sql files
using each file's git history to determine the correct copyright
year or year range. Trademarked icons (brand logos, vendor logos,
compliance framework logos) are excluded.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-31 13:31:30 +02:00
Sacha Al Himdani
999171a626 Add document approval workflow
Introduce a complete approval system for document publishing. Document
versions can now require approval from selected reviewers before being
published, with automatic publishing once all approvers have approved.

- Add approval quorum and decision tables with backfill migration
- Implement request approval, approve, and reject flows with electronic
  signature support for approve decisions
- Add employee approvals page with dedicated tab and pending approvals view
- Add changelog field to publish and request approval flows
- Pre-select previous version's approvers in the publish dialog
- Show quorum approvers in document list with 100 approver hard limit
- Expose approval workflow through GraphQL, MCP, and CLI
- Remove legacy default approvers feature entirely
- Add comprehensive e2e test coverage for approval workflows

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-27 19:43:20 +01:00
Sacha Al Himdani
85ec106cd6 Send mailing list emails
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 15:34:37 +01:00
Bryan Frimin
c191d25e9a Add electronic signature
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:27 +01:00
Émile Ré
5ab5d2cc4c Implement activate account page
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:58 +04:00
Émile Ré
27821632c6 Serve email static assets from object store
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-04 18:32:52 +04:00
Émile Ré
cdf70f3cac Add powered by Probo in email footer
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:59 +04:00
Émile Ré
926d008c60 Fix email url paths
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:59 +04:00
Émile Ré
d9c07ecdef Fix bot review
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:58 +04:00
Émile Ré
e13ff134ed Extract email presentation configuration layer to streamline email branding
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:57 +04:00
Émile Ré
73ec5ce96b Rename trust center to compliance page in displayed text
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-29 08:41:18 +04:00
Émile Ré
44d85a2b12 Trust center access management - get rid of access token
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-17 12:34:24 -08:00
Émile Ré
7322201dab Plug trust center part 1
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-17 12:34:23 -08:00
Émile Ré
df9a425452 Fixes
Signed-off-by: Émile Ré <nemile.re@gmail.com>
2025-12-11 16:24:36 +01:00
Émile Ré
5c41a5bdb1 Review fixes
Signed-off-by: Émile Ré <nemile.re@gmail.com>
2025-12-11 16:24:36 +01:00
Émile Ré
c8471cd48d Add reject button + email on trust center access request
Signed-off-by: Émile Ré <nemile.re@gmail.com>
2025-12-11 16:24:34 +01:00
Sacha Al Himdani
1f0a5dff5c Redesign trust center console
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-10-28 16:42:56 +01:00
Sacha Al Himdani
87ac7485f3 Use link to png logo in emails
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-10-15 18:53:23 +02:00
Sacha Al Himdani
ae45410b82 Use html in emails
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-10-15 17:55:36 +02:00