Curva ✕ Pasukuru — LINE-native ecommerce — Master Plan
Document map
| File | Purpose |
|---|---|
00-master-plan.md (this) | Top-level rollup, phase summary, glossary |
01-framework.md | Planning framework — how every ticket is structured, named, tracked |
02-phase-0-foundation.md | Foundation — webhook completion + identity column |
03-phase-1-liff-wrap.md | LIFF wrap Pasukuru FE + identify endpoint |
04-phase-2-ux-glue.md | Curva FlexMsg picker + RichMenu LIFF + Scenarios |
05-phase-3-payment-agent.md | LINE Pay + agent QR + LIFF polish |
06-phase-4-multishop.md | (Optional) multi-shop per LINE OA |
07-cross-cutting.md | Infra, Cloudflare/nginx, LINE Console, monitoring |
08-test-strategy.md | Per-phase test gates + smoke test definition |
09-risk-register.md | Risks, mitigations, kill-switches |
10-jira-tickets.md | Pre-drafted Jira tickets (CRV-XX + PASS-XX) ready to file |
Phase summary (north star)
| Phase | Goal | Items | CC sessions | Calendar (parallel) | Exit criteria |
|---|---|---|---|---|---|
| 0 — Foundation | Finish wired half. Make webhooks 2-way + add identity column. | 9 | ~6 | 1 day | Pasukuru emits order events. Curva receives + persists. member.line_user_id migrated. |
| 1 — LIFF wrap | Pasukuru shopfront runs inside LINE. | 9 | ~9 | 1-2 days | User taps LINE → LIFF → sees products → adds to cart, identified by line_user_id, no double-account. |
| 2 — UX glue | Curva flows trigger Pasukuru. | 8 | ~8 | 1-2 days | Admin can build Flex Msg with Pasukuru products. Rich menu opens shop. Abandoned-cart scenario fires. |
| 3 — Payment+agent | Loop closure: LINE Pay + referral. | 9 | ~9 | 2 days | LINE Pay live. Agent QR auto-tracks referral. Receipt pushed to LINE chat. |
| 4 — Multi-shop (optional) | One LINE OA → many Pasukuru shops. | 3 | ~3 | 1 day | PartnerConnection M:N migrated. Shop-picker in Scenario builder. |
| X — Cross-cutting | Infra + tests + ops. | 5+3 | ~7 | 2 days | Smoke test green. Webhook DLQ monitored. LIFF apps registered per tenant. |
MVP cutline: Phase 0+1 + Phase 2 items {C5, C7} + Phase 3 item {C7 only — already in P0/2} = first demo. ~4-5 days parallel.
Full delivery: all phases except 4 = ~8-10 days parallel (~15-20 days serial).
Glossary
| Term | Meaning |
|---|---|
| Curva | Laravel 13 LINE OA control plane (COCONRobotics-Corp/Curva) |
| Pasukuru BE | NestJS 10 ecommerce backbone (COCONRobotics-Corp/pasukuru-be) |
| Pasukuru FE | Next.js 16 storefront (COCONRobotics-Corp/pasukuru-fe) |
| PartnerConnection | Curva model storing the Curva↔Pasukuru link (1 per LineAccount) |
| kuru / partner=‘kuru’ | Original name for Pasukuru in code (do NOT rename — too many references) |
| LineAccount | Curva’s tenant unit = 1 LINE OA channel |
| Tenant (Pasukuru) | resolved via Host header → adminId |
| LIFF | LINE Front-end Framework (LINE WebView with SDK) |
| idToken | LINE-issued JWT proving line_user_id ownership |
| basicId | LINE OA “@xxx” public ID, used as curvaLineAccount in handshake |
| DLQ | Dead letter queue (failed webhooks after retries) |
| CC session | One Claude Code working block, ~2-4hr equivalent |
Naming conventions (HARD RULE)
- Branch:
user/corone-{JIRA}-{kebab-task}fromdevelop - Curva Jira project:
CRV(e.g.CRV-100) - Pasukuru Jira project:
PASS(e.g.PASS-50) - Commit:
[CRV-100] short summaryor[PASS-50] short summary - PR title:
[CRV-100] Summary— body hasRequested by Julian(workspace attribution) - Workspace persona: kebahagiaan = Julian / time7676 (this work) — do NOT cross-post to Ryo
NO-TOUCH boundary
✅ CRV (Curva), PASS (Pasukuru) Jira projects — full read+write ❌ DVG (Da Vinci) — read-only, never write
Approval gates (before any code)
- User approves master plan (this doc)
- User approves Phase 0 ticket list (10-jira-tickets.md)
- User confirms tenant resolution choice (path vs JWT) — see Phase 1 D-1 decision
- User confirms LINE Pay in/out of MVP — see Phase 3 D-2 decision
- User confirms multi-shop Phase 4 in/out — see Phase 4 D-3 decision
Phase 0 unblocks once gates 1-2 cleared.