You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(editor): v1.20.0 — Fill & Sign mode with reusable account signatures
Adobe-style Fill & Sign: a toolbar button puts the document in fill mode (form
fields clickable, forms panel -> fill), and a capture dialog inserts a signature
or initials created by Draw (freehand, ink-trimmed), Type (handwriting font) or
Upload, dropped as a movable image element (existing addImage path). Signatures
can be saved to the account once and reused in one click.
Backend (built + adversarially reviewed via workflow):
- Prisma model UserSignature (user_signatures, additive; no FK/relation so
`prisma db push` stays non-breaking on the shared Alembic DB).
- /api/user/signatures GET/POST/DELETE, all requireSession() + ownership-scoped
(GET where userId; DELETE deleteMany{id,userId}) => no IDOR. Validation: base64
raster png/jpeg/webp only, decoded <=1.5MB + Content-Length pre-check <=3MB,
dims positive int <=4000. Resilient to the not-yet-created table (P2021 ->
GET []/POST 503). dataUrl never logged. 20 vitest cases.
Integration: Tool union += 'fill_sign'; toolbar buttons (Fill & Sign + Insert
signature) + i18n fr/en; page.tsx wiring (fill mode + placement + save).
NOTE: account-save needs a one-time additive `prisma db push` on the server to
create user_signatures; until then sign+insert works and saving degrades gracefully.
Copy file name to clipboardExpand all lines: apps/web/src/app/(site)/[locale]/(legal)/changelog/changelog-content.tsx
+10Lines changed: 10 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,16 @@ interface ChangelogEntry {
14
14
}
15
15
16
16
constchangelog: ChangelogEntry[]=[
17
+
{
18
+
version: "1.20.0",
19
+
date: "2026-07-02",
20
+
type: "minor",
21
+
changes: [
22
+
{type: "feature",description: "Fill & Sign mode (Adobe-style): a new toolbar button puts the document in fill mode — form fields become clickable — so you can complete a form in place."},
23
+
{type: "feature",description: "Insert a signature or initials from a capture dialog with three ways to create one: Draw (freehand, trimmed to the ink), Type (a handwriting font), or Upload an image. It drops onto the page as a movable, resizable stamp."},
24
+
{type: "feature",description: "Save signatures to your account once: a saved signature or initials reappears in the dialog for one-click reuse on any future document, and can be deleted. Stored per user, isolated from other accounts, image validated and never logged."},
0 commit comments