Handover workspace

ERS, Todo, OfferReview, and Docu in one view

Imported from live server docs, code structure, and deployment notes.

Apr 3, 2026, 12:38 PM

DocuHandshake

Reza DocuHandshake — Project Overview

Reza DocuHandshake is a private, two-sided document-signing system.

01_PROJECT_OVERVIEW.md

Updated Apr 1, 2026, 4:28 AM

Reza DocuHandshake — Project Overview

What This System Does

Reza DocuHandshake is a private, two-sided document-signing system.

External parties upload PDF documents for Reza F. Razali to review and digitally sign. Once a document is signed, the signed PDF is stored on the server filesystem and emailed back to the original sender.

The system has two distinct sides:

SideURLWho Uses It
User Portalhttps://docu.r32a.com/Anyone sending a document
Admin Panelhttps://docu.r32a.com/adminReza only

Current Architecture

LayerTechnology
FrontendReact 18, TypeScript, Vite, Tailwind CSS
RoutingReact Router DOM v6
BackendNode.js Express API
DatabasePostgreSQL
AuthMagic-link email + JWT session cookie
File storageServer filesystem under configurable STORAGE_ROOT
PDF previewreact-pdf
PDF signingpdf-lib in the browser
EmailResend API
AI analysisOpenAI gpt-4o-mini

System Boundaries

  • The authoritative backend is the Express app in server/.
  • Frontend state and admin signing UI live in src/.
  • Uploaded and signed files are stored on disk, not in object storage.
  • PostgreSQL stores document metadata, audit entries, and magic-link tokens.
  • PDF modification happens client-side in the browser, then the finished PDF is uploaded back to the server.
  • Email sending is handled by backend routes through Resend.
  • Admin access is currently protected by an admin password checked in both the frontend and backend.

Current Status Model

The documents.status column currently supports:

  • pending for newly uploaded documents
  • signed for successfully signed documents
  • completed for closed-out documents that are no longer actionable

In the current UI, rejected documents are marked as completed and their rejection state is recorded through the audit trail plus rejection email, not through a dedicated rejected document status.