Lattice
A workspace for your research.
Capture, organize, prioritize, and get pings for life, home, and work — with AI that proposes and you confirm.
ProductivityTypeScript · JavaScriptGitHub @dgeneticsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A personal (and soon multi-user) operating system for life, home, and work.
Capture messy notes. AiEA proposes structure — one-time vs recurring, priorities, deadlines, people follow-ups — you confirm. Then it surfaces a Today board, Daily Brief, and in-app pings so you stay ahead.
• Next.js 16 (App Router) + TypeScript + Tailwind
• Prisma 7 + SQLite (local); schema is workspace-scoped for multi-tenant later
• SpaceXAI / xAI (grok-4.5) for capture + brief (optional; heuristics work without a key)
• PWA manifest for installable web appRead the full README ↗A personal (and soon multi-user) operating system for life, home, and work.
Capture messy notes. Farm Manager proposes structure — one-time vs recurring, priorities, deadlines, people follow-ups — you confirm. Then it surfaces a Today board, Daily Brief, and in-app pings so you stay ahead.
grok-4.5) for capture + brief (optional; heuristics work without a key)# 1. Install deps
npm install
# 2. Env
cp .env.example .env
# Optional: set XAI_API_KEY from https://console.x.ai
# 3. Database
npm run db:migrate
# or: npx prisma migrate dev
# 4. PWA icons (optional)
npm run icons
# 5. Dev server
npm run dev
Open http://localhost:3000 → Get started → create an account.
| Flow | What happens |
|---|---|
| Capture | Paste brain-dump → AI proposes tasks → you accept |
| Today | Priority + due-today + follow-ups |
| People | Open loops per person |
| Recurring | Templates; occurrences auto-materialize when due |
| Daily Brief | Morning-style briefing + coach tips |
| Pings | Bell menu for due reminders |
| Script | Purpose |
|---|---|
npm run dev | Dev server |
npm run build | Production build |
npm run db:migrate | Apply migrations (local SQLite) |
npm run db:push:turso | Apply Prisma migrations to Turso (prod/preview — Vercel build does not migrate) |
npm run db:studio | Prisma Studio |
npm run icons | Generate PWA icons |
| Var | Purpose |
|---|---|
DATABASE_URL | SQLite path (file:./dev.db) |
TURSO_DATABASE_URL / TURSO_AUTH_TOKEN | Production libSQL. Preview uses its own database, aiea-db-preview, not production. |
Starting the app does not copy a bf-maintenance database and does not change the schema. Production (aiea-cyan) stays on the old schema until you push the schema immediately before merge, then merge right away — the code that is live now breaks on the new schema.
Back up first (turso db shell <db-name> ".dump" or a Turso branch). Count tasks before and after (SELECT COUNT(*) FROM Task). Find the workspace with SELECT id, name, createdAt FROM Workspace. Then:
vercel env pull .env.vercel --environment=production --yes
FARM_SCHEMA_PUSH=1 node --env-file=.env.vercel scripts/push-turso-schema.mjs
Import only after that backup, into the workspace id you looked up. Load the production env with --env-file. BF_SOURCE_* stays on this command, never in Vercel.
FARM_IMPORT_ALLOW_REMOTE=1 \
BF_SOURCE_DATABASE_URL="libsql://..." \
BF_SOURCE_AUTH_TOKEN="..." \
npx tsx --env-file=.env.vercel scripts/import-bf-data.ts --workspace <id>
A file database needs an explicit --local. With TURSO_DATABASE_URL unset and no --local, the script refuses so it cannot write dev.db:
BF_SOURCE_DATABASE_URL="file:./bf.db" \
npx tsx scripts/import-bf-data.ts --local --workspace <id>
| XAI_API_KEY | SpaceXAI / xAI key — console.x.ai |
| XAI_MODEL | Optional model override (default grok-4.5) |
| XAI_BASE_URL | Optional API base (default https://api.x.ai/v1) |
| AIEA_TIMEZONE | Optional IANA tz for AI date reasoning (e.g. America/New_York) |
| AUTH_SECRET | Session hardening (change in prod) |
| CRON_SECRET | Auth for /api/cron/materialize-schedules (daily 12:00 UTC) |
| BF_SOURCE_DATABASE_URL / BF_SOURCE_AUTH_TOKEN | Old bf-maintenance database for scripts/import-bf-data.ts. One-shot, on your machine. Never set these in Vercel. |
| FARM_IMPORT_WORKSPACE_ID | Workspace that receives that import (or pass --workspace) |
| FARM_SCHEMA_PUSH | Set to 1 to allow scripts/push-turso-schema.mjs on a remote database. Not a Vercel env var. |
| FARM_IMPORT_ALLOW_REMOTE | Set to 1 to allow the import script to write to Turso. Not a Vercel env var. |
Remove these from Vercel when this app ships: BF_MAINTENANCE_URL, BF_MAINTENANCE_ORIGIN, NEXT_PUBLIC_BF_MAINTENANCE_URL, BF_INTEGRATION_SECRET. Keep CRON_SECRET, TURSO_DATABASE_URL, TURSO_AUTH_TOKEN, AUTH_SECRET, and XAI_*. After the import, freeze bf-maintenance.vercel.app (no further deploys or edits).
.env (never commit this file):XAI_API_KEY="xai-..."
npm run dev) so Next.js reloads env.GET /api/ai/status?ping=1Without a key, Capture still works via local heuristics.
Private — all rights reserved unless you choose otherwise.
Hong / agents: use poteto-mode with the project skill .cursor/skills/verify-aiea/ (launch → doctor → Playwright drive → evidence). Confirm ~/.cursor/rules/pstack-models.mdc on the box. One-shot:
./.cursor/skills/verify-aiea/scripts/gate.sh --local --feature capture-accept
Live/post-auth needs AIEA_SMOKE_EMAIL + AIEA_SMOKE_PASSWORD (both; smoke user only — never personal / 1Password). When unset, gate.sh --live-smoke clean-skips (CI stays green). On a pull request it also clean-skips: production is still the pre-merge app, while this revision’s doctor requires the public landing page on logged-out GET / and 307 to /tasks when signed in. That check stays strict on main. Hong creates the smoke User row; verify does not. Set CI secrets with gh secret set (see .cursor/skills/verify-aiea/SKILL.md). Legacy AIEA_EMAIL/AIEA_PASSWORD are demoted — migrate to SMOKE names. No separate BF_* pair for smoke login. Parallel to bf-maintenance verify — do not conflate with BF PIN / #20 login threads.