Crucible is a scenario-modeling and portfolio-management platform that helps Brisbane property developers hedge copper price exposure before subcontractors walk off site.
Live: https://l-s-capital.github.io/crucible/
- Forecaster — Quantify copper hedge savings vs unhedged cost (Pro+)
- Portfolio dashboards — Basic / Pro / Enterprise / Staff views by plan
- Physical inventory — Warehouse pulse, spreads, carrying-charge check (Pro+)
- LME forward curve docs — Contango, backwardation, roll timing (Pro+)
- Pricing — Basic A$999/mo, Pro A$2,500/mo, Enterprise enquire
| Layer | Choice |
|---|---|
| Framework | React 19 |
| Build | Vite 8 |
| Routing | React Router 7 (HashRouter) |
| Icons | Lucide React |
| Auth | Client AuthContext + localStorage (demo-grade) |
| Optional API | Flask (backend/) — LME + portfolio JSON |
| CI/CD | GitHub Actions → GitHub Pages |
| Tests | Vitest |
npm install
npm run dev # http://localhost:5173
npm run build
npm run preview
npm run test
npm run lintOptional LME API:
cd backend
pip install -r requirements.txt
python server.py # :5001cp .env.example .env
# VITE_API_URL=http://localhost:5001/apiAny email + password ≥ 6 characters creates a demo session. Tier shortcuts:
| Plan | |
|---|---|
basic@crucible.dev |
basic |
pro@crucible.dev |
pro |
enterprise@crucible.dev |
enterprise |
staff@crucible.dev |
staff |
src/
├── components/ # UI chrome + charts
├── context/ # AuthContext
├── data/ # tiers, inventory model, offerings
├── hooks/ # useLME
├── pages/ # routes
├── styles/ # shared CSS
├── test/ # vitest
├── utils/ # calc, api, formatters
backend/ # optional Flask API
docs/ # architecture, skills, hooks, observability
AGENTS.md # agent runbook
Pushes to main run Actions: test → build (PAGES_BASE=/crucible/) → deploy.
Hash routes: /#/forecaster, etc.
vercel.json for root-base deploys.
- Tier-gated UI (basic / pro / enterprise / staff)
- Demo auth with hashed passwords (client-side)
- Optional LME API + client hook
- Production IdP (Supabase / Auth0 / Clerk)
- Hosted LME API for Pages users
- Payments (Stripe)
- OpenTelemetry / error reporting (see
docs/observability.md)
Private — all rights reserved. Not financial advice.