7.3 KiB
Check List Initial Solution Proposal
1. Recommended Starting Point
The strongest initial implementation is an offline-first web application with a thin server-backed configuration layer.
This matches the source document's core constraint set:
- reports must work without permanent internet access,
- templates must be centrally controlled,
- final output remains file-based,
- the architecture must be extendable toward future synchronization.
2. Proposed Architecture
Client application
Build a responsive Progressive Web App using:
- React
- TypeScript
- IndexedDB for offline persistence
- a service worker for application asset caching
- browser-based image processing using Canvas or createImageBitmap
- XLSX generation library
- ZIP generation library
Main client modules:
- template cache module
- dynamic form renderer
- report draft repository
- image processing pipeline
- validation engine
- Excel export mapper
- ZIP packaging module
- sync-ready integration layer placeholder
Server application
Build a small REST API using:
- Node.js
- Express or Fastify
- MariaDB
Main server responsibilities:
- template CRUD
- template versioning
- lookup management
- validation rule delivery
- image rule delivery
- export configuration delivery
- optional authentication later
The server should not accept completed reports in phase 1.
3. Why This Design Fits
This design solves the main business problems without introducing early complexity:
- central governance is handled by the backend,
- offline draft work is handled entirely on the client,
- images are optimized before storage/export,
- ZIP export preserves compatibility with the current file-based process,
- future synchronization can be added without replacing the client-side report model.
4. Initial Technical Blueprint
Frontend structure
Suggested feature-oriented structure:
src/
app/
features/templates/
features/reports/
features/images/
features/export/
features/validation/
features/dashboard/
shared/ui/
shared/lib/
shared/storage/
shared/api/
Key implementation decisions:
- use template-driven rendering instead of hardcoded forms,
- keep report state normalized by report ID,
- store attachments separately from answer objects in IndexedDB,
- version templates immutably once published,
- separate draft validation from export validation.
Backend structure
Suggested backend domains:
- templates
- templateVersions
- fields
- lookups
- validationRules
- imageRules
- exportSettings
Recommended principle: the API should deliver a fully materialized template definition for a chosen version so the client can render forms without additional server joins during report editing.
5. Minimal Phase 1 Data Model
Server-side entities
Recommended MariaDB tables:
- templates
- template_versions
- template_sections
- template_fields
- field_validation_rules
- lookup_sets
- lookup_values
- image_rules
- export_profiles
Important rules:
- only one active version per template for new report creation,
- old versions remain readable for existing drafts,
- template JSON snapshots can be generated and cached for fast client download.
Client-side entities
Recommended IndexedDB stores:
- templatesCache
- reports
- reportAnswers
- attachments
- appConfig
Example report aggregate:
{
"id": "local-report-uuid",
"reportNumber": "QC-2026-0001",
"templateId": "incoming-inspection",
"templateVersion": 3,
"status": "in_progress",
"header": {
"supplier": "ACME",
"inspectionDate": "2026-04-09"
},
"createdAt": "2026-04-09T09:00:00Z",
"updatedAt": "2026-04-09T10:15:00Z"
}
Example attachment metadata:
{
"id": "attachment-uuid",
"reportId": "local-report-uuid",
"fieldId": "damage-photo",
"originalFilename": "IMG_0412.jpg",
"generatedFilename": "QC-2026-0001_SEC01_001.jpg",
"mimeType": "image/jpeg",
"width": 1600,
"height": 1200,
"sizeBytes": 245312
}
6. Recommended API Surface
Initial REST endpoints:
GET /api/templatesGET /api/templates/:templateIdGET /api/templates/:templateId/versions/:versionGET /api/lookupsGET /api/config/image-rulesGET /api/config/exportGET /api/app-config
Optional later endpoints:
POST /api/auth/loginPOST /api/report-uploads
API response strategy:
- return explicit version metadata with every template,
- include cache timestamps or ETags,
- support incremental refresh later if template volume grows.
7. Core User Flow
Phase 1 flow should be:
- User opens the app online.
- App downloads active templates and configuration.
- Data is cached locally.
- User creates or resumes a report.
- Report is auto-saved into IndexedDB.
- Images are validated, optimized, renamed, and stored locally.
- User marks the report ready for export.
- Full validation runs.
- App generates XLSX.
- App packages XLSX and images into a ZIP and downloads it locally.
8. Delivery Plan
Iteration 1
- define template JSON contract,
- define MariaDB schema,
- implement template read API,
- build application shell and offline cache,
- build report dashboard and draft persistence.
Iteration 2
- implement dynamic checklist renderer,
- implement draft save and resume,
- implement report switching and status management,
- implement export-readiness validation.
Iteration 3
- implement image attach, preview, compression, and renaming,
- implement XLSX mapping,
- implement ZIP export,
- run pilot tests on Windows, Android, and iOS.
Iteration 4
- harden error handling,
- tune storage usage,
- add admin-facing template maintenance workflow,
- prepare phase 2 synchronization extension points.
9. Open Gaps That Still Need Definition
The source document is strong at the concept level, but these items still need explicit specification before implementation starts:
- exact template JSON schema,
- exact report numbering strategy,
- exact Excel layout and formatting rules,
- rule language for conditional validation,
- whether PWA installation is required or optional,
- retention and deletion rules for local drafts,
- browser support baseline and test matrix,
- authentication requirements for template administration.
10. Main Risks and Mitigations
Risk: local draft loss
Mitigation: auto-save, visible save state, export reminders, later import/export backup feature.
Risk: storage pressure from images
Mitigation: enforce compression rules, cap attachment count where needed, show storage usage warnings.
Risk: template drift
Mitigation: immutable template versions and version-bound drafts.
Risk: export mismatch with current Excel expectations
Mitigation: validate the XLSX output format early using sample reports before full UI completion.
11. Final Recommendation
Proceed with a phase 1 implementation based on:
- React + TypeScript PWA frontend,
- IndexedDB local persistence,
- Node.js REST backend,
- MariaDB template repository,
- local XLSX and ZIP export.
This is the lowest-risk path that still satisfies the documented requirements and preserves a clean path to later server-side synchronization.
12. Best Immediate Next Steps
The next concrete deliverables should be:
- template JSON schema,
- MariaDB schema draft,
- API contract draft,
- report and attachment IndexedDB schema,
- one sample export template in XLSX format,
- a first implementation backlog split into frontend and backend work items.