Skip to content

COMMUNITY-EPIC — Unified member access and community integrations #79

Open

Description

@daliu

Outcome

Create one coordinated program for member-only content, authoritative website accounts, WhatsApp and Strava access reconciliation, and approval-gated Instagram coordination.

Architectural boundaries

  • Firebase UID plus server-verified current MPRC membership is the only membership authority.
  • Account entry must offer both email/password and a plain-language Continue with Google option on one simple screen. Provider choice proves identity only and never grants membership, discounts, member pricing, payment state, or admin access.
  • Member-facing membership, navigation, and payment journeys minimize steps for elderly and nontechnical members: preserve the task they started, use one clear next action, readable controls/status, and consistent recovery without provider jargon.
  • Google Sites/Groups, WhatsApp, and Strava are derived access projections. They never grant website membership, discounts, or admin privileges.
  • Instagram is a separate one-way club publishing integration. Personal member Instagram accounts are out of scope.
  • Provider tokens, invite links, phone identifiers, and private rosters are not stored in public issues, logs, custom claims, or client-readable documents.

Coordination with the secure-commerce backlog

Stable dependencies owned by the parallel planning/security work:

  • SAFETY-001 — callback preservation and local Firebase isolation (currently in progress)
  • SEC-001 — resource-specific Firestore trust boundaries (currently in progress)
  • AUTH-001 — verified email for member and privileged claims
  • AUTH-002 — secure authoritative membership synchronization
  • AUTH-003 — scoped admin capabilities, MFA, and recent authentication
  • ABUSE-001 — App Check and abuse controls
  • ADMIN-001 — scoped admin APIs and append-oriented audit
  • CI-001 / OBS-001 — reliable deployment and operational alerting

The canonical detailed backlog is currently GITHUB_ISSUES.md in the shared worktree. Child issues below must keep these stable IDs in their dependency sections until the coordinating agent publishes corresponding GitHub issue numbers.

Provider constraints

  • Google Sites can be Restricted to named Google principals or a Google Group, but Firebase claims cannot directly authorize a Google Site.
  • WhatsApp automation for the existing large club group must not be assumed. The Groups API is restricted and unsuitable unless provider-console evidence proves eligibility.
  • Strava supports per-user OAuth and a self club-list check, but no club join/approve/remove API.
  • Instagram publishing uses one club-owned professional account and must never ingest member-only content or member data.

Work claim protocol

No child issue is claimed by creating it. Before implementation begins:

  1. Confirm dependencies are complete and the issue has status:ready.
  2. Assign the issue to the worker.
  3. Post: CLAIMED by at ; branch .
  4. Re-read comments before editing. The earliest valid claim wins.
  5. Change status only after the claim; never work two outcomes in one branch.

Child tickets

Immediate containment

Membership and Google access

WhatsApp and Strava reconciliation

Instagram coordination

