@@ -34,9 +34,10 @@ Everything lives under `packages/`:
3434
3535### Transform system
3636
37- - ` packages/types ` : shared transformation type contracts (input/output formats)
37+ - ` packages/types ` : shared transformation type contracts (input/output formats, storage interfaces )
3838- ` packages/schemas ` : PIE schema/validation assets
3939- ` packages/core ` : transform engine + plugin registry (format orchestration)
40+ - ` packages/storage ` : pluggable storage backends (filesystem, S3, database)
4041- ` packages/qti2-to-pie ` : QTI → PIE transform plugin (plus vendor extension hooks)
4142- ` packages/pie-to-qti2 ` : PIE → QTI transform plugin (generator registry + packaging)
4243
@@ -432,11 +433,37 @@ Key reference:
432433
433434The transform app is a SvelteKit web UI that wires together:
434435
435- - upload and extraction (sessionized filesystem storage),
436+ - upload and extraction (pluggable storage backend with session management ),
436437- analysis (discover items/tests, count interactions, record issues),
437438- transformation (batch convert to PIE),
438439- preview (QTI player preview and PIE player preview side-by-side).
439440
441+ ### Storage architecture
442+
443+ The transform app uses a ** pluggable storage system** (` @pie-qti/storage ` ) that abstracts storage backends:
444+
445+ - ** Default** : Filesystem backend (stores sessions in ` ./uploads/sessions/ ` )
446+ - ** Optional** : S3, database, or custom backends via configuration
447+
448+ Sessions are stored with separate metadata files:
449+
450+ - ` metadata.json ` - Core session state (id, status, timestamps)
451+ - ` analysis.json ` - Analysis results (packages, items, interactions)
452+ - ` transformation.json ` - Transform results (items, assessments, errors)
453+
454+ This separation enables:
455+
456+ - Independent loading of analysis/transformation data
457+ - Efficient storage backends (only fetch what's needed)
458+ - Clear data ownership and versioning
459+
460+ Key references:
461+
462+ - Storage types: ` packages/types/src/storage/index.ts `
463+ - Storage package: ` packages/storage/src/ `
464+ - App storage wrapper: ` packages/transform-app/src/lib/server/storage/app-session-storage.ts `
465+ - Configuration: ` docs/CONFIGURATION.md `
466+
440467### Server-side flow (sessioned)
441468
4424691 ) ** Upload** : ` POST /api/upload ` stores ZIP(s) in a new session
0 commit comments