ThreadCraft — Embroidery Digitizing for Brother Entrepreneur
Find a file
triage-runner 1c76516ccb
Some checks failed
CI / Lint, test, build (push) Has been cancelled
feat(#376): editor Path Properties — per-stitch-type export format compatibility indicator
Editor right panel now renders:
- A target-export-format dropdown (PES / DST / EXP / JEF / SVG) above the
  Stitch Type select.
- Per-option format support suffix on each stitch type in the dropdown
  ('✓ DST' / '⚠ DST' / '✕ DST') driven by getStitchFormatSupport.
- A format-compat warning row when the chosen stitch type has 'limited'
  support for the target format (cross-stitch on DST, zigzag on EXP, etc).

Backed by src/lib/formatCompatibility.ts (single source of truth for the
stitch-type × format support matrix). Editor owns the targetExportFormat
state so future sync with ExportDialog lands in one place. Defaults to
PES to match ExportDialog's default (#376 sync).
2026-10-06 21:16:53 -07:00
.forgejo/workflows ci: drop docker + workspace-screenshot jobs (broken under self-hosted runner) 2026-09-29 17:22:01 -07:00
.gsd fix(#92): expand history snapshot and push history for thread-stop + UPDATE_OBJECT actions 2026-09-14 10:45:49 -07:00
.worktrees Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#125 2026-10-05 07:51:40 -07:00
deploy Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#21 2026-06-27 01:07:51 -07:00
docker Fix ruff lint: BLE001 noqa, RUF012 ClassVar, remove unused noqa, sort imports 2026-09-12 18:16:48 -07:00
docs/plans docs: add plan for wire-up settings + thread library propagation 2026-10-02 18:49:14 -07:00
public Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#120 2026-10-02 16:54:38 -07:00
scripts Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#114 2026-09-29 13:41:46 -07:00
src feat(#376): editor Path Properties — per-stitch-type export format compatibility indicator 2026-10-06 21:16:53 -07:00
tests feat(#125): Settings modal optional defaults (render scale, undo depth, grid) 2026-10-05 07:47:35 -07:00
.dockerignore Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#20 2026-06-27 00:11:21 -07:00
.env.development feat(#17): split .env.development vs .env.production, loadEnv in vite.config.ts (Mark/Kimi_Agent_Brother_10_Digitizing_App#17) 2026-06-27 22:14:16 -07:00
.env.example feat(client): send Authorization: Bearer header to easystitch-service (#12) 2026-06-27 03:45:30 -07:00
.env.production feat(#17): split .env.development vs .env.production, loadEnv in vite.config.ts (Mark/Kimi_Agent_Brother_10_Digitizing_App#17) 2026-06-27 22:14:16 -07:00
.gitignore test(e2e): add user-story shakedown spec for #102 and #103 2026-09-18 18:17:46 -07:00
.pre-commit-config.yaml chore: add pre-commit hooks to catch lint/type drift before push 2026-09-11 19:57:24 -07:00
.wild-instance-id Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#21 2026-06-27 01:07:51 -07:00
.wild-job-id Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#21 2026-06-27 01:07:51 -07:00
.wild-stub.log Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#21 2026-06-27 01:07:51 -07:00
components.json init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
docker-compose.actors.yml Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#20 2026-06-27 00:11:21 -07:00
docker-compose.yml cleanup(#113): purge in-repo api/ Express stub 2026-09-25 13:58:55 -07:00
docker-entrypoint.sh cleanup(#113): purge in-repo api/ Express stub 2026-09-25 13:58:55 -07:00
Dockerfile Apply changes from kilo-gsd.py run for Mark/Kimi_Agent_Brother_10_Digitizing_App#20 2026-06-27 00:11:21 -07:00
eslint.config.js fix(#272): Path Properties empty-state — 'Select a path to edit its properties' 2026-10-04 06:39:34 -07:00
IMPLEMENTATION_PLAN.md feat(#386): virtualized color picker grid 2026-10-05 12:20:48 -07:00
index.html init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
lefthook.yml chore: add pre-commit hooks to catch lint/type drift before push 2026-09-11 19:57:24 -07:00
nginx.conf cleanup(#113): purge in-repo api/ Express stub 2026-09-25 13:58:55 -07:00
package-lock.json fix(#80): regenerate Live Demo workspace screenshot from live build 2026-09-18 06:59:48 -07:00
package.json fix(#80): regenerate Live Demo workspace screenshot from live build 2026-09-18 06:59:48 -07:00
playwright.config.ts fix(#80): regenerate Live Demo workspace screenshot from live build 2026-09-18 06:59:48 -07:00
pnpm-lock.yaml fix(#115): auto-digitize settings wiring — stitch pref translation, underlay wire field, 422 detail surfaced 2026-09-29 18:53:03 -07:00
pnpm-workspace.yaml fix(gate): set allowBuilds to true for canvas and esbuild 2026-09-01 09:57:37 -07:00
postcss.config.js init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
README.md docs(README): clarify backend — easystitch-service is external; api/ stub is unused (see #113) 2026-09-25 14:16:57 -07:00
tailwind.config.js init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
tsconfig.app.json init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
tsconfig.json init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
tsconfig.node.json init: project bootstrap from archive 2026-06-22 07:52:15 -07:00
vite.config.ts cleanup(#113): purge in-repo api/ Express stub 2026-09-25 13:58:55 -07:00
vitest.config.ts chore(vitest): exclude .worktrees/ from test discovery 2026-10-05 04:30:55 -07:00

ThreadCraft — Embroidery Digitizing for Brother Entrepreneur

A web-based embroidery digitizing application designed for the Brother Entrepreneur PR-10 10-needle machine. Upload artwork, auto-digitize or manually edit stitch paths, manage thread colors, and export PES files ready for production.

Tech Stack

  • React 19 + TypeScript
  • Vite 7
  • Tailwind CSS v3 + shadcn/ui components
  • Framer Motion (animations)
  • Fabric.js (canvas rendering)
  • React Router v7
  • Vitest (unit tests)

Getting Started

git clone https://forgejo.tail018ac4.ts.net/Mark/Kimi_Agent_Brother_10_Digitizing_App.git
cd "Kimi_Agent_Brother_10_Digitizing_App"
npm install
npm run dev

The app talks to the easystitch-service backend (separate repo: Mark/easystitch-service, runs FastAPI on :8080) for auto-digitize, thread catalog/resolve, and PES/DST export. In dev, requests are proxied to the service via the Vite dev server (/api/easystitch — see vite.config.ts); in production, set VITE_EASYSTITCH_API_URL to the service URL at build time or deploy behind the bundled nginx proxy (which forwards /api/easystitch/* to the EASYSTITCH_UPSTREAM container).

Note: This repo also contains a small Express stub at api/ (port :3001, only /health and a 501 for /auth/register). It has no callers in the front-end and is not the digitize/export backend. It's tracked for removal in #113.

Project Structure

src/
  components/
    ui/           — shadcn/ui components (50+)
    workspace/    — Main digitizing interface (canvas, toolbar, panels)
    editor/       — Node-based stitch path editor
    gallery/      — Design library with folders
    help/         — Documentation pages
    Navbar.tsx    — App navigation
    Layout.tsx    — Page wrapper
    Footer.tsx    — Page footer
  pages/
    Home.tsx      — Landing page with hero + features
    Workspace.tsx — Full-screen digitizing workspace
    Editor.tsx    — Advanced path editor
    Gallery.tsx   — Design management
    Help.tsx      — Stitch pattern reference
  lib/
    easystitch-client.ts — Typed client for the easystitch-service v1 API
    digitize-adapters.ts — Service <-> workspace shape conversions
    stitch-adapters.ts   — Workspace -> service stitch conversion for export
    region-classifier.ts — Stitch-type classification from geometry
    canvas/              — Canvas renderers (satin/fill)
  hooks/
    useAsyncState.ts — Async state machine with abort support
  tests/        — Shared test fixtures

api/ is an unused Express stub (see #113). The real backend is Mark/easystitch-service and is not part of this repo.

Scripts

Command Description
npm run dev Start dev server (port 3000)
npm run build Production build
npm run lint Run ESLint
npm test Run the Vitest test suite
npm run preview Preview production build

Pages

  • Home — Marketing landing with hero video, feature cards, how-it-works
  • Workspace — Full-screen digitizing: upload → auto-digitize → edit → export
  • Editor — Node-based Bezier path editor for manual stitch creation
  • Gallery — Organize designs into folders, search, favorites
  • Help — Stitch type reference and machine compatibility guide

CI

The repo runs Forgejo Actions (.forgejo/workflows/ci.yml): install → typecheck → lint → test → build → docker image build → smoke test. CI requires a self-hosted runner registered for the repo (localhost-kab10-runner).

Notes

  • Auto-digitize, thread catalog/resolve, and PES/DST export call the easystitch-service v1 API (no longer simulated).
  • Tests live alongside source (*.test.ts / *.test.tsx).