尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
正在載入完整 README。 以下為已儲存的摘錄。
Frontend MVP for the Perennity Bridge capital readiness assessment tool.
Methodology v3.5.
Airtable credentials live in .env.local as AIRTABLE_PAT,
AIRTABLE_BASE_ID and AIRTABLE_ENGAGEMENTS_TABLE_ID (see .env.example).
They are read only by the serverless functions in api/; the browser never
talks to Airtable directly. Never prefix a secret with VITE_: the build
fails if you do, because Vite would inline it into the public bundle.檢視完整 README ↗Frontend MVP for the Perennity Bridge capital readiness assessment tool. Methodology v3.5.
npm install
vercel dev # vite + the /api functions (needs `vercel link` once)
npm run dev # vite only on :5173 — /api calls (report, lead form) will fail
npm test # vitest
npx vite build # production build to dist/
Airtable credentials live in .env.local as AIRTABLE_PAT,
AIRTABLE_BASE_ID and AIRTABLE_ENGAGEMENTS_TABLE_ID (see .env.example).
They are read only by the serverless functions in api/; the browser never
talks to Airtable directly. Never prefix a secret with VITE_: the build
fails if you do, because Vite would inline it into the public bundle.
The current sign-in system stores accounts and PBKDF2-hashed passwords in IndexedDB on the user's local device. It is not security-grade. Anyone with physical access to a signed-in device can inspect the IndexedDB contents and extract password hashes for offline cracking.
Tradeoffs, in order of importance:
The eventual target is a backend (Supabase / Firebase / custom API).
The IndexedDB shape is chosen to be migratable: email is the stable
identifier, and the PBKDF2 hash can either be re-challenged on
migration day or imported if the backend accepts compatible hashes.
User-facing strings, Terms of Service, and regulatory citations have been rebranded from "Perennity" to "Perennity Bridge". The T&Cs now reference Perennity Bridge Ltd as the contracting legal entity.
Before shipping publicly, verify the Companies House registration
matches "Perennity Bridge Ltd". If the registered entity is still
"Perennity Ltd", the T&Cs will be legally inaccurate — update the
definition in src/App.jsx back to Perennity Ltd with a trading
name note, or register/rename the entity to match.
The landing page "View Example Assessment" button surfaces a neutered sample: score ring, pillar grid, and verdict label name only. The criteria breakdown, recommendations, DNSH grid, PDF/Excel downloads, AI narrative, and regulatory Q&A are gated behind a Create Account CTA to protect methodology IP.