Defaults shown highlighted in green. Change anything Sam wants by editing cece-setup-decisions in KV (or just tell CC).
| Decision | Options | Default |
|---|---|---|
| Auth path | (A) Google OAuth · cleaner, real-time (B) Public ICS URL · faster prototype |
A · Google OAuth recommended |
| Where it lives | (A) Section of /our/(B) Standalone /cece/(C) Both — main on /cece/, summary on /our/ |
C · both recommended |
| CeCe involvement | (A) Set prefs once → app suggests automatically (B) Explicit approve-each-suggestion |
A with B as override recommended |
| Notifications | (A) In-app only (B) Browser push (C) Both, configurable |
A initially recommended |
CeCe's task (~5 min): In Vagaro account → Settings → Google Calendar Integration → enable 2-way sync to her personal Google Calendar. All future bookings flow into Google Calendar automatically. Vagaro support article →
Go to console.cloud.google.com and create a new project. Name it same-solutions-cece-calendar (or similar).
In the project, navigate to APIs & Services → Library, search "Google Calendar API", click Enable.
Same Solutions · CeCe schedulehttps://www.googleapis.com/auth/calendar.events.readonlycece-schedule-webhttps://samesolutions-equipment-service.pages.devhttps://samesolutions-equipment-service.pages.dev/auth/google/callbackSave → copy the Client ID and Client Secret.
From a machine with wrangler authenticated:
wrangler pages secret put GOOGLE_CLIENT_ID
# paste Client ID
wrangler pages secret put GOOGLE_CLIENT_SECRET
# paste Client Secret
(Or set them in the Cloudflare Pages dashboard under Settings → Environment variables.)
✓ Phase 2 functions live as of this commit:
/auth/google/connect · generates CSRF state, redirects to Google consent/auth/google/callback · verifies state, exchanges code for tokens, stores refresh_token in KV/auth/google/disconnect (POST) · revokes at Google + clears KV/calendar/cece-status · GET · returns {connected, config_ok, email, connected_at}/calendar/cece-events?from=&to= · GET · returns normalized event list with category heuristic (work/personal)KV keys used (auto-managed): cece-google-refresh-token (no TTL), cece-google-access-token (55-min TTL), cece-google-status (display data), cece-google-state-* (10-min TTL).
Once Sam finishes Steps 2-6 (Google Cloud setup + Cloudflare env vars), CeCe visits /cece/, taps 🔗 Connect Google Calendar, signs in with her Google account, grants read-only access. Tokens land in KV. Today + Week views immediately swap from placeholder events to her real calendar.
{config_ok: true, connected: false} until CeCe connects. After CeCe connects, connected: true + her email.(Same as Path A · enable Vagaro → Google sync first.)
Google Calendar → calendar settings → "Secret address in iCal format" → copy URL. It looks like:
https://calendar.google.com/calendar/ical/.../private-XXXXX/basic.ics
Tell CC the URL. CC PUTs it to KV key cece-ics-url via /our/data. Next CC session builds /functions/calendar/cece-events.js that fetches that ICS, parses it with a lightweight ICS parser, and returns events as JSON.
Tell CC: "Build Phase 2 of CeCe's calendar — ICS fetch + parse." Page loads pull fresh ICS each time (cached ~5 min in KV).
Vagaro does have an API, but it's contract-only (their B2B platform). Not a fit for one personal user. The Vagaro → Google sync route covers everything we need.
/cece/ Today view · /cece/week.html grid · /cece/preferences.html form (live KV save) · this setup guide/functions/auth/google/connect.js + callback.js + disconnect.js/functions/calendar/cece-status.js + cece-events.js (Google Calendar v3 · category heuristic for work vs personal)/cece/./cece/engine.js · pure browser JS module · window.CeceEngine · no depsall_day ignoredauto = full suggestions · minimal = workout + meal-prep only · off = no suggestions, calendar only · ask behaves like auto with the same accept/snooze/skip buttonscece-evening-{yyyy-mm-dd}cece-suggestion-log (capped at 200 entries) so Phase 4 can adapt templates to what CeCe actually uses/cece/habits.html full page with weekly progress bars (workouts/meal-prep/walks/reading/self-care vs prefs targets) · streak counter (consecutive days with ≥1 accept) · today's accept/skip/snooze counts · recent activity (last 12 log entries) · adaptive nudges (good / neutral / gentle tones based on accept ratio + skip count)