Three tightly-related polish changes: 1. Preview now uses font/constant.Font — the v1 firmware's *vector* engraving face — instead of bitmap Comfortaa. Every <path> stroke in the preview is the actual stroke the engraver will follow on the plate. Reads the same MoveTo/LineTo segment data the upstream stepper consumes. vector-effect=non-scaling-stroke keeps the stroke width visually constant regardless of the SVG scale. The bitmap-faithful renderer is gone — engrave fidelity is more useful than LCD fidelity for the composer use case. The bitmap.Face import path is dropped from main.go. 2. Layout columns swapped. Editor was on the right, preview on the left. Now editor (taller, wider) is on the LEFT and plate picker + preview + actions stack on the RIGHT. Matches the natural "pick a plate → type → see result" reading order. Plate section gains a .plate-card class so it can be placed in the grid area. 3. Stale-error fix: typing in any input now clears the Show-SH1E- bytes "enter at least one line first" warning. Previously stuck around until the bytes button was clicked again with valid input. Also extends the composer's JS export surface (composerPreviewSVG, composerEncodeSVG, composerQRSVG) and adds the SVG-mode helpers in Go (readSVGArgs, makeSVGDesign, writePlateChrome). JS shell doesn't call these yet — wiring lands in the next commit (stage #3 of the five-stage push). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| address | ||
| backup | ||
| bc | ||
| bezier | ||
| bip32 | ||
| bip39 | ||
| bspline | ||
| cmd | ||
| docs | ||
| driver/mjolnir | ||
| engrave | ||
| font | ||
| gui | ||
| image | ||
| input | ||
| internal/golden | ||
| nonstandard | ||
| platform/v1 | ||
| seedqr | ||
| web | ||
| .gitignore | ||
| CREDITS.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| README.md | ||
seedhammer-v1-companion
Status: early development. Phase 1 (composer port) in progress. See docs/architecture/ for the project plan and design docs.
A browser-based companion for SeedHammer v1 hardware (the original Raspberry-Pi-Zero-based engraver), inspired by Gangleri42's SeedHammer II fork. Ships three coordinated tools and one optional desktop wrapper.
What this is
1. Plate composer (browser PWA)
Design a stainless steel seed-backup plate from your phone or desktop — seed words, custom title text, optional logos — then transfer the design to a real SeedHammer v1 controller via QR code.
The composer renders a pixel-faithful preview using the same Go code the Pi controller runs. What you see in the browser is what the engraver will physically punch.
The on-the-wire envelope is SH1E (a CBOR + CRC32 format documented at docs/architecture/sh1e-spec.md). Sized to fit a 24-word multisig plate in a single QR frame, with BBQr fallback for larger multi-plate manifests.
2. SeedHammer v1 emulator (browser PWA)
Run the real v1 controller firmware in your browser. The same gui/,
input/, and engrave/ Go packages that drive the physical device,
compiled to WASM. Use it to:
- Test workflows end-to-end without a physical device
- Take screenshots / record screencasts of v1 flows
- Demo SeedHammer v1 to people without shipping hardware
Keyboard mapping: arrows = joystick, Enter = center/confirm, 1/2/3 = Button1/2/3.
3. Bundled SeedSigner emulator (browser PWA)
A faithful in-browser SeedSigner — both the classic 1.3" 240×240 model and the newer 2.8" SeedSigner+ "jumbo" model. Generates seed-phrase QR codes that you can hand off to the SeedHammer v1 emulator via a single button press, end-to-end without leaving the page.
Built by hosting the upstream SeedSigner Python code via Pyodide so that the emulator IS the firmware — when SeedSigner releases new versions we bump the pinned commit and the sim updates.
4. Optional Android wrapper
Kotlin/Gradle shell hosting the composer WASM, for users who want a plate-design app instead of a PWA. Mirrors the structure of Gangleri42's SH2 Android companion.
Hardware targeted
This codebase targets the original SeedHammer v1 specifically — the [Pi Zero v1.3 / WaveShare 1.3" 240×240 LCD HAT / MarkingWay engraver] hardware. Not the newer SeedHammer II (RP2040 / TinyGo / SH2E NFC).
For an SH-II companion, use Gangleri42's fork directly. Most of the inspiration for this project comes from there.
Status & roadmap
- ☐ Phase 1 — composer port (Go-to-WASM, SH1E reference encoder, web UI)
- ☐ Phase 2 — v1 emulator (firmware-in-browser, Gangleri42-faithful UI shell)
- ☐ Phase 2.5 — SeedSigner emulator + QR handoff
- ☐ Phase 3 — combined three-pane sim
- ☐ Phase 4 — real-device validation on real v1 hardware
- ☐ Phase 5 (optional) — ColdCard emulator (port from Gangleri42's fork)
- ☐ Phase 6 (optional) — Android wrapper
Building
(Will be documented as Phase 1 lands — go build ./... + a Vite build for
the web shells.)
License
Released under the Unlicense (public domain dedication), matching upstream SeedHammer's choice. SeedSigner-derived files segregated and retain their MIT notice.
Credits + provenance
Heavy lifting by three upstreams. See CREDITS.md for what came from where and the pinned baseline commits.