A cloud wallet is a digital wallet hosted in the cloud that lets users securely store, manage, and use identity credentials from any device.
- React 19 + TypeScript + Vite
- Tailwind CSS
- ESLint (flat config)
- Prettier
npm install
npm run devnpm run dev: start local development server.npm run build: type-check and create production build.npm run lint: run ESLint with warnings treated as errors.npm run lint:fix: auto-fix lint violations where possible.npm run format: check code formatting with Prettier.npm run format:write: write formatting changes.npm run test: run unit tests with Vitest.
src/
api/ # API clients and endpoint modules
components/ # Reusable UI components
constants/ # App constants (routes, keys)
hooks/ # Custom React hooks
pages/ # Page-level components
*/tests/ # Unit tests grouped per feature area
types/ # Shared TypeScript types
utils/ # Utility helpersVITE_API_BASE_URL: backend host/base URL. The app automatically appends/api/v1when missing (defaults tohttp://localhost:3000->http://localhost:3000/api/v1).VITE_ALLOWED_CREDENTIAL_OFFER_HOSTS(optional): comma-separated allowlist ofhost[:port]values for accepting plain https QR payloads as credential-offer URLs. If not set, the app only accepts plainhttpspayloads whose path containscredential-offer(conservative default).openid-credential-offer://...links are accepted regardless.
Create a .env file in project root:
VITE_API_BASE_URL=http://localhost:3000
# Optional:
# VITE_ALLOWED_CREDENTIAL_OFFER_HOSTS=issuer.example.com,wallet.example.orgYou can also copy .env.example to .env (or .env.local) and adjust values.
Branching model and release workflow are documented in docs/gitflow.md.