Skip to content

feat(email): introduce React Email templates and a shared Oblidog layout #478

Closed

Description

@wini83

Goal

Establish a reusable email design system and preview/export workflow so scheduled reports and transactional emails can be redesigned consistently.

Scope

  • Add a React Email package/workspace with reproducible locked dependencies and preview/export commands.
  • Build shared branded layout, heading, section, summary, obligation-row, button and footer components.
  • Use readable typography, restrained Oblidog branding and mobile-friendly layouts; avoid wide dashboard-like tables.
  • Define and demonstrate the build-time HTML export / Python Jinja integration for dynamic collections, conditions and escaping. A static HTML export alone must not freeze report data.
  • Export templates during the build or commit generated artifacts with a deterministic freshness check; document the chosen approach.
  • Keep report queries, business rules, scheduling and SMTP delivery in Python. Production sending must not require a Node service or external rendering API.
  • Add synthetic preview fixtures for empty, normal, long-name, long-list, multi-ledger and multi-currency data.

Acceptance criteria

  • Preview and export are reproducible through documented commands.
  • Python safely renders variable-length collections and conditional sections; user-supplied content is escaped.
  • Generated HTML is available in backend images and applicable deployment packaging.
  • Shared layout is readable at mobile and desktop widths, including images-disabled mode and common email-client constraints.
  • Representative rendered previews are visually reviewed.
  • Plain-text delivery remains supported.

Out of scope

Scheduling/preferences changes (#139), delivery retry semantics (#375), changes to report selection or calculations.

Priority

High product value; prerequisite for the report redesign issues.

Upstream references

fastapi/full-stack-fastapi-template PRs fastapi/full-stack-fastapi-template#2421 and fastapi/full-stack-fastapi-template#2451. Adapt the integration to Oblidog's dynamic reports rather than copying only static examples.

Follow-up issues

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions