A local-first glaze recipe calculator and firing journal for ceramic artists. React and TypeScript implement the interface and calculation engine; a platform adapter selects browser IndexedDB or native SQLite through Capacitor. No account, application backend, AWS deployment or AI model is required by the current design.
flowchart TD
U["React / Vite interface"] --> D["Domain validation and recipe scaling"]
D --> R["Calculation snapshots and saved recipes"]
U --> F["Materials, firing notes and local photos"]
R --> A["coneDB platform adapter"]
F --> A
A -->|"Web"| I["IndexedDB"]
A -->|"iOS / Android"| S["Capacitor SQLite"]
A <--> B["JSON backup / restore"]
W["Service worker: network-first GET caching"] --> U
| Module | Responsibility |
|---|---|
src/domain.ts |
Validate inputs, calculate ingredient mass and create snapshots |
src/db.ts |
Platform-specific persistence and versioned JSON backup/import |
src/App.tsx |
Calculator, history, materials and firing-record workflows |
public/sw.js |
Cache application assets for offline fallback after loading |
tests/domain.test.ts |
Domain calculation and validation regression tests |
- Sum base ingredient grams to obtain
B. - Convert each additive percentage into grams using
B * percentage / 100. - Sum base and additive grams to obtain original total
T. - Scale every ingredient by
target final mass / T.
Internal calculations are not rounded; display values use 0.01 g precision. The implementation accepts additive percentages from 0.005 to 40. Earlier product specifications contain a conflicting 0.01 to 30 range; this remains a product confirmation item, not a silently resolved requirement.
Calculation history supports search, favorites, saving, recalculation and deletion. Records retain ingredient snapshots so later material edits do not erase the original calculation context. Firing records include conditions, notes and locally stored photos. JSON backups include photo data and can become large.
Web data belongs to the current browser profile; native data uses SQLite. Device loss or browser data deletion can remove records. Export backups regularly. Import merges records; cross-store restore is not advertised as an atomic transaction. The service worker improves offline availability but does not provide cloud sync.
npm ci
npm run dev
npm test
npm run lint
npm run buildThe normal local address is http://127.0.0.1:5173. Native projects are present:
npm run native:sync
npm run native:ios
npm run native:androidNative builds require the platform toolchains and signing configuration appropriate
to the pinned Capacitor version. The current identifier is com.cone.glaze.
Repository build scripts do not establish App Store/Play Store release status;
validate native storage and device behavior separately from web domain tests.
This project demonstrates platform boundaries, deterministic domain logic and local data ownership. It complements an infrastructure portfolio through storage tradeoffs and portability; it is not an AI serving or cloud infrastructure project. Optional cloud backup/synchronization is a future decision, not an implemented path.