diff --git a/CLAUDE.md b/CLAUDE.md index cb9ba62..f88ee2f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -25,6 +25,7 @@ The owner talks to you in English. | `packages/vocab` | Shared vocabularies, filters, extra-field definitions, daylight math: anything both the Worker and a client must agree on | | `packages/fov-math` | Camera/lens/FOV/overlay/reframe math | | `packages/ui` | The web design system (`@openclapper/ui`): components, tokens and component CSS, theme switch; used by the Studio and the admin board | +| `packages/design` + `apps/specimen` | The rewrite's design system (`@openclapper/design`, `docs/rewrite/`) and its specimen app (`make specimen`); not used by the current apps, never on the same page as `@openclapper/ui` | | `packages/service-kit` | What both Workers share: `http.ts` router + `assert*` helpers, Access verification, password hashing | ## Core model in one paragraph diff --git a/Makefile b/Makefile index 72300ee..bfa0410 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # The local development stack: thin wrappers around the pnpm scripts in package.json, which stay the # source of truth. Everything runs in the foreground; stop a server with Ctrl-C. Deploying is not # here: it runs from a deployment repository (docs/self-hosting.md). -.PHONY: help init check all all-down all-restart dev worker studio admin mobile dev-build apk-local +.PHONY: help init check all all-down all-restart dev worker studio admin specimen mobile dev-build apk-local help: ## Show this list @grep -hE '^[a-z-]+:.*?## ' $(MAKEFILE_LIST) \ @@ -34,6 +34,9 @@ studio: ## Studio only -> http://localhost:5173 (needs `make worker` for /api) admin: ## Admin board -> http://localhost:5174 with its Worker on :8788 (local D1, no Access: admin@localhost) pnpm dev:admin +specimen: ## Design system specimens (rewrite, packages/design) -> http://localhost:5175, no Worker needed + pnpm -C apps/specimen dev + mobile: ## Local Worker behind a quick tunnel + Metro for the dev build (OpenClapper Dev); LOCAL data pnpm dev:mobile diff --git a/apps/specimen/index.html b/apps/specimen/index.html new file mode 100644 index 0000000..32ea305 --- /dev/null +++ b/apps/specimen/index.html @@ -0,0 +1,13 @@ + + +
+ + +| foreground / background | ratio | min | |||
|---|---|---|---|---|---|
| {a} / {b} | {r.toFixed(1)}:1 | + {m === 0 + ? <>none | decorative | > + : <>{m} | = m ? "success" : "danger"})` }}>{r >= m ? "pass" : "FAIL"} | >} +
| Focal length | Sensor | Position | Time |
|---|---|---|---|
| 24 mm | 36 × 24 mm | 52.5200° N · 13.4050° E | 14:32:08 |
| 135 mm | 23.5 × 15.6 mm | 48.1351° N · 11.5820° E | 06:05:11 |
{w ? "value widths: " + w.join(" · ") + " px" : " "}
+| Location | Lat ° | Shots |
|---|---|---|
| {r.n} | +{r.lat} | +{r.s} | +
mono).numeric / mono
+ Status barSans, tabular. It is a sentence of facts, not a readout..oc-statusbar
+ Stays monoTimecode, the taskbar clock, camera readouts on the phone, live values that tick, keys in Kbd, file sizes and counts in meta lines, codes..oc-num
+ {children}
; diff --git a/apps/specimen/src/kits/AndroidFrame.tsx b/apps/specimen/src/kits/AndroidFrame.tsx new file mode 100644 index 0000000..f17c766 --- /dev/null +++ b/apps/specimen/src/kits/AndroidFrame.tsx @@ -0,0 +1,214 @@ +// Simplified Android (Material 3) device frame, ported from the export's android-frame.jsx starter scaffold +// (raw elements, hex colours and px by design: it imitates a device, not the design system). +// Status bar + top app bar + content + gesture nav + keyboard. No dependencies, no image assets. +// +//