docs: fix doc drift from D/F/G work — migration 046, harness, subsystem-level facts
DATABASE_SCHEMA + DB_SCHEMA_MAP: 046 migration row (was missing — added last turn but not table-rowed; CLAUDE.md doc-with-change rule). README Features: Stripe recurring dues, transactional notifications, member self-serve portal (Phase 1/2/3 — months of shipped product spine were absent from the first thing a reader sees). ARCHITECTURE: Known Limitations #1 now describes the DB-backed integration harness (the previous 'no harness' claim was misleading); Classes section notes the advisory-lock RPCs (045); Equipment notes the GiST exclusion constraint + btree_gist (042); Door notes the DNS-rebind defense (resolve-once, pin validated IP) + no-raw-reason client policy + auth-param-aware redaction; Stripe webhook notes the out-of-order monotonic period guard (D5), zero-decimal currency handling (D7), and generic error responses (E3); Notifications notes the per-space fair drain + per-attempt Idempotency-Key + .eq('status', 'pending') re-entrancy guard; Authorization adds the RLS-layer privilege-eligible status gate (046).
This commit is contained in:
@@ -20,7 +20,9 @@ A multi-tenant operating system for hackerspaces, makerspaces, and member-run sh
|
||||
- **Equipment.** Tool and equipment registry with time-window reservations, no-overlap enforcement, and an optional required certification per item.
|
||||
- **Access control.** Member access cards (the card UID is treated as a credential), a configurable per-space door integration (native HeatSync controller or generic HTTP) behind an SSRF-guarded executor, and an immutable, secret-redacted access log.
|
||||
- **Onboarding and invites.** A configurable member onboarding flow; multi-use, expiring, role-granting invite links.
|
||||
- **Payments and financials.** Per-member payment ledger, integration credentials per space, exports, monthly financial summary.
|
||||
- **Payments and financials.** Per-member payment ledger, integration credentials per space, exports, monthly financial summary. **Stripe recurring dues** are a first-class integration: each space configures its own Stripe account (not Connect), members pay through hosted Checkout and self-serve cancel/update through the hosted Billing Portal (no card data on our servers), and a per-space signed webhook keeps `member_billing` and member status (`current` / `late`) in sync, never auto-downgrading past `late`.
|
||||
- **Transactional email and notifications.** An idempotent notifications outbox writes dues-lifecycle emails (renewal receipt, payment failed, lapse) from the Stripe webhook; a small dispatcher cron drains them through Resend with a fair per-space queue and per-attempt idempotency. Adding other domains (bookings, forms) reuses the same outbox.
|
||||
- **Member self-serve portal.** Every member's `/me` is a tabbed portal: profile editing, dues management (Pay / Manage Billing), cancel class signups and equipment reservations, a personal payment history, and a verified self-service email change.
|
||||
- **Governance.** Proposals with quorum, vote tracking and expiry; incident reports with anonymous reporter tracking by token; versioned policy library; member forum with polymorphic comments.
|
||||
- **Communications.** Multi-channel chat with realtime delivery.
|
||||
- **Recruitment.** Public-facing recruitment page per space.
|
||||
|
||||
Reference in New Issue
Block a user