WarmMemo is a Flutter Web and Firebase application that helps families and funeral-service teams prepare memorial content and manage the journey from a proposal to delivery.
- Create and share memorial pages, including public links and QR codes.
- Draft, rewrite, export, and share digital obituaries.
- Plan end-of-life finances and meaningful experiences with the Final Countdown planner.
- Purchase service packages, follow order progress, and receive notifications.
- Generate digital-persona skills from daily-life or workplace templates.
- Give administrators a secure workspace for orders, suppliers, materials, delivery milestones, and funnel reporting.
The core business workflow is:
proposal → admin review → supplier assignment → material confirmation → delivery schedule
- Flutter Web
- Firebase Authentication
- Cloud Firestore
- GitHub Actions and GitHub Pages
flowchart TB
user[Families and service teams]
ci[GitHub Actions<br/>analyze, test, build]
pages[GitHub Pages]
ci --> pages
user --> pages
subgraph webapp[Flutter Web application]
routes[AuthGate and public routes]
features[Feature UI<br/>memorial, obituary, packages, admin, skills]
domain[Services and repositories<br/>validation, workflow, cache]
shared[Core utilities<br/>export, QR, UI feedback]
routes --> features
features --> domain
features --> shared
end
pages --> routes
domain --> auth[Firebase Authentication]
domain --> firestore[Cloud Firestore]
rules[Firestore security rules] -. authorize reads and writes .-> firestore
domain --> links[Stripe Payment Links]
domain -. optional authenticated invoice API .-> functions[Firebase Cloud Functions]
functions --> stripe[Stripe API]
The standard GitHub Pages deployment uses Stripe Payment Links directly. Cloud Functions are optional and are not required for the free-tier checkout flow.
Prerequisites: a Flutter SDK compatible with Dart ^3.11.0, plus a Firebase project configured for the app.
flutter pub get
flutter run -d chrome --dart-define-from-file=env/payment.dev.jsonConfigure payment, authentication, and public-link behavior with Dart defines or your deployment environment.
| Variable | Purpose |
|---|---|
WARMEMO_USE_HOSTED_PAYMENT_LINKS |
Enable hosted payment links. |
WARMEMO_PAYMENT_BACKEND_URL |
Payment backend base URL. |
WARMEMO_PAYMENT_FUNCTION |
Firebase payment function name. |
STRIPE_PAYMENT_LINK_120000 |
Stripe link for the 120,000 tier. |
STRIPE_PAYMENT_LINK_150000 |
Stripe link for the 150,000 tier. |
STRIPE_PAYMENT_LINK_220000 |
Stripe link for the 220,000 tier. |
WARMEMO_AUTH_PERSISTENCE |
Authentication persistence; defaults to SESSION. |
PUBLIC_BASE_URL |
Recommended base URL for public pages and QR codes. |
The GitHub Pages deployment uses Stripe-hosted Payment Links and does not require Cloud Functions. Each checkout appends the Firestore order ID as Stripe's client_reference_id, allowing an administrator to match the Stripe Dashboard payment to the order before manually setting paymentStatus=paid.
LINE Pay is not shown in the application because its request-and-confirm protocol requires an executable backend. Do not expose the experimental server/ reservation endpoint as a complete payment flow without adding the confirmation call and authoritative status reconciliation.
flutter analyze
flutter test
flutter test --coverageCoverage is written to coverage/lcov.info.
flutter build web --release --base-href "/warmmemo/" --dart-define-from-file=env/payment.dev.jsonFirestore rules protect role assignment, token balances, payment status, and order ownership. Administrative operations such as supplier management, material confirmation, and delivery scheduling are restricted to administrators. Review firestore.rules before changing data access.
- PDF exports can fall back to a less complete Chinese font when network access is unavailable and no local subset font is included.
- After a GitHub Pages deployment, browsers with an older cached service worker may briefly request outdated assets; use a hard refresh if needed.