A static, client-side web app that converts archival Excel spreadsheets into EAD XML, entirely in the browser.
This tool replaces existing Python scripts and setup instructions with a single, zero-install interface, while preserving the same archival logic and output structure.
The original Excel → EAD workflow required:
- Installing Python
- Installing multiple packages
- Editing and running scripts
- Understanding command-line output
This app provides the same conversion capability, but:
- Runs fully in the browser
- Requires no Python or dependencies
- Makes archival structure decisions explicit
- Reports warnings clearly instead of failing silently
It is designed for archivists and non-developers, not just programmers.
-
Accepts an
.xlsxExcel file via drag & drop -
Parses and validates archival description data
-
Allows the user to choose the archival structure:
- Series → File → Item
- Series → Item (flat)
-
Generates valid EAD XML
-
Downloads the XML file directly
-
Reports skipped rows and structural warnings
All processing happens client-side. No files are uploaded anywhere.
Use when records are grouped into folders/files.
Example structure:
Series
└─ File
├─ Item
└─ Item
- Parent/child relationships are inferred from
<unitid>paths - Missing file-level rows are handled gracefully
- Items with missing parents are attached to the series and reported as warnings
Use when no file/folder level exists.
Example structure:
Series
├─ Item
├─ Item
└─ Item
- All non-series rows are treated as items
- Any file-level grouping is ignored
- Output matches the “flat” Python script behaviour
The app expects an Excel spreadsheet with column headers containing:
<c level>—series,file, oritem<unitid><unittitle><unitdate>
Optional columns:
<extent><scopecontent>
Notes:
- Column names are matched by content, not exact spelling
- Rows with no
<c level>are skipped and reported <scopecontent>may contain multiple paragraphs (blank-line separated)
The conversion process is intentionally explicit and step-based:
-
File ingestion
- Drag & drop or select an Excel file
-
Excel parsing
- Reads the first worksheet - Preserves empty cells
-
Normalisation & validation
- Detects required columns
- Cleans values
- Splits scope content into paragraphs
- Skips non-descriptive rows
- Enforces a single series row
-
Structure selection
- User chooses flat or hierarchical output
-
Structure building
- Builds a tree representation of the archive
- Collects warnings (e.g. missing parents)
-
EAD XML generation
- Recursively converts the tree into EAD XML
- Omits empty elements
-
Download & summary
- Downloads the XML file
- Displays counts and warnings
The app distinguishes between errors and warnings:
-
Errors stop the conversion (e.g. no series row, invalid
<c level>values) -
Warnings allow conversion to continue (e.g. items whose parent file row is missing)
Warnings are displayed clearly in the UI so users understand what happened.
The interface is intentionally:
- Clean and minimal
- Neutral and professional
- Suitable for institutional use
Styling is handled via a single global stylesheet (app.css) and uses:
- System fonts
- Soft borders
- Clear spacing
- Calm warning states (not alarming errors)
- Svelte / SvelteKit
- TypeScript
- SheetJS (
xlsx) for Excel parsing - Native browser APIs for XML generation and download
No backend. No database. No external services.
- All logic is implemented as small, pure functions
- No mutation of source data during transformations
- Hierarchical and flat builds share the same normalised model
- The app is suitable for static hosting
This tool intentionally does not:
- Upload files to a server
- Perform EAD schema validation
- Modify or “fix” archival data automatically
- Invent missing hierarchical structure
Its purpose is transparent conversion, not data repair.
- Core functionality complete
- Flat and hierarchical outputs supported
- Warnings handled gracefully
- Ready for real-world archival spreadsheets
Future enhancements may include previews, schema validation, or batch processing, but are not required for v1.