v1.2.0 — Stable UI & MARC upload fixes (2025-10-16)
Summary
This release fixes MARC upload reliability and restores a stable UI after a theming experiment was reverted. The important user-facing outcome is that MARC files fetched via CORS proxies are now preserved as binary, uploaded unchanged, and successfully parsed by the backend.
Highlights
- Fix: Preserve MARC binary payloads from CORS proxies (AllOrigins, corsproxy.io)
- Detects/decodes proxy-wrapped payloads (data: URIs and raw base64).
- Normalizes bytes into a Blob/File before sending to backend.
- Fix: Uploads use FormData with binary File objects and do not manually set Content-Type (prevents multipart corruption).
- Debug: Optional binary debug logging — logs hex of first 32 bytes for upload/download verification (enable with
VITE_UPLOAD_DEBUG). - Uppy improvements:
- Preserve original filename and pass through as label for UI and TSV output.
- Better
file-added/completehandling.
- UX & UI:
- Added Upload icon to Manual tab, improved icon sizing and ARIA labels.
- Per-tab cache preserved across sessions; Settings modal with "Clear cached results".
- Abort/cancel handling for fetches and uploads (Clear cancels in-flight operations).
- Revert: Removed experimental semantic theming (CSS variables) that introduced regressions; restored Tailwind utility classes and original styles.
Why this release
Users were seeing backend 500 errors when uploading MARC files from the frontend. Root cause: some CORS proxies returned MARC bytes wrapped as text (data: URIs or base64); the client forwarded that text, which corrupted the multipart binary upload. This release ensures the client decodes and reconstitutes raw bytes so the backend receives identical data to a direct curl upload.
Upgrade / Install
To fetch this tag locally:
# fetch tags and check out the release
git fetch --tags
git checkout v1.2.0Run locally:
npm install
npm run devBuild for production:
npm run build
# preview the production build
npm run previewConfiguration / Environment
Set these Vite environment variables (via .env or export in shell):
VITE_API_URL— backend URL (example:https://your-backend.example.com)VITE_API_TOKEN— optional Bearer token for the backendVITE_UPLOAD_DEBUG— set to"true"to enable byte-level hex debug logsVITE_FORCE_MIME— set explicitly to force upload MIME toapplication/marc(use sparingly)
Example (zsh):
export VITE_API_URL="https://api.example.com"
export VITE_UPLOAD_DEBUG="true"
npm run devTesting notes (manual checks performed)
- Upload a local
.mrc/.marcfile via the Manual tab and verify conversion results. - Fetch a MARC file URL (Palace/AllOrigins) and convert; with
VITE_UPLOAD_DEBUG=true, confirm the hex of the first 32 bytes for the downloaded file and the uploaded file match. - Verify Uppy Dashboard displays filename correctly, and TSV export/copy uses that filename/label.
Edge cases:
- If proxies are down/unreliable, users should download the MARC file and upload manually.
- Browser Clipboard API and Download behaviours differ across platforms; report browser-specific issues if observed.
Files changed (high-level)
- Added:
CHANGELOG.md - Edited:
services/marcService.ts— proxy decoding, file normalization, binary debug loggingcomponents/InputArea.tsx— Uppy integration changes, upload icon, proxy fetch & decode flowscomponents/KbartTable.tsx— UI/copy/download handling polishindex.html— restored head (Tailwind CDN), cleaned Uppy CSS overrides
- Removed / neutralized: temporary
index.css(experimental theming)
Release artifacts
- Production bundle (build): run
npm run buildto producedist/. - If you want, I can attach a zip of the
dist/build to this release (I can create it locally and upload or attach it programmatically if you provide a GitHub token).
Changelog / Notes
See CHANGELOG.md in the repo for a short summary. (Also included in the release notes above.)
Credits & follow ups
- If you want the current working-tree changes (icons,
index.css, logo file) included in the release commit, I can stage/commit them and create a patch release (e.g.v1.2.1). - I can also create the actual GitHub Release for
v1.2.0and attach adist/ZIP programmatically if you provide a GitHub token withrepo/repo:releasepermissions.
Paste this into the GitHub "Create a release" form to publish.