Personal website β you-find.me
Vite+ Β· Void Β· React 19 Β· TypeScript Β· TailwindCSS v4 Β· Hono Β· TanStack Router Β· PostgreSQL Β· Better Auth Β· Cloudflare Workers
- Home β landing page with animated background
- Social β multilingual follow policy, social accounts, contact details, and sponsorship
- Chat β authenticated Pi Agent chat with typed NDJSON streaming
- Terminal β interactive slash-command terminal (
/helpto explore) - CV β resume page with work, projects, and hackathons
- Story β multilingual personal story, interactive map, and My Series project introductions
- Auth β sign up, login, email verification, password reset (Better Auth + GitHub/Google OAuth)
Use pnpm 12.6.0, as pinned in package.json.
pnpm install
pnpm devCreate a gitignored .env with the local values declared in env.ts (including DATABASE_URL
for the local PostgreSQL instance) before running pnpm dev.
pnpm dev runs Vite+ with voidPlugin(). Void uses Cloudflare's Vite runtime internally, so application development does not invoke wrangler dev directly.
This project splits runtime values by source.
env.tsdeclares and validates application environment variables..envcontains local values, includingDATABASE_URLand local secrets. It is ignored by Git.CLOUDFLARE_HYPERDRIVE_LOCAL_CONNECTION_STRING_HYPERDRIVE=postgresql://user:password@localhost:5432/databaselets Wrangler emulate the productionHYPERDRIVEbinding locally without duplicating the connection string.- Cloudflare resource bindings live in
wrangler.json. - Every server-side value (including non-sensitive configuration) is uploaded to Cloudflare with
wrangler secret put <NAME>. - Production builds do not load
.env; runtime secrets stay in Cloudflare encrypted bindings.
Remote/prod bindings are declared in wrangler.json:
| Binding | Type | Purpose |
|---|---|---|
ASSETS |
Static | Serves the SPA |
HYPERDRIVE |
Hyperdrive | PostgreSQL connection proxy |
Runtime env values (all stored as Cloudflare secrets):
| Variable | Purpose |
|---|---|
OPENAI_API_URL |
Custom OpenAI-compatible URL |
OPENAI_MODEL |
Default chat model |
RESEND_FROM |
Sender address |
Worker secrets:
| Variable | Purpose |
|---|---|
BETTER_AUTH_SECRET |
Auth secret key |
OPENAI_API_URL |
OpenAI-compatible base URL |
OPENAI_MODEL |
Default chat model |
RESEND_FROM |
Sender address |
Local .env / production secret bindings:
| Variable | Purpose |
|---|---|
GITHUB_CLIENT_ID |
GitHub OAuth client ID |
GITHUB_CLIENT_SECRET |
GitHub OAuth client secret |
GOOGLE_CLIENT_ID |
Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret |
RESEND_API_KEY |
Transactional email (Resend) |
OPENAI_API_KEY |
AI chat |
Required production secrets:
BETTER_AUTH_SECRETOPENAI_API_URLOPENAI_MODELRESEND_FROMGITHUB_CLIENT_IDGITHUB_CLIENT_SECRETGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETRESEND_API_KEYOPENAI_API_KEY
pnpm dev # Local dev via Vite+ and Void
pnpm test # Isolated Vitest unit tests
pnpm build # Client build + wrangler dry-run deploy
pnpm deploy # Build and deploy with Wrangler
pnpm check # Format, lint, and type checks
pnpm lint # Lint (vite-plus)
pnpm format # Format (vite-plus)pnpm deployProduction runtime values are split by binding type:
# Resource bindings are declared in wrangler.json
# Local values live in the gitignored .env file
# Every server-side value is uploaded with `wrangler secret put <NAME>`The repo is a pnpm workspace. Pi Agent runtime code lives in packages/ai-core; shared UI components live in packages/ui:
packages/ui/src/
βββ components/ # CherryBlossom, HelloSignature
βββ footer/ # PresenceCount, SiteAge
βββ terminal/ # Interactive terminal (logic + components)
Shared TypeScript types (consumed by both src/ and server/) live in types/, aliased as @shared/.
The platform-neutral Pi runtime lives in packages/ai-core. Maintainer documentation is collected in
docs/ARCHITECTURE.md, docs/DEPLOYMENT.md, docs/DESIGN.md, docs/STYLEGUIDE.md,
docs/TECH.md, and docs/DATABASE.md.
This project contains code derived from Taki (AGPL-v3).