尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Crossoff turns today's task list into time blocks on your Google Calendar,
scheduled around everything already on it.
List what you want to get done, most important first, with how long each task
should take and how many sessions to split it into. Crossoff finds your free
time, places the sessions, shows a preview, and adds the plan to your calendar
when you approve it.查看完整 README ↗Crossoff turns today's task list into time blocks on your Google Calendar, scheduled around everything already on it.
List what you want to get done, most important first, with how long each task should take and how many sessions to split it into. Crossoff finds your free time, places the sessions, shows a preview, and adds the plan to your calendar when you approve it.
The full design is in
Day Planner — Product & Technical Spec.md.
Crossoff needs a Google OAuth client ID, and each deployment needs its own: a client ID only works on the web addresses registered with it.
In the Google Cloud console, create a project and enable the Google Calendar API (APIs & Services → Library). No billing account is needed.
Open Google Auth Platform (called OAuth consent screen in older consoles):
https://www.googleapis.com/auth/calendar.eventshttps://www.googleapis.com/auth/calendar.freebusyhttps://www.googleapis.com/auth/calendar.calendarlist.readonlyUnder Clients, create an OAuth client ID of type Web application. Add these as Authorized JavaScript origins (no trailing slash):
http://localhost:5173https://your-app.vercel.appLeave Authorized redirect URIs empty, and don't use the client secret anywhere: the browser-only flow doesn't need it.
While the app is in Testing, only listed test users can connect, and they'll see a "Google hasn't verified this app" warning they can click through. Letting anyone connect without the warning requires publishing the app and passing Google's verification for sensitive scopes, which needs a homepage and privacy policy on a domain you own.
Requires Node.js 22 or later.
npm install
cp .env.example .env.local # then set VITE_GOOGLE_CLIENT_ID
npm run dev # http://localhost:5173
The build is a static site in dist/, so any static host works. On Vercel:
npm run build,
output dist).VITE_GOOGLE_CLIENT_ID and redeploy. It's
built into the page, so changes need a new deploy.| Command | What it does |
|---|---|
npm run dev | Start the dev server (localhost:5173) |
npm test | Run the tests once (npm run test:watch to watch) |
npm run lint | Lint with oxlint |
npm run format | Format with Prettier |
npm run build | Type-check and build to dist/ |
GitHub Actions runs lint, the format check, tests and the build on every push.
src/
scheduler/ the planning algorithm: pure functions, no network
calendar/ Google Calendar API calls (free/busy, calendars, events)
auth/ Google sign-in; the token lives in memory only
storage/ saving tasks and settings in local storage
ui/ React components and app state
The scheduler works in minutes since midnight and knows nothing about Google, so most of the logic is covered by fast unit tests.