Go to file
2026-06-22 14:17:21 -04:00
guidelines initial commit 2026-04-13 23:55:36 -04:00
public feat(SearchCSDbNG): update favicon and increase page size for improved performance 2026-06-15 21:38:02 -04:00
scripts fix(gzip-dist): add support for .wasm files in gzip processing 2026-06-14 16:15:00 -04:00
src feat(SearchCommoServe): update fetch logic to handle proxy routing for cross-origin requests 2026-06-22 14:17:21 -04:00
.gitignore feat(webdav3): implement proxy download functionality with CORS support 2026-06-15 01:54:22 -04:00
AGENTS.md feat(SearchPane, SearchLocal, webdav): enhance search functionality with new tabs, inline progress, and directory management 2026-06-18 04:07:17 -04:00
ATTRIBUTIONS.md initial commit 2026-04-13 23:55:36 -04:00
CLAUDE.md feat: add AGENTS.md and CLAUDE.md for project documentation; update README with features and installation instructions; modify index.html and manifest for consistent naming; enhance App component with new cartridge tools 2026-04-14 18:48:31 -04:00
default_shadcn_theme.css initial commit 2026-04-13 23:55:36 -04:00
index.html fix(SearchLocal, locate-db): enhance loading progress tracking for engine and database with visual indicators 2026-06-14 21:15:50 -04:00
package.json feat(SearchLocal, locate-db): enhance scanning process with compression and progress tracking 2026-06-17 12:05:28 -04:00
pnpm-workspace.yaml initial commit 2026-04-13 23:55:36 -04:00
postcss.config.mjs initial commit 2026-04-13 23:55:36 -04:00
README.md Refactor config structure: rename 'iec.devices' to 'devices.iec' across the codebase 2026-06-11 17:08:27 -04:00
tsconfig.json feat: add new search panel components and update existing ones with headers and close buttons 2026-06-15 00:47:22 -04:00
vite.config.ts Refactor DevicesPage to simplify device navigation and enhance DeviceDetailOverlay integration 2026-06-13 22:10:31 -04:00
webdav3.py feat(SearchCommoServe): remove categoryFilter from state management 2026-06-15 16:05:16 -04:00

Meatloaf Manipulator

A Progressive Web App (PWA) for configuring and managing Meatloaf devices — open-source Commodore 64/128 hardware that adds modern networking, storage, and peripheral support.

Features

  • Status — live system status, activity log, file info, loading progress, directory and disk map overlays; WebSocket connection status; reset device or host (sends command via WebSocket)
  • Devices — browse and manage attached IEC devices; Rescan Bus sends iec scan via WebSocket
  • IEC — configure the IEC serial bus (fastloaders, chainloaders, directory options)
  • Network — manage WiFi networks (scan, connect, remove); clicking a known network reconnects and moves it to the top; all connect/scan actions send commands via WebSocket
  • Media Manager — WebDAV file browser with per-row action menus, folder configuration (.config editor), media set detection with existence checks, and smart base_url mount logic
  • Reality Override — full-screen WebSocket command display over a Three.js Digital Tokamak vortex; double-tap to toggle background; twinkling star field when hidden
  • Reality Override Admin — command palette for Image/Audio/Video conversion commands plus freeform input; broadcasts to all connected clients via WebSocket
  • Apps — built-in tools grouped by category:
    • Management: Media Manager, Print Manager, Serial Console, Short Codes
    • Disk: RAM/ROM Explorer, BAM Editor, Directory Editor, Sector Editor, Disk Visualizer, Dump/Write Disk Image
    • Cartridge: PRG to CRT, Magic Desk Cart Builder, Easy Flash Cart Builder
    • Development: Basic Editor, Assembler, Sprite Editor, Character Set Editor, PETSCII Editor
    • Display: Idle Animation, Loading Animation, Reality Override, Override Admin
  • PWA — installable on desktop and mobile; runs offline via service worker; fullscreen-capable with safe-area insets for notched phones

Architecture Highlights

Shared WebSocket

A single WebSocket connection to ws://<device-hostname>/ws is managed by WsProvider (src/app/ws.tsx) and shared app-wide via React Context. Any component can send commands or subscribe to incoming frames via useWs(). The connection auto-reconnects every 3 s on drop.

Split Config Storage

Device settings are stored in two separate files on the device (LittleFS erase-block friendly, ≤ 4 096 bytes each):

File Contents
/.sys/config.json General, host, hardware, WiFi, network, Bluetooth, modem, cassette, BOIP, IEC bus settings
/.sys/devices.json IEC device list (devices.iec)

useSettings() loads both files in parallel and merges them; saves split them back automatically. A bundled fallback (src/imports/config.json) is used as the initial UI state while the device is being contacted.

WebDAV Layer

All file I/O goes through src/app/webdav.ts, which wraps the vendored webdav-component (browser-native fetch + DOMParser, no npm dependencies).

Requirements

  • Node.js 18+
  • npm or pnpm

Installation

npm install
# or
pnpm install

Development

npm run dev

The app is served at http://localhost:5173/config/ by default.

Start the local WebDAV + WebSocket dev server (requires Python 3):

python webdav3.py

This serves files/ over WebDAV and provides a /ws WebSocket endpoint on port 80.

To use a different base path:

BASE_PATH=/my-path/ npm run dev

Production Build

npm run build

Output is written to dist/. The build uses /config/ as the base path by default. Override with the BASE_PATH environment variable at build time:

BASE_PATH=/config/ npm run build

Deploy the contents of dist/ to the Meatloaf device web server under the configured base path.