tia/CLAUDE.md

93 lines
No EOL
2.3 KiB
Markdown

# CLAUDE.md
Tia - Baby Tracking App. Next.js 16, PostgreSQL, offline-first.
## Build Rule
**ALWAYS run `npm run build` before pushing.** Fix errors locally first.
## Project Status
- ✅ Fast-log (feed/sleep/diaper + offline queue)
- ✅ PWA manifest + service worker
- ✅ Vaccinations (IAP schedule)
- ✅ Growth tracking
- ✅ Memories gallery (placeholder)
- ✅ AI chat (LiteLLM)
- ✅ Dark mode toggle
- ✅ Menu navigation
- ⏳ Cloudflare R2 upload (needs credentials)
- ⏳ Telegram alerts
## Key Files
| Path | Purpose |
|------|---------|
| `src/app/page.tsx` | Home with quick log, dark mode toggle |
| `src/app/menu/page.tsx` | Navigation drawer |
| `src/app/medical/page.tsx` | IAP vaccination schedule |
| `src/app/ai/page.tsx` | LiteLLM chat |
| `src/app/api/logs/route.ts` | Feed/sleep/diaper logging |
| `src/app/api/ai/route.ts` | LLM API proxy |
| `src/db/schema/logs.ts` | Log schemas |
| `public/sw.js` | Service worker for offline |
## Routes
- `/` - Home
- `/menu` - Navigation
- `/settings` - Settings + dark mode
- `/medical` - Vaccinations
- `/growth` - Growth records
- `/memories` - Photo gallery
- `/ai` - AI chat
- `/api/logs` - Log entries (type=feed|sleep|diaper)
- `/api/ai` - AI chat
## Conventions
### API Pattern
```typescript
// GET with query params, POST with JSON body
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const id = searchParams.get("id");
// use sql.unsafe() for raw queries
}
export async function POST(request: Request) {
const body = await request.json();
// use sql.unsafe() with parameterized values
}
```
### UI Pattern
```typescript
"use client";
import { useState, useEffect } from "react";
// dark mode: document.documentElement.classList.toggle("dark")
// links: use <Link href="..."> not router.push()
```
### Database
- Use `sql.unsafe()` not `db.execute()` - postgres-js method
- Dates: `new Date().toISOString()` string format
- Enums: create manually, no IF NOT EXISTS support
## Local Dev
```bash
cd tia
npm run dev
```
## Deployment
Auto-deploys via webhook on Git push. Database tables created via `/api/setup`.
## Environment
```
DATABASE_URL=postgresql://user:pass@host:5432/db
OPENAI_API_BASE_URL=http://litellm-gateway:4000/v1
LITELLM_MASTER_KEY=sk-tiger-gateway-...
```