MinuteFile Portfolio Metrics handoff

MinuteFile sells one perpetual licence for US$39 through the active live Stripe Payment Link used on the product page. The price is one_time, so active paying subscriptions are not applicable. MinuteFile also has no account service, backend, or product user database, so total product subscribers/users is not an available product-defined population and is not applicable. These terminal decisions are recorded in metric-applicability.json; neither is represented as zero.

The only applicable Portfolio Metrics business metric is Stripe net revenue. The project-owned collector uses the already-authorized local Stripe CLI in live, read-only mode. It explicitly selects the existing default CLI project, verifies that /v1/account is the intended MotionObj account, then verifies the exact Payment Link and one-time USD price before computing one completed Asia/Singapore source-local day:

  • gross revenue: sum of amount_total for completed, paid Checkout Sessions created through the exact MinuteFile Payment Link;
  • refund amount: sum of successful Refunds created in the same window whose payment intent resolves to a Checkout Session for that Payment Link;
  • net revenue: gross minus refunds, in USD cents. Stripe fees and taxes are not deducted.

Raw Stripe responses remain only in process memory. The collector writes only canonical aggregate JSON and a canonical Portfolio Metrics KPI envelope. No customer rows, emails, names, payment objects, customer/payment identifiers, credentials, URLs, or raw provider payloads are written or printed.

Run an exact completed source day:

bun run analytics/portfolio-metrics/src/minutefile-stripe.ts collect \
  --date YYYY-MM-DD --recorded-at ISO_INSTANT \
  --repo /Users/hboon/p/motionobj.com/motionobj.com

The coordinator supplies one stable --recorded-at instant for the run so an exact retry has identical canonical bytes. Outputs are content addressed beneath analytics/portfolio-metrics/aggregates/ and analytics/portfolio-metrics/outbox/stripe/. Exact reruns are byte-identical and report idempotent: true; conflicting bytes fail closed. The aggregate contains only the three currency-minor totals and bounded request metadata. The outbox envelope follows Portfolio Metrics KPI contract 1.0.0 and contribution contract 2.0.0. Central must add the MinuteFile Stripe binding to its KPI registry before staging; central never invokes this collector or Stripe.

Recommended scheduling boundary: the MotionObj Loop Coordinator runs the exact command once daily at 17:45 Asia/Singapore for the previous Singapore calendar day, then hands the contribution path and SHA-256 to the approved Portfolio Metrics inbox manifest. A failed provider request or validation writes nothing, returns nonzero, and remains unavailable/not-collected rather than zero. This repository creates no loop, cron job, reminder, deployment, or retry.