Skip to content

FreeEed Viewer — app-side implementation (viewer mode + bundle export + notes sync-back) #70

Description

@markkerzner

FreeEed Viewer — app-side implementation (FreeEedUI)

The FreeEed Viewer is this FreeEedUI web app with viewer-mode changes, shipped as a portable packaged web app (thumb drive, per-OS launcher / Windows .exe, no install, offline). The cross-cutting tracker, lifecycle, and all settled decisions live in shmsoft/FreeEed#553 (use case: shmsoft/FreeEed#550). This issue is the app-side work in this repo. The packaging/distribution (building the per-OS Viewer pack) is FreeEed release tooling — tracked on shmsoft/FreeEed#553 slice 5, not here.

Viewer mode = read-only review: search + document display + add/edit notes. No processing, no tagging/redaction authoring. It loads a finished production (created here per #61, ESI format shmsoft/FreeEed#551) and its notes sync back into the review case DB.

Settled decisions (from shmsoft/FreeEed#553)

  • Same FreeEedUI codebase, viewer-mode changes (not a separate build, not the Swing app).
  • Packaged portable web app on a thumb drive — bundled Tomcat + Solr + JRE + viewer-mode war + index, launched by a per-OS .exe; no install, offline. (Packaging itself is FreeEed-side; this repo provides the viewer-mode app + bundle export/import.)
  • Search: bundled Solr (reuse the complete-pack stack; no embedded Lucene).
  • Production engine reused from FreeEed, driven from here (Production: produce a court-ready ESI production from review (tag → Bates → images/text/natives → load files) #61).
  • Activation (Build a relationship with our users: free registration, feedback, and updates (not licensing) FreeEed#549): inherited-activation stamp — export writes the producer's registered email + activation key into manifest.json; viewer mode never prompts and verifies that stamp offline via the verify-only Activation.isValid (port the small Ed25519 verify class into FreeEedUI).
  • Sync-back conflict policy: non-destructive append/union — never silent overwrite; idempotent by noteId; true divergences flagged for manual resolution; all imports audit-logged.

Notes overlay schema (foundation — build first)

A note is an attributed/timestamped record, not a single mutable field:

(noteId, bates, caseId, author, source[viewer|review], createdAt, text, supersedesId?)

Work items

  1. Viewer mode — a mode flag on the web app: read-only (disable processing + tagging/redaction authoring), expose search + display + notes. Never prompts for activation; verifies the manifest stamp offline.
  2. Export a Viewer bundle — produced set (Production: produce a court-ready ESI production from review (tag → Bates → images/text/natives → load files) #61 / Implement standard eDiscovery (ESI) production format (TIFF + text + metadata + load files) FreeEed#551) + notes overlay + manifest.json (schema version + caseId + producer activation stamp) + search index.
  3. Notes overlay (authoring) — add/edit notes in viewer mode, persisted as note records (schema above); production immutable.
  4. Sync-back — "Import Viewer notes": union a returned overlay into the review case DB by noteId — idempotent, multi-source merge, manual resolution for true conflicts, import audit log.

Acceptance

  • Web app runs in a read-only viewer mode (search + display + notes; no processing/authoring)
  • Export produces a self-contained Viewer bundle (produced set + notes overlay + manifest with activation stamp + index)
  • User can add/edit notes, persisted as attributed/timestamped note records (production immutable)
  • "Import Viewer notes" unions a returned overlay into the review case DB — idempotent, multi-source, manual conflict resolution, with an audit log
  • Viewer mode does not prompt for registration/activation; verifies the manifest stamp offline
  • No outbound calls; works offline

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions