Mirror monica_site postcard easy pick-and-send in this template (directmail app): on postcard compose, user chooses mailing-list contactsor1–2 USPS carrier routes, with piece count + estimated cost visible before save/send.
Not official USPS EDDM. PCM First Class / Standard to a purchased occupant list on selected carrier routes.
Related product ticket: (will comment with ai_ml_operations/monica_site issue after it exists).
UX (Portal → Direct mail / postcard compose)
Same as monica:
Recipients: mailing list or find carrier routes.
ZIP (optional address + radius) → PCM ZipCRRT breakdown.
Select one or two routes; show $ per route and selected total (required).
Recount selected routes (POST /list/count/carrier-route) so listCountID is only those routes.
Mailing-list postcard also shows estimated cost.
Cost source
PCM design pricing[]; fallback PCM_POSTCARD_PRICE_FIRSTCLASS / PCM_POSTCARD_PRICE_STANDARD. Standard mail class unless size is 46/46S. Default list type IRL.
## Goal
Mirror monica_site postcard **easy pick-and-send** in this template (`directmail` app): on postcard compose, user chooses **mailing-list contacts** *or* **1–2 USPS carrier routes**, with **piece count + estimated cost** visible before save/send.
Not official USPS EDDM. PCM First Class / Standard to a purchased occupant list on selected carrier routes.
Related product ticket: (will comment with `ai_ml_operations/monica_site` issue after it exists).
## UX (Portal → Direct mail / postcard compose)
Same as monica:
- Recipients: mailing list **or** find carrier routes.
- ZIP (optional address + radius) → PCM ZipCRRT breakdown.
- Select one or two routes; **show $ per route and selected total** (required).
- Recount selected routes (`POST /list/count/carrier-route`) so `listCountID` is only those routes.
- Mailing-list postcard also shows estimated cost.
## Cost source
PCM design `pricing[]`; fallback `PCM_POSTCARD_PRICE_FIRSTCLASS` / `PCM_POSTCARD_PRICE_STANDARD`. Standard mail class unless size is `46`/`46S`. Default list type `IRL`.
## Data / send
- Audience `carrier_route` on `directmail.Campaign`.
- Persist targeting JSON (`listCountID`, routes, quote).
- Do not import purchased occupants into Contacts.
- Send via `POST /order/postcard/with-list-count`.
- Report shows routes + cost, not a fake recipient grid.
Keep template patterns: `directmail` app (not `messaging`), existing PCM adapter, portal CSS.
## Test plan
Same as monica, under `directmail` tests:
- [ ] Mailing-list postcard draft unchanged + cost shown.
- [ ] Route lookup/select/recount mocked.
- [ ] Draft persists quote; send hits with-list-count once.
- [ ] Email/SMS apps unaffected.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Mirror monica_site postcard easy pick-and-send in this template (
directmailapp): on postcard compose, user chooses mailing-list contacts or 1–2 USPS carrier routes, with piece count + estimated cost visible before save/send.Not official USPS EDDM. PCM First Class / Standard to a purchased occupant list on selected carrier routes.
Related product ticket: (will comment with
ai_ml_operations/monica_siteissue after it exists).UX (Portal → Direct mail / postcard compose)
Same as monica:
POST /list/count/carrier-route) solistCountIDis only those routes.Cost source
PCM design
pricing[]; fallbackPCM_POSTCARD_PRICE_FIRSTCLASS/PCM_POSTCARD_PRICE_STANDARD. Standard mail class unless size is46/46S. Default list typeIRL.Data / send
carrier_routeondirectmail.Campaign.listCountID, routes, quote).POST /order/postcard/with-list-count.Keep template patterns:
directmailapp (notmessaging), existing PCM adapter, portal CSS.Test plan
Same as monica, under
directmailtests:Associated product ticket: ai_ml_operations/monica_site#15
PR: #12
Monica mirror: ai_ml_operations/monica_site#15 → ai_ml_operations/monica_site#16