尚未偵測到更新。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.