Lattice
연구를 위한 작업공간
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A local-first calendar and assignment tracker for students. It runs entirely in the browser (installable as a PWA) and can optionally sync across devices through Supabase. Live at datebookcalendar.vercel.app.
An iOS wrapper app lives in calendar-ios. It loads this site in a WebView and adds native reminders, widgets and Live Activities.
event, assignment or task, with status todo, doing or done..nvmrc) and npmnpm install
cp .env.example .env.local # every variable is optional
npm run dev
Open http://localhost:3000.
All variables are documented in .env.example. The ones that switch features on:
| Variable | Enables |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Google sign-in and cloud sync. Schema setup is in SUPABASE_SETUP.md. |
SUPABASE_SERVICE_ROLE_KEY | Server-only: push dispatch and rate limiting. Never expose it to the browser. |
GEMINI_API_KEY | Assistant and syllabus import. GROQ_API_KEY, CEREBRAS_API_KEY, MISTRAL_API_KEY and NVIDIA_API_KEY are fallbacks for the assistant router. |
NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, CRON_SECRET | Closed-app reminders over web push. |
| Command | What it does |
|---|---|
npm run dev | Dev server |
npm run build / npm start | Production build and server |
npm run typecheck | tsc --noEmit |
npm run lint | ESLint |
npm run format / format:check | Prettier |
npm test | Vitest |
npm run security:secrets | Scan tracked files for committed secrets |
localStorage (datebook-store). Supabase sync is layered on top, not underneath: the app never needs the network to work.lib/db-sync.ts) is last-write-wins on updatedAt with tombstones for deletes. A new database column needs a numbered migration in supabase/migrations/ and an entry in STRIPPABLE_COLS, so a project that has not run the SQL yet degrades instead of stalling the write queue.lib/local-assistant.ts) answers date, grade, syllabus and planning questions locally. Anything it cannot answer goes to /api/assistant, which routes across providers in lib/llm/.lib/motion.ts, gesture math in lib/gesture.ts. Hot paths animate only transform and opacity./api/push/dispatch, called every ten minutes by the Push dispatch workflow.app/ routes and API handlers
components/ UI; tab pages are in components/pages
lib/ store, sync, date logic, assistant; tests sit beside the code
supabase/ numbered SQL migrations
public/ manifest, icons, service worker
POST /api/push/dispatch refuses unauthenticated calls once push is configured. The shared secret has to exist in both places, set to the same string:
| Where | What to set |
|---|---|
| Vercel project | environment variable CRON_SECRET, then redeploy |
| GitHub repository | Actions secret CRON_SECRET |
If either side is missing or they disagree, the endpoint answers 401 and every scheduled run fails with a named error.
See CONTRIBUTING.md. Commits follow Conventional Commits and are checked by a git hook and in CI.