What This Platform Is

  • Cloudflare Pages and Workers services for the IHNYC Resident Council
  • Public site, calendar subscriptions, voting, and gallery
  • Deployed independently with distinct runtimes

Sources: ihnyc-rc-landing/wrangler.toml, ihnyc-rc-cal-landing/wrangler.toml, ihnyc-rc-vote/wrangler.jsonc, ihnyc-rc-gallery/wrangler.toml


🧩 Service Directory

ServicePurposeTech Stack
ihnyc-rc-landingPublic website with Pages Functions and R2-backed stats/CSV APIsPages + R2
ihnyc-rc-cal-landingCalendar subscriptions with D1 + R2, Resend, Turnstile, MixpanelPages + D1 + R2
ihnyc-rc-voteVoting worker with D1, Durable Object token manager, and scheduled tasksWorker + D1 + DO
ihnyc-rc-galleryGallery worker with R2 + KV and scheduled repair jobsWorker + R2 + KV
pub-scheduler-n8nPub scheduling automation (availability form, assignments, mass email)n8n + Notion + Formbricks + Email

Sources: Service wrangler configs and respective index/routing files


🗺️ System Context Diagram

System architecture showing all services and external dependencies

flowchart LR
  subgraph Users
    U_RES["USER: Resident"]
    U_ADMIN["USER: Admin"]
  end

  subgraph Services
    S_LANDING["SVC: ihnyc-rc-landing"]
    S_CAL["SVC: ihnyc-rc-cal-landing"]
    S_VOTE["SVC: ihnyc-rc-vote"]
    S_GALLERY["SVC: ihnyc-rc-gallery"]
  end

  subgraph External_Systems
    EXT_NOTION["EXT: Notion"]
    EXT_N8N["EXT: n8n"]
    EXT_RESEND["EXT: Resend"]
    EXT_TURNSTILE["EXT: Cloudflare Turnstile"]
    EXT_MIXPANEL["EXT: Mixpanel"]
    EXT_GITHUB["EXT: GitHub API"]
    EXT_CANVA["EXT: Canva"]
    EXT_SCREENSHOT["EXT: screenshot.website"]
  end

  subgraph Storage
    STORE_R2["STORE: R2"]
    STORE_D1["STORE: D1"]
    STORE_KV["STORE: KV"]
    STORE_ASSETS["STORE: Static Assets"]
  end

  U_RES -->|browse| S_LANDING
  U_RES -->|subscribe| S_CAL
  U_RES -->|vote| S_VOTE
  U_RES -->|view| S_GALLERY
  U_ADMIN -->|admin| S_LANDING
  U_ADMIN -->|admin| S_CAL
  U_ADMIN -->|admin| S_VOTE
  U_ADMIN -->|admin| S_GALLERY

  S_LANDING -->|stats & CSV| STORE_R2
  S_LANDING -->|static files| STORE_ASSETS
  S_CAL -->|subscriptions| STORE_D1
  S_CAL -->|ICS files| STORE_R2
  S_GALLERY -->|media| STORE_R2
  S_GALLERY -->|metadata| STORE_KV
  S_VOTE -->|elections| STORE_D1
  S_VOTE -->|assets| STORE_ASSETS

  S_LANDING -->|changelog| EXT_GITHUB
  S_LANDING -->|previews| EXT_CANVA
  S_LANDING -->|fallback| EXT_SCREENSHOT
  S_CAL -->|magic link| EXT_RESEND
  S_CAL -->|verify| EXT_TURNSTILE
  S_CAL -->|analytics| EXT_MIXPANEL
  S_CAL -->|proxy| EXT_N8N
  S_VOTE -->|emails| EXT_RESEND
  S_VOTE -->|sync| EXT_NOTION
  EXT_N8N -->|write JSON| S_LANDING

Sources: ihnyc-rc-landing/wrangler.toml, ihnyc-rc-landing/functions/api/, ihnyc-rc-landing/N8N_.md, ihnyc-rc-cal-landing/functions/api/, ihnyc-rc-gallery/src/index.ts, ihnyc-rc-vote/src/, ihnyc-rc-vote/wrangler.jsonc


🗺️ Cross-Service Data Flow

How data flows between services and external systems

flowchart LR
  subgraph Users
    U_RES["USER: Resident"]
    U_ADMIN["USER: Admin"]
    U_CAL["USER: Calendar Client"]
  end

  subgraph Services
    S_LANDING["SVC: ihnyc-rc-landing"]
    S_CAL["SVC: ihnyc-rc-cal-landing"]
    S_VOTE["SVC: ihnyc-rc-vote"]
  end

  subgraph External_Systems
    EXT_NOTION["EXT: Notion"]
    EXT_N8N["EXT: n8n"]
    EXT_RESEND["EXT: Resend"]
    EXT_TURNSTILE["EXT: Cloudflare Turnstile"]
  end

  subgraph Storage
    STORE_D1["STORE: D1"]
    STORE_R2["STORE: R2"]
    STORE_ASSETS["STORE: Static Assets"]
  end

  EXT_NOTION -->|export| EXT_N8N
  EXT_N8N -->|write JSON| S_LANDING

  U_RES -->|read| S_LANDING
  S_LANDING -->|serve| STORE_ASSETS

  U_RES -->|subscribe| S_CAL
  S_CAL -->|verify| EXT_TURNSTILE
  S_CAL -->|write| STORE_D1
  S_CAL -->|email| EXT_RESEND
  U_RES -->|verify| S_CAL
  S_CAL -->|mint token| STORE_D1
  U_CAL -->|fetch ICS| S_CAL
  S_CAL -->|read| STORE_R2

  U_ADMIN -->|create| S_VOTE
  S_VOTE -->|write| STORE_D1
  S_VOTE -->|invite| EXT_RESEND
  U_RES -->|vote| S_VOTE
  S_VOTE -->|ballot| STORE_D1
  S_VOTE -->|sync| EXT_NOTION

Sources: ihnyc-rc-landing/N8N_.md, ihnyc-rc-cal-landing/functions/api/subs/.ts, ihnyc-rc-cal-landing/functions/cal/programs.ics.ts, ihnyc-rc-vote/src/routes/*.ts, ihnyc-rc-vote/src/utils/notion.ts


🧭 How to Navigate This Vault

FolderPurpose
overviewSystem-wide overview and decisions
platformShared patterns (security, naming, API contracts)
servicesPer-service onboarding pages