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
π Resident-Facing Technology Map
A plain-language view of the tools residents see or touch
flowchart LR subgraph Users["π₯ Users"] U["Residents & Guests"] URC["RC Members"] end subgraph Access["π§ Access"] ENTRY["Website Access"] N_ACCESS["Notion Access"] end NOTION["β Notion (central hub)"] SITE["π Public Website"] subgraph Site_Sections["π Public Website Sections"] S_HOUSE["π House Updates"] S_RC["π’ RC Announcements"] S_SUPPORT["π Support Hub"] S_CALS["π Calendars"] S_EDIT["π Editions"] S_MOM["πΈ Moments"] S_PUB["πΊ Pub Initiatives"] S_NOTES["π Public Meeting Notes"] S_VOTE["π³οΈ Voting (Alpha)"] S_ANALYTICS["π Analytics (Alpha)"] S_CONTACT["βοΈ Contact the Council"] S_MEET["π₯ Meet the Council"] end subgraph Intake["π§Ύ Intake & Operations"] FORMS["π§© Other Forms (Google, Tally, Qualtrics, etc.)"] FORMDB["ποΈ Universal Form DB (manual setup)"] SHORT["π Short.io (short links)"] VOTE_DB["π³οΈ Any Voting DB"] N8N["βοΈ n8n Automations"] CAL_SYS["π Calendar System (Resend, Turnstile, Mixpanel)"] end classDef hub fill:#fff7d1,stroke:#4a4a4a,stroke-width:2px classDef touch fill:#f5f7ff,stroke:#4a4a4a,stroke-width:1px classDef intake fill:#f7fbf2,stroke:#4a4a4a,stroke-width:1px classDef access fill:#f1f1f1,stroke:#4a4a4a,stroke-width:1px class NOTION hub class SITE,S_HOUSE,S_RC,S_SUPPORT,S_CALS,S_EDIT,S_MOM,S_PUB,S_NOTES,S_VOTE,S_ANALYTICS,S_CONTACT,S_MEET touch class FORMS,FORMDB,SHORT,VOTE_DB,N8N,CAL_SYS intake class ENTRY,N_ACCESS access U --> ENTRY URC --> ENTRY U --> N_ACCESS URC --> N_ACCESS ENTRY --> SITE N_ACCESS --> NOTION NOTION --> N8N N8N -->|content feeds| SITE SITE --> S_HOUSE SITE --> S_RC SITE --> S_SUPPORT SITE --> S_CALS SITE --> S_EDIT SITE --> S_MOM SITE --> S_PUB SITE --> S_NOTES SITE --> S_VOTE SITE --> S_ANALYTICS SITE --> S_CONTACT SITE --> S_MEET FORMS -->|submissions| FORMDB FORMDB -->|intake data| NOTION SHORT -->|short links| SITE VOTE_DB -->|results, status| NOTION VOTE_DB -->|results link| S_VOTE NOTION -->|events feed| CAL_SYS CAL_SYS --> S_CALS
π§© 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 |