Files
pdf/feature_inventory.md
T
2026-07-01 15:05:37 +05:30

6.8 KiB

DocQube (PDF Engine) Feature Inventory

STEP 1 — SCOPE

  • Product Name: DocQube (Internal project name: "PDF Engine")
  • Tech Stack:
    • Frontend: React (TSX), Vite, Tailwind CSS, custom PDF viewer components (no off-the-shelf PDF.js renderer wrapper).
    • Backend: FastAPI (Python), interacting with a custom C++ PDF engine via Python bindings (WASM/C++ bridge).
  • Structure: Monorepo containing a frontend and gateway directory. Auditing the entire cohesive product (the web-based PDF editor).

STEP 2 & 3 — VERIFIED INVENTORY

Feature Name What it does Build Status Evidence Demoable end-to-end? Gating / dependencies Docs mismatch Assessment confidence
Document Upload & Open Allows users to upload a local PDF file into the web editor. LIVE App.tsx (handleUpload), crud.py (upload_document) Yes Requires backend engine None High, core flow fully wired.
Password Protected PDFs Prompts for a password when attempting to open an encrypted PDF document. LIVE PasswordModal.tsx, App.tsx (passwordPrompt), crud.py catches "Password required" Yes None None High, error handling and UI modal exist.
Document Export / Save Downloads the modified PDF document back to the user's device. LIVE App.tsx (handleExport), edits.py (save_full / save_incremental) Yes None None High, backend saving mechanisms are implemented.
Print Document Prints the current state of the document using the browser's native print dialog. LIVE App.tsx (handlePrint), creates hidden iframe Yes None None High, standard browser API implementation.
Text Search Searches the document for specific text (supports case-sensitive and whole-word modes). LIVE App.tsx (searchQuery), content.py (search_document), SearchOverlayLayer.tsx Yes None None High, search API and UI overlay implemented.
Undo / Redo Reverts or reapplies recent edits and annotations. LIVE App.tsx (hist.stack), relies on immutable document IDs Yes None None High, tracks document versions gracefully.
Page Rotation Rotates a specific page by 90 degrees. LIVE App.tsx (handleRotate), edits.py (PageRotationOperation) Yes Requires canAssemble permission None High.
Page Deletion Removes a specific page from the document. LIVE App.tsx (handleDeletePage), edits.py (PageDeletionOperation) Yes Requires canAssemble permission None High.
Page Reordering Moves a page to a new index within the document. LIVE App.tsx (handleReorderPage), edits.py (PageReorderOperation) Yes Requires canAssemble permission None High.
Highlight Annotation Draws a colored, semi-transparent highlight over selected text. LIVE PDFViewer.tsx (handleTextSelection), edits.py (HighlightOperation) Yes Requires canAnnotate permission None High.
Text Decorations Applies underline, strikeout, or squiggly lines to selected text. LIVE App.tsx (handleDecorateText), edits.py (UnderlineOperation etc.) Yes Requires canAnnotate permission None High.
Freehand Drawing (Ink) Allows freehand drawing with adjustable color and thickness. LIVE Toolbar.tsx (draw tool), edits.py (FreehandOperation) Yes Requires canAnnotate permission None High.
Sticky Notes / Comments Places a clickable comment icon with an author and text content. LIVE App.tsx (handleAnnotationAdded), edits.py (CommentOperation) Yes Requires canAnnotate permission None High.
Text Box (Free Text) Overlays custom text with adjustable font size and color anywhere on the page. LIVE App.tsx (handlePlaceText), edits.py (TextOverlayOperation) Yes Requires canAnnotate permission None High.
Stamps Places pre-configured text stamps (e.g., "APPROVED") with bold styling. LIVE Toolbar.tsx (STAMP_PRESETS), App.tsx (handlePlaceStamp) Yes Requires canAnnotate permission None High, reuses TextOverlay under the hood.
Visual Signatures Allows users to create (draw, type, upload) and place a visual signature. LIVE SignatureModal.tsx, App.tsx (handlePlaceSignature), edits.py (ImageOverlayOperation) Yes Requires canAnnotate permission None High, includes base64 image processing in backend.
Permanent Redaction Blacks out areas and permanently removes underlying text, images, and vectors. LIVE App.tsx (handleMarkRedaction, handleApplyRedactions), edits.py (RedactionOperation) Yes Requires canModify permission None High, recently updated to support hover preview and batch apply.
Form Filling Allows users to fill out interactive PDF form fields. LIVE PDFViewer.tsx (onFieldChange), edits.py (UpdateFieldOperation) Yes Requires canFillForms permission None High.
Paragraph Text Editing Click to edit existing PDF text with automatic paragraph reflow and justification. LIVE Toolbar.tsx (edit_text), edits.py (ReflowParagraphOperation / ReplaceTextOperation) Yes Requires canModify permission None High, complex reflow logic wired to backend.
Stream / Raw Text Edit Advanced byte-level surgical text editing without reflow. IN-DEV Toolbar.tsx (labeled as "Beta"), StreamEditLayer.tsx Yes None None High, explicitly marked as Beta in the UI.
Document Inspector Side panel showing pages, outline/bookmarks, annotations list, document metadata, and fonts. LIVE InspectorPanel.tsx, content.py (get_document_annotations, get_page_model) Yes None None High.

A) Docs/marketing claims NOT supported by code

No significant README.md marketing claims were evaluated since none were present in the immediate workspace, but within the code, the "Signature" tool clearly flags itself as "Visual signature — not certified" (Toolbar.tsx:145). If marketing claims "digital signatures" or "cryptographic signing", the code does not support it.

B) Open questions for the team

  1. Stream Edit (Beta): The stream_edit tool is explicitly marked as beta for "surgical byte-level edit". Is this intended to be promoted to sales, or kept as a power-user/developer toggle?
  2. Signature Storage: Signatures are maintained in local state (pendingSignature). If a user refreshes the page, they must recreate their signature. Are there plans to persist visual signatures to a user profile?
  3. Collaboration: The architecture passes an author string to annotations, but there is no apparent multiplayer or auth/login system wired up in the immediate frontend logic (the default author is hardcoded to 'Current User' in PDFViewer.tsx:325). Does sales intend to sell this as a collaborative tool?