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
dependabot[bot]
dcf3221bb9
Bump the npm-dependencies group with 28 updates
...
Bumps the npm-dependencies group with 28 updates:
| Package | From | To |
| --- | --- | --- |
| [eslint](https://github.com/eslint/eslint ) | `9.39.4` | `10.6.0` |
| [turbo](https://github.com/vercel/turborepo ) | `2.10.0` | `2.10.2` |
| [i18next](https://github.com/i18next/i18next ) | `26.3.3` | `26.3.4` |
| [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router ) | `8.0.1` | `8.1.0` |
| [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core ) | `7.29.7` | `8.0.1` |
| [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite ) | `4.3.1` | `4.3.2` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node ) | `24.13.2` | `26.1.0` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss ) | `4.3.1` | `4.3.2` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `8.1.0` | `8.1.2` |
| [react-dropzone](https://github.com/react-dropzone/react-dropzone ) | `14.4.1` | `15.0.0` |
| [zod](https://github.com/colinhacks/zod ) | `3.25.76` | `4.4.3` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint ) | `8.62.0` | `8.62.1` |
| [@n8n/node-cli](https://github.com/n8n-io/n8n ) | `0.37.1` | `0.37.2` |
| [marked](https://github.com/markedjs/marked ) | `15.0.12` | `18.0.5` |
| [@ariakit/react](https://github.com/ariakit/ariakit/tree/HEAD/packages/ariakit-react ) | `0.4.30` | `0.4.31` |
| [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog ) | `1.1.17` | `1.1.18` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu ) | `2.1.18` | `2.1.19` |
| [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label ) | `2.1.10` | `2.1.11` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover ) | `1.1.17` | `1.1.18` |
| [@radix-ui/react-portal](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/portal ) | `1.1.12` | `1.1.13` |
| [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area ) | `1.2.12` | `1.2.13` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select ) | `2.3.1` | `2.3.2` |
| [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs ) | `1.1.15` | `1.1.16` |
| [react-intersection-observer](https://github.com/thebuilder/react-intersection-observer ) | `9.16.0` | `10.0.3` |
| [@vitest/browser](https://github.com/vitest-dev/vitest/tree/HEAD/packages/browser ) | `4.1.8` | `4.1.9` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8 ) | `4.1.8` | `4.1.9` |
| [react-docgen](https://github.com/reactjs/react-docgen/tree/HEAD/packages/react-docgen ) | `7.1.1` | `8.0.3` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.396.1` | `1.396.4` |
Updates `eslint` from 9.39.4 to 10.6.0
- [Release notes](https://github.com/eslint/eslint/releases )
- [Commits](https://github.com/eslint/eslint/compare/v9.39.4...v10.6.0 )
Updates `turbo` from 2.10.0 to 2.10.2
- [Release notes](https://github.com/vercel/turborepo/releases )
- [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md )
- [Commits](https://github.com/vercel/turborepo/compare/v2.10.0...v2.10.2 )
Updates `i18next` from 26.3.3 to 26.3.4
- [Release notes](https://github.com/i18next/i18next/releases )
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md )
- [Commits](https://github.com/i18next/i18next/compare/v26.3.3...v26.3.4 )
Updates `react-router` from 8.0.1 to 8.1.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router@8.1.0/packages/react-router )
Updates `@babel/core` from 7.29.7 to 8.0.1
- [Release notes](https://github.com/babel/babel/releases )
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md )
- [Commits](https://github.com/babel/babel/commits/v8.0.1/packages/babel-core )
Updates `@tailwindcss/vite` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/@tailwindcss-vite )
Updates `@types/node` from 24.13.2 to 26.1.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node )
Updates `tailwindcss` from 4.3.1 to 4.3.2
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases )
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/tailwindcss )
Updates `vite` from 8.1.0 to 8.1.2
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v8.1.2/packages/vite )
Updates `react-dropzone` from 14.4.1 to 15.0.0
- [Release notes](https://github.com/react-dropzone/react-dropzone/releases )
- [Commits](https://github.com/react-dropzone/react-dropzone/compare/v14.4.1...v15.0.0 )
Updates `zod` from 3.25.76 to 4.4.3
- [Release notes](https://github.com/colinhacks/zod/releases )
- [Commits](https://github.com/colinhacks/zod/compare/v3.25.76...v4.4.3 )
Updates `typescript-eslint` from 8.62.0 to 8.62.1
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases )
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md )
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.62.1/packages/typescript-eslint )
Updates `@n8n/node-cli` from 0.37.1 to 0.37.2
- [Release notes](https://github.com/n8n-io/n8n/releases )
- [Commits](https://github.com/n8n-io/n8n/commits )
Updates `marked` from 15.0.12 to 18.0.5
- [Release notes](https://github.com/markedjs/marked/releases )
- [Commits](https://github.com/markedjs/marked/compare/v15.0.12...v18.0.5 )
Updates `@ariakit/react` from 0.4.30 to 0.4.31
- [Release notes](https://github.com/ariakit/ariakit/releases )
- [Changelog](https://github.com/ariakit/ariakit/blob/main/packages/ariakit-react/CHANGELOG.md )
- [Commits](https://github.com/ariakit/ariakit/commits/@ariakit/react@0.4.31/packages/ariakit-react )
Updates `@radix-ui/react-alert-dialog` from 1.1.17 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog )
Updates `@radix-ui/react-dropdown-menu` from 2.1.18 to 2.1.19
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu )
Updates `@radix-ui/react-label` from 2.1.10 to 2.1.11
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label )
Updates `@radix-ui/react-popover` from 1.1.17 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover )
Updates `@radix-ui/react-portal` from 1.1.12 to 1.1.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/portal/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/portal )
Updates `@radix-ui/react-scroll-area` from 1.2.12 to 1.2.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area )
Updates `@radix-ui/react-select` from 2.3.1 to 2.3.2
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select )
Updates `@radix-ui/react-tabs` from 1.1.15 to 1.1.16
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs )
Updates `react-intersection-observer` from 9.16.0 to 10.0.3
- [Release notes](https://github.com/thebuilder/react-intersection-observer/releases )
- [Commits](https://github.com/thebuilder/react-intersection-observer/compare/v9.16.0...v10.0.3 )
Updates `@vitest/browser` from 4.1.8 to 4.1.9
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/browser )
Updates `@vitest/coverage-v8` from 4.1.8 to 4.1.9
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/coverage-v8 )
Updates `react-docgen` from 7.1.1 to 8.0.3
- [Release notes](https://github.com/reactjs/react-docgen/releases )
- [Changelog](https://github.com/reactjs/react-docgen/blob/main/packages/react-docgen/CHANGELOG.md )
- [Commits](https://github.com/reactjs/react-docgen/commits/react-docgen@8.0.3/packages/react-docgen )
Updates `posthog-js` from 1.396.1 to 1.396.4
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.396.1...posthog-js@1.396.4 )
---
updated-dependencies:
- dependency-name: eslint
dependency-version: 10.6.0
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: turbo
dependency-version: 2.10.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: i18next
dependency-version: 26.3.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: react-router
dependency-version: 8.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: npm-dependencies
- dependency-name: "@babel/core"
dependency-version: 8.0.1
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: "@tailwindcss/vite"
dependency-version: 4.3.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@types/node"
dependency-version: 26.1.0
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: tailwindcss
dependency-version: 4.3.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: vite
dependency-version: 8.1.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: react-dropzone
dependency-version: 15.0.0
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: zod
dependency-version: 4.4.3
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: typescript-eslint
dependency-version: 8.62.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@n8n/node-cli"
dependency-version: 0.37.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: marked
dependency-version: 18.0.5
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: "@ariakit/react"
dependency-version: 0.4.31
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-alert-dialog"
dependency-version: 1.1.18
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-dropdown-menu"
dependency-version: 2.1.19
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-label"
dependency-version: 2.1.11
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-popover"
dependency-version: 1.1.18
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-portal"
dependency-version: 1.1.13
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-scroll-area"
dependency-version: 1.2.13
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-select"
dependency-version: 2.3.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@radix-ui/react-tabs"
dependency-version: 1.1.16
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: react-intersection-observer
dependency-version: 10.0.3
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: "@vitest/browser"
dependency-version: 4.1.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: "@vitest/coverage-v8"
dependency-version: 4.1.9
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: npm-dependencies
- dependency-name: react-docgen
dependency-version: 8.0.3
dependency-type: direct:development
update-type: version-update:semver-major
dependency-group: npm-dependencies
- dependency-name: posthog-js
dependency-version: 1.396.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: npm-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
Signed-off-by: Sacha Al Himdani <sacha@probo.com >
2026-07-02 19:16:47 +02:00
Émile Ré
f98b73f073
Upgrade frontend toolchain to latest majors
...
Bump React 19.2, Relay 21, React Router 8, Vite 8 with
@vitejs/plugin-react 6, ESLint 10, GraphQL 17, TypeScript 6,
@types/node 24, and Tailwind 4.3 across the workspaces.
vite-plugin-react 6 (Vite 8) no longer runs Babel, so the Relay
tagged-template transform now runs through @rolldown/plugin-babel
in the console and trust Vite configs.
Relay 21 ships first-party types and enables the ambiguous-alias
check by default; disable that flag to preserve existing queries
and add explicit usePreloadedQuery type arguments where the new
types no longer infer the operation. TypeScript 6 deprecations and
stricter inference are addressed in tsconfigs and call sites.
Keep n8n-node on ESLint 9 and eslint-plugin-react on 7.37.5, the
newest releases compatible with their toolchains.
Signed-off-by: Émile Ré <emile@probo.com >
2026-06-19 13:51:17 +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
Ludovic Vielle
dbfd191bc5
Add cache control to Files API static assets
...
Brand assets served at /api/files/v1/static had no cache headers.
Introduce brand.Assets to own the embedded filesystem, content-hash
ETags, and HTTP serving. Responses now carry Cache-Control and ETag
so clients can cache and revalidate; stable email URLs stay
revalidatable (max-age=3600, no immutable).
Replace hardcoded Default*Path constants with StaticPathPrefix,
logical filename constants, and StaticPath(). NewAssets validates
required assets at startup so a rename fails fast instead of 404ing
in sent emails. The files handler keeps routing and 404 rendering;
ServeAssets sets cache headers and serves the file.
Signed-off-by: Ludovic Vielle <ludovic@probo.com >
2026-06-12 17:24:00 +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
Ludovic Vielle
60435f277b
Serve brand assets as static files via /api/files/v1/static instead of S3
...
Signed-off-by: Ludovic Vielle <ludovic@probo.com >
2026-06-09 17:42:18 +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
Émile Ré
9156d6a16a
Add wsl linter and fix
...
Signed-off-by: Émile Ré <emile@probo.com >
2026-05-20 09:27:28 +04: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
8c02c53315
Update copyright headers across all Go files
...
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com >
2026-03-25 17:38:32 +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
Émile Ré
355e6b81b8
Add an account activation step in the signing request flow when needed
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-03-11 17:08:42 +04:00
Émile Ré
0a532f17c5
Remove legacy document signing endpoints
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-03-11 17:08:42 +04:00
Bryan Frimin
d4b3025463
Use go 1.26 syntax
...
Signed-off-by: Bryan Frimin <bryan@getprobo.com >
2026-03-06 15:00:42 +01:00
Bryan Frimin
54f80596b6
Set cache header
...
Signed-off-by: Bryan Frimin <bryan@getprobo.com >
2026-03-06 14:59:34 +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é
ab5fe8e5e2
Fix e2e tests
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-19 16:13:01 +04: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é
bb4721a691
Update some dependencies to get esbuild to use go 1.25.7
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-11 17:35:42 +04:00
Émile Ré
6965bd2f01
Fix react-email should be a dev dep
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-11 14:44:33 +04:00
Émile Ré
e094dc847b
Fix typo in function name + fix email render return values on error
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-05 12:56:23 +04:00
Émile Ré
f7936ff2c2
Rename parameter
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-05 12:44:01 +04:00
Émile Ré
6189a8ed81
Generate presigned URL for email assets at render time
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-05 12:41:35 +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é
ab9c0fb85f
Fix txt emails footers
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-02-02 13:32:59 +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é
6c7bcfb50a
Get rid of old trust-auth config
...
Signed-off-by: Émile Ré <emile@getprobo.com >
2026-01-17 12:36:47 -08: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é
8b3bda56e6
Add magic link login for trust center
...
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
Bryan Frimin
74fc3b8cd1
Rewrite identity and access management
...
Signed-off-by: Bryan Frimin <bryan@getprobo.com >
2026-01-17 10:07:34 -08:00
Sacha Al Himdani
ad26510a52
Update react-email preview-server
...
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com >
2025-12-31 14:40:52 +01: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é
1ed291aa0e
Fix cubic review
...
Signed-off-by: Émile Ré <nemile.re@gmail.com >
2025-12-11 16:24:36 +01:00
Émile Ré
4638685b89
Fix reject email subject
...
Signed-off-by: Émile Ré <nemile.re@gmail.com >
2025-12-11 16:24:34 +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
Bryan Frimin
896e6e0736
Refactor hostname to become baseurl
...
Signed-off-by: Bryan Frimin <bryan@getprobo.com >
2025-10-30 19:41:15 +01:00
Bryan Frimin
6f2bd9c92f
Fix failed to to cannot
...
Signed-off-by: Bryan Frimin <bryan@getprobo.com >
2025-10-30 16:38:08 +01:00