Agentero
Connect your own Agent, keep research context in a local Vault. Seamlessly migrate from Zotero, read, understand, link, and reuse your research context.
AI translation
Plan tasks, calendar events, and focus sessions to boost productivity
Translation pending
AI summary · website content
ProductivityHTML · JavaScriptGitHub @jwoo05OnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Real-time focus accountability built on Claude vision. Screen + camera analysis, live focus score, AI coaching report, study rooms with leaderboards, weekly wagers, and a real video lapse of every session.
npm run setup # installs deps, generates Prisma client, pushes schema, copies .env
# edit .env to add your ANTHROPIC_API_KEY and a NEXTAUTH_SECRET
npm run dev # Next.js on :3000 + socket server on :3001
Open http://localhost:3000, click Get started, and create an account at /signup. From there start a focus session at /session.
If the UI ever looks unstyled / "text-only", run
npm run setupagain. That regenerates the Prisma client and clears Next.js's stale cache — the two most common culprits.
The standalone planner files are focus-app.html, focus-app.css, focus-logic.js, focus-auth.js, and firebase-config.js. The planner now uses Firebase email/password auth and keeps timer runtime in local storage, so a refresh will restore an active timer.
To move an old local planner into a public account:
focus-app.html locally and go to Settings → Backup Data → Export backup.firebase-config.js.{
"rules": {
"users": {
"$uid": {
".read": "auth != null && auth.uid === $uid",
".write": "auth != null && auth.uid === $uid"
}
}
}
}
users/<firebase uid>/plannerState in Realtime Database and also keep a local browser cache.| Variable | Required? | What it does |
|---|---|---|
ANTHROPIC_API_KEY | Yes | Powers live focus analysis + the end-of-session coaching report. |
NEXTAUTH_SECRET | Yes | Encrypts the auth session cookie. openssl rand -base64 32 works. |
DATABASE_URL | Yes | Defaults to a local SQLite file. Swap for Postgres in production. |
GOOGLE_CLIENT_ID / GITHUB_CLIENT_ID | Optional | Only needed if you want Google / GitHub OAuth. Email + password works without them. |
Focus AI is a standard Next.js app and deploys cleanly to Vercel, Render, Railway, Fly, or anywhere that runs Node 20.
goat-app.vercel-build (prisma generate && prisma db push --accept-data-loss && next build).NEXTAUTH_URL = your Vercel URL.The Socket.io leaderboard server (server/index.js) is a separate process — deploy it on Render / Fly / Railway as a Node service and set NEXT_PUBLIC_SOCKET_URL to its public URL. The web app works without it; only live room leaderboards need it.
npm install
npx prisma generate
npx prisma db push --accept-data-loss # or `prisma migrate deploy` with migrations
npm run build
npm run start
# in another process:
npm run server
Put it behind a reverse proxy (Caddy / Nginx) with HTTPS — getDisplayMedia and getUserMedia only work on https:// (or localhost).
/session.runImmediateAnalysis():
/api/analyze-frame.focusScore, isFocused, distractions, behaviors, summary) updates Zustand state, the live ring score, and the action log..webm video lapse client-side via MediaRecorder (no upload, no storage cost). The session and AI report are persisted via PATCH /api/session.src/
├── app/
│ ├── login/, signup/ # Email + password auth
│ ├── session/page.tsx # The focus session UI
│ ├── api/analyze-frame/route.ts # Claude vision endpoint
│ ├── api/session/route.ts # Start / end + coaching report
│ ├── api/auth/register/route.ts # Account signup (PBKDF2 password)
│ └── api/auth/[...nextauth]/route.ts # NextAuth handler (credentials + OAuth)
├── components/session/FocusRuntimeProvider.tsx # The 4s analysis loop + alerts
├── lib/openai.ts # Claude prompts + robust JSON parsing
├── lib/auth.ts # NextAuth config + PBKDF2 helpers
├── lib/createTimelapse.ts # Side-by-side webm lapse builder
└── store/sessionStore.ts # Zustand session state
Prisma schema in prisma/schema.prisma. Every focus session stores a row in FocusSession, every AI-analyzed frame in FrameAnalysis, and the end-of-session coaching report in SessionReport. Raw screenshots and camera frames are never stored — only the AI's structured analysis. Timelapse video is built and held in the browser.
| Layer | Tool |
|---|---|
| Frontend | Next.js 14 (App Router), React, Tailwind CSS |
| State | Zustand |
| Real-time | Socket.io (rooms + leaderboards) |
| Auth | NextAuth credentials provider (PBKDF2) + optional Google / GitHub |
| Database | Prisma — SQLite for dev, Postgres for prod |
| AI | Claude Sonnet 4.5 (vision + reasoning) |
| Charts | Recharts |
| Video | Browser-native MediaRecorder + <canvas> |