Privacy-first identity for AI-native apps. We value contributions from developers of all backgrounds.
# 1. Clone and install
git clone https://github.com/rockfridrich/villa.git
cd villa
bun install
# 2. Verify setup
./scripts/doctor.sh
# 3. Start development
bun dev # HTTP (most features)
bun dev:https # HTTPS (passkeys require this)
# 4. Before pushing
bun verify # typecheck + build + test| Tool | Version | Check |
|---|---|---|
| Node.js | 20+ | node --version |
| Bun | 1.0+ | bun --version |
| Git | Any | git --version |
| mkcert | Any | mkcert -version (for HTTPS) |
villa/
├── apps/
│ ├── hub/ # Main app (villa.cash)
│ ├── key/ # Auth iframe (villa.cash/auth)
│ └── developers/ # Docs (docs.villa.cash)
├── packages/
│ ├── sdk/ # @rockfridrich/villa-sdk
│ ├── sdk-react/ # React bindings
│ ├── ui/ # Shared components
│ └── config/ # Shared Tailwind preset
├── contracts/ # Solidity (Base network)
└── specs/ # Feature specifications
bun dev # Start all apps
bun build # Build everything
bun verify # Full verification (required before PR)
bun test # Unit tests
bun test:e2e # E2E tests (requires bun dev:https)git checkout -b feat/your-feature # Features
git checkout -b fix/bug-description # Bug fixes- Follow existing patterns in the codebase
- Use
@villa/uicomponents when available - Use Tailwind preset:
@villa/config/tailwind.preset
bun verify # Must pass before pushingWe use Conventional Commits:
feat(sdk): add session TTL configuration
fix(hub): resolve passkey error on Safari
docs: update integration guide
- Push your branch
- Open PR against
main - CI runs (lint, typecheck, E2E tests)
- Merge to main auto-deploys to
beta.villa.cash
All apps use @villa/config/tailwind.preset:
// tailwind.config.ts
import preset from "@villa/config/tailwind.preset";
export default { presets: [preset] };| Token | Use |
|---|---|
cream-* |
Backgrounds |
ink |
Text |
accent-yellow |
Primary actions |
accent-green |
Success |
Check packages/ui first. Add new shared components there.
- TypeScript: Strict mode, no
any, use Zod for validation - React: Functional components, proper focus states
- Security: Never log secrets, sanitize inputs
| Env | URL | Network | Deploy Trigger |
|---|---|---|---|
| Production | villa.cash | Base | Manual v* tag |
| Staging | beta.villa.cash | Base Sepolia | Push to main |
| Docs | docs.villa.cash | - | Push to main |
- GitHub Discussions
- Telegram Community
- Security issues: security@villa.cash
MIT