Diamond2-TEP-Uploader Svelte Themes

Diamond2 Tep Uploader

Client-side XLSX→XML→S3 uploader for TEP (The Everyone Project). Built with Svelte 5 + Vite.

TEP Uploader

A browser-based tool that converts publication data from XLSX spreadsheets into XML files and uploads them to an Amazon S3 bucket for ingestion by TEP (The Everyone Project).

Runs entirely client-side — no server component, no data passes through any intermediate server. The compiled output is plain static HTML/CSS/JS that can be hosted anywhere or opened directly from the filesystem.

Live demo →

Documentation

Document Audience Description
docs/README_user.md End users How to configure the app, upload a spreadsheet, interpret validation errors, and understand the results screen
docs/README_technical.md Developers / maintainers Architecture, data flow, field schema, XML output format, localStorage keys, S3 structure, debug mode

Repository Layout

TEPUploader/
│
├── README.md                   ← this file
├── CLAUDE.md                   ← guidance for AI coding assistants
├── package.json                ← npm dependencies and build scripts
├── vite.config.js              ← Vite build configuration
├── svelte.config.js            ← Svelte compiler configuration
├── jsconfig.json               ← editor path aliases
├── .nvmrc                      ← pins Node.js version (24) for nvm users
├── index.html                  ← single HTML entry point
│
├── docs/
│   ├── README_user.md          ← end-user guide
│   ├── README_technical.md     ← technical / developer reference
│   └── samples/
│       ├── generate_sample_xlsx.py   ← script to regenerate the sample spreadsheet
│       ├── sample_input.xlsx         ← sample input spreadsheet (5 rows, inc. one bad row)
│       ├── sample_broadcast.xml      ← example XML output for a broadcast row
│       └── sample_ondemand.xml       ← example XML output for an on-demand row
│
├── src/
│   ├── main.js                 ← application entry point (mounts Svelte root)
│   ├── app.css                 ← global design system (CSS variables, layout, components)
│   ├── config.js               ← COLUMN_CONFIG field schema + RECORD_VALIDATOR
│   ├── stores.js               ← all shared Svelte state (writable stores)
│   │
│   ├── App.svelte              ← root shell: nav bar, section routing, step routing
│   │
│   ├── components/
│   │   ├── StepIndicator.svelte    ← progress bar shown above every wizard step
│   │   ├── Settings.svelte         ← AWS credentials modal
│   │   └── ErrorReview.svelte      ← TEP error review tab (placeholder — future)
│   │
│   ├── steps/                  ← one component per wizard step, in order:
│   │   ├── FileSelection.svelte        ← step 1: pick an XLSX file
│   │   ├── SheetSelection.svelte       ← step 2: choose a sheet (multi-sheet workbooks)
│   │   ├── ColumnMappingReview.svelte  ← step 3: verify/correct column→field mappings
│   │   ├── ValidationReport.svelte     ← step 4: review rows that failed validation
│   │   ├── UploadProgress.svelte       ← step 5: upload loop with progress bar
│   │   └── ResultsSummary.svelte       ← step 6: final counts and retry/start-over
│   │
│   └── lib/                    ← pure logic modules (no Svelte, independently testable)
│       ├── spreadsheet.js      ← XLSX adapter (ExcelJS); swap library here only
│       ├── mapping.js          ← header-row detection + column auto-mapping
│       ├── pipeline.js         ← orchestrates lib calls and writes to stores
│       ├── validation.js       ← field-level and record-level validation
│       ├── xml.js              ← DOM-based XML generation + debug preview
│       ├── dedupe.js           ← SHA-256 hashing + local hash cache
│       ├── s3.js               ← all S3 operations (upload, remote dedup check)
│       ├── learnedAliases.js   ← persist user-confirmed column mappings to localStorage
│       └── debug.js            ← log() utility, activated by ?debug=true
│
└── dist/                       ← compiled output (generated by `npm run build`)

Development

nvm use          # switch to Node 24 (requires nvm)
npm install      # install dependencies
npm run dev      # start dev server at http://localhost:5173
npm run build    # build to dist/

Append ?debug=true to the dev URL to enable verbose console logging and an XML preview screen before any upload.

Sample Files

docs/samples/ contains a ready-to-use sample spreadsheet and XML files for testing. To regenerate the spreadsheet:

python3 docs/samples/generate_sample_xlsx.py

Requires Python 3 and openpyxl (pip install openpyxl).

Top categories

Loading Svelte Themes