尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
正在載入完整 README。 以下為已儲存的摘錄。
A browser-based Google Calendar assistant with natural-language event management, intelligent scheduling, calendar views, review planning, and time statistics. It is built with plain HTML, CSS, and JavaScript—without a framework, build step, or backend server.
This project is currently in personal testing. While the Google OAuth consent screen remains in testing mode, only accounts added as test users can sign in.檢視完整 README ↗A browser-based Google Calendar assistant with natural-language event management, intelligent scheduling, calendar views, review planning, and time statistics. It is built with plain HTML, CSS, and JavaScript—without a framework, build step, or backend server.
This project is currently in personal testing. While the Google OAuth consent screen remains in testing mode, only accounts added as test users can sign in.
The companion desktop application is maintained in the separate calendar-widget repository.
The applications do not load each other's source code or share localStorage. They work together through the same Google Calendar account:
#tag event name title convention.Changes to tag names or the event-title format must be checked in both repositories.
There is no build step. Serve the repository through a static HTTP server instead of opening index.html directly:
git clone https://github.com/brightcolin/smart-calendar.git
cd smart-calendar
python -m http.server 8080
Alternatively:
npx serve .
Then open http://localhost:8080.
Before signing in locally, add the local origin to the authorized JavaScript origins of your Google OAuth client. Production deployments must use HTTPS, and their actual origins must also be authorized.
GOOGLE_CLIENT_ID near the top of app.js to the OAuth Client ID.The application currently requests these scopes:
https://www.googleapis.com/auth/calendar
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email
An OAuth Client ID is a public identifier, not an access token. Never commit a Client Secret, Access Token, or Refresh Token.
After signing in, open Settings and enter a DeepSeek API key. AI requests are sent directly from the browser to the DeepSeek API.
The key is encrypted before being written to browser localStorage, but this does not protect it from malicious same-origin scripts, XSS, browser extensions, or anyone who already has access to the local operating-system account. Use a dedicated key, set an appropriate spending limit, and revoke it if exposure is suspected.
The public source does not contain the author's timetable, routines, exam dates, or review tasks. Personal data is stored in the current browser:
Do not upload exported personal configuration to a public repository. This repository ignores /private/ and /备考计划.md, but these paths should never be force-added with git add -f.
The recommended event-title format is:
#tag event name
The default tags are 学习 (study), 课程 (class), 科研 (research), 社工 (community work), 运动 (exercise), 娱乐 (leisure), 工作 (work), and 其他 (other).
Event descriptions may contain these compatibility fields:
预估时长:90分钟
实际:80分钟
状态:已完成
标签:学习
Do not change these formats casually. Historical events, statistics, and the desktop Widget depend on them.
The application can be deployed to GitHub Pages, Cloudflare Pages, or another static hosting service:
There is no backend. Calendar events are stored by Google; the local task mirror and personal settings are stored in browser localStorage.
以上為 README 的開頭部分。其餘內容請閱讀原文。 檢視完整 README ↗