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
| Service | Purpose | Tech Stack |
|---|---|---|
| ihnyc-rc-landing | Public website with Pages Functions and R2-backed stats/CSV APIs | Pages + R2 |
| ihnyc-rc-cal-landing | Calendar subscriptions with D1 + R2, Resend, Turnstile, Mixpanel | Pages + D1 + R2 |
| ihnyc-rc-vote | Voting worker with D1, Durable Object token manager, and scheduled tasks | Worker + D1 + DO |
| ihnyc-rc-gallery | Gallery worker with R2 + KV and scheduled repair jobs | Worker + R2 + KV |
| pub-scheduler-n8n | Pub 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
| Folder | Purpose |
|---|---|
| overview | System-wide overview and decisions |
| platform | Shared patterns (security, naming, API contracts) |
| services | Per-service onboarding pages |