Documentation

Rempla Docs

Architecture, decisions, summaries, and reference materials for the Rempla remembrance planning platform.

Polished Overviews
High-level summaries of key platform concepts — designed to be read and shared.
Technical Design
Domain model, system architecture, and strategic direction.
Architecture Decision Records
Key technical decisions and the reasoning behind them.
ADR-016: Communications Delivery & the Communication Log MD
Rempla composes and sends nothing itself, and nothing it causes to be sent goes through the outbox. Replaces Notification.DeliveryId with a polymorphic subject so a protector invitation has somewhere to point, makes a message per-party per-channel so partial failure is visible, and adds inbound as its own table — a bounce, an opt-out and a protector's answer are not states of the message we sent. Draining becomes an explicit job, and the drain, not the customer's click, is what may report a message as sent. Amended 2026-09-10: §1 and §2 are built and migrated; the sending identity is notify.rempla.com, chosen because the root domain's SPF is a hard fail authorizing Outlook alone; and the drain job has no host, because nothing in the solution runs in the background and IIS recycles what would.
ADR-015: Plan Protector as a Party MD
Promoting the protector from a bare role edge to a designation with a status, its own snapshotted contact, an annual clock, and event-scoped confirmation rows. ADR-004's account-level edge was right and is kept as a projection. Unresponsive is derived from the clock, never set by hand; removal is a transition, not a delete. The verification engine that consumes a confirmation is named and deferred. Amended 2026-08-31: the stored status drops Unresponsive to a derived standing, and the backfill is Pending-never-invited rather than Accepted.
ADR-014: Vendor Listing State & Capability Scope MD
Replacing the constant VendorProduct.Availability with a Delisted state our own catalog sync infers when a product leaves the feed — and only from a provably complete read. "Not offered" bubbles up to the product as a derived state that never rewrites operator-owned Status. Vendor capabilities split into operator-recorded, observed-and-cached, and per-order questions stored nowhere.
ADR-013: Offer Status Ownership & Customer-Facing Offer Selection MD
Splitting VendorOfferStatus into a sync-owned availability and an explicit Product.ActiveVendorOfferId selection that replaces Priority. Routing fails closed rather than silently substituting a vendor and its price. Amended 2026-08-12: the per-offer disabled flag is removed — vendor status and selection already covered it.
ADR-012: Vendor Catalog → Product Catalog Bridge MD
VendorProduct as a staging tier outside the catalog, joined to VendorOffer by an explicit human bind act. Amended 2026-07-30: bind is a product-side act searching the whole vendor catalog by vendor and category; bulk-create deferred.
ADR-011: Catalog Image Storage MD
Images in a Rempla-owned root outside the web roots, the database holding only a category-relative path, with ICatalogImageResolver as the single seam to the delivered URL.
ADR-010: Scheduled Gift Domain Model MD
The Scheduled Gift plan-domain aggregate (CustomerScheduledGift + ScheduledGiftTransaction), mirroring the Vault flow; recurrence, anchors, and the Rempla Gift Reserve. Amended 2026-08-12: the gift is always paid in full at signup, designing out the instalment under-funding risk.
ADR-009: Ordering & Fulfillment MD
Turning a scheduled occurrence into a Delivery — vendor routing, the fulfillment port, and Reserve accounting. Amended 2026-07-21 with the layered vendor-integration model: config for transport, code for meaning. Amended 2026-08-17: a purchase-time vendor snapshot on the transaction, so processing becomes a best-match comparison — the customer is never charged more, which is exactly why the underwritten cost must be recorded. Records why an offer is not frozen once ordered against: mutable catalog, immutable documents that copy what they need.
ADR-008: Product Catalog Architecture MD
ADR-007: Relationship Grouping & Date Types MD
ADR-006: Relationship Chain Computation MD
ADR-005: Panel-Based SPA Architecture MD
ADR-004: Person-Centric Role Architecture MD
ADR-003: Admin Portal — Razor Pages MD
ADR-002: Validation Strategy MD
ADR-001: Authentication — Descope MD
Brand Identity
Brand direction, visual identity, and design exploration.
External Materials
Prototypes, process documents, and other reference materials from the team.