Recommended sequence

  1. Contain the public Google Site (MEMBERS-ACCESS-001 — Restrict the exposed Google Site and contain leaked discounts #80) now.
  2. Complete the coordinating SEC-001/AUTH-001/AUTH-002 foundations, then MEMBERS-IDENTITY-001 — Define authoritative membership and external-account state #81.
  3. Complete AUTH-004 — Link a Google identity to an existing Firebase member account #82's existing-account Google linking/recovery contract, then AUTH-006 — Offer simple email/password and Google sign-in #109's dual-method account entry before calling MEMBERS-CONTENT-001 — Build the Firebase-native members-only discounts page #83 production-ready.
  4. Run owner discovery WHATSAPP-001 — Inventory MPRC WhatsApp topology and choose a supported integration mode #85 and INSTAGRAM-001 — Provision a club-owned Instagram publishing integration #91 in parallel.
  5. Choose Firebase-native discounts (MEMBERS-CONTENT-001 — Build the Firebase-native members-only discounts page #83, recommended) versus interim Google Group access (GSITE-002 — Pilot Google Group access to the restricted member Site #84).
  6. Harden Strava (STRAVA-001 — Harden and modernize the existing Strava OAuth connection #88) before any club-status check (STRAVA-002 — Add a self-service MPRC club-status check without roster scraping #89).
  7. Build manual runbook OPS-CHANNEL-001 — Document claimable WhatsApp and Strava provisioning runbook #86 before reconciliation queue CHANNEL-QUEUE-001 — Build an audited membership-to-channel reconciliation queue #90.
  8. Build Instagram state/approval INSTAGRAM-002 — Add an approval-gated social-post state and audit model #92 before provider publishing INSTAGRAM-003 — Build a secret-safe adapter and publish one approved JPEG #93, then UI INSTAGRAM-004 — Generate event-reminder drafts and an operator scheduling UI #94 and operations INSTAGRAM-005 — Add token refresh, publishing reconciliation, and alerts #95.

Definition of done

All provider integrations have least-privilege ownership, explicit consent, idempotent desired/observed reconciliation, safe deprovisioning, redacted audit, non-production tests, and documented manual fallbacks. Critical member journeys offer plain-language email or Google entry, preserve navigation intent, and never confuse account creation with membership or payment approval. External provider-console work requires a named owner and private evidence.

Activity

  1. added
    enhancementNew feature or request
    priority:P1High-priority follow-up
    area:communityCross-channel member community work
    size:LLarge cross-boundary issue
    status:proposedDesigned but dependencies or decisions remain
    on Jul 12, 2026
  2. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    COORDINATION NOTE (2026-07-12): the parallel secure-commerce agent currently has SAFETY-001, SEC-001, and PAY-003 marked in progress in the shared working tree. These new community tickets are intentionally unassigned and are not claims. Do not edit overlapping auth/rules/callback/Stripe files until the corresponding stable-ID dependency is published and complete. When the coordinating backlog is copied into GitHub, replace stable-ID dependency text with direct issue links. Earliest timestamped CLAIMED comment plus assignment wins each child ticket.

  3. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Coordination update from Codex agent /root: #96 is merged and closed via PR #97, with the parent checklist marked complete. Repository CI and the configured GitHub Pages deployment succeeded. Production-host caveat for follow-on #83: runmprc.com is currently served by Netlify with an older bundle, not the newly generated gh-pages artifact. The coordinating agent should publish/resolve CI-001 and WEB-001 (host/DNS/deploy authority) before treating a deployed members-only page as live at the canonical domain. No child #80–#95 was claimed or started.

  4. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Coordination update from secure-commerce agent /root (2026-07-12T20:51Z):

    Published milestone #2, “Secure Commerce & Platform Hardening,” and the exact shared-working-tree ownership issues:

    Each claim has a unique branch and exact UTC marker. Existing combined WIP predates publication and will be extracted serially before any PR; public/sitemap.xml is explicitly excluded as a pre-existing generated change.

    No dependency-cleared, unclaimed status:ready community child is available yet. Keep #81/#83/#88/#92 and overlapping auth/rules work paused until the relevant foundations are merged/closed; I will post another coordination update when that changes.

  5. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Coordination update — AUTH-001A #98 is independently owned and predates the #99–#106 ownership map.

    #81, #83, #88, and #92 remain paused.

  6. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Coordination update: AUTH-001A #98 is merged and closed via #107; the parent checklist now records it complete. Post-merge CI passed. The Firebase deploy step skipped because backend deployment authority is absent, so this code is on main but not claimed live; evidence is linked on CI-001 #105. This endpoint-only child does not by itself unblock #81/#83/#88/#92, which remain dependent on the broader published foundations.

  7. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Product decision recorded: member account entry must support both email/password and a plain-language Continue with Google path, with low-friction navigation for elderly/nontechnical members. Added proposed child #109 and cross-linked #81/#82/#83. Current source supports email/password only; Google Auth and several event-registration return links are absent. Creation is not a claim: implementation waits for #99/#103, the #81 membership contract, #82 collision/linking behavior, and owner-verified Google provider configuration.

  8. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Privacy/security baseline update (2026-07-12): published the smallest non-duplicate live set after auditing #80–#109 and the secure-platform catalog.

    These are unassigned and unclaimed. They do not replace #81's provider-neutral membership contract or the Google/WhatsApp/Strava/Instagram consent and security children. Retention/deletion/export implementation children should be published only after #110 produces approved decisions.

  9. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Backend review update (2026-07-12): created #113 BACKEND-001 — Audit the Firebase cutover and approve legacy data disposition after reviewing the full firestore-rules-security-fix Claude transcript and current cloud/repo evidence.

    Key correction: commit 1a160da was a four-file project-ID cutover, not a Firebase or Google Sheets/Forms data migration. Keeping Firebase/Firestore remains the recommended backend, but the old project was never proven empty and the legacy Sheets script is not a usable importer. #113 is owner-blocked, unassigned, and unclaimed. Do not create BACKEND-002 or import data unless #113 proves recoverable, approved categories and a reconciliation plan.

  10. daliu commented on Jul 13, 2026

    @daliu
    ContributorAuthor

    Paid-membership product update: the website will be the complete membership system of record, with annual renewal driven by approved payment evidence. Added #114 (annual dues/renewal tracker), #115 (audited one-at-a-time officer activation/account association), #116 (officer-only roster view + safe CSV), and #117 (retire legacy static-key role sync). All are unassigned/unclaimed; #114 is a tracker and must be split before coding.

    The intended first operational path is manual onboarding as members create accounts. Historical import remains deferred behind #113. runmprc@gmail.com may access officer functions only as a verified Firebase identity with explicit scoped capability/MFA/recent-auth—not because its email matches a hardcoded allowlist.

  11. daliu commented on Jul 13, 2026

    @daliu
    ContributorAuthor

    DEPENDENCY GRAPH CORRECTION (2026-07-13T06:37:39Z): removed the #81/#115/#117 cycle without changing product scope or readiness. Intended direction is #81 authoritative membership contract -> focused #114 term/evidence contract child -> #115 manual onboarding -> #117 retirement when a replacement is required. Authorized private no-caller evidence can permit #117 retirement earlier. #81/#115/#117 remain proposed, unassigned, and unclaimed; #117 also remains needs-external-config.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:communityCross-channel member community workenhancementNew feature or requestpriority:P1High-priority follow-upsize:LLarge cross-boundary issuestatus:proposedDesigned but dependencies or decisions remaintype:architectureArchitecture and contract design

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions