Payment catalog (Phase 5.x — see requirement/phase5-payment-catalog-plan.md):
- New tables payment_method_groups + payment_methods with seed (3 groups,
10 methods; GoPay seeded inactive pending Xendit channel confirmation).
- payment-catalog.service.js with two-layer cache (60s in-process + 1h
Valkey) and config:invalidate pub/sub fanout. Mutator API + casing-
tolerant findActiveMethodByCode for downstream validation.
- App-facing GET /api/client/payment-methods returns pre-grouped JSON,
active-only, empty groups dropped server-side.
- POST /api/client/payment-requests now validates `method` against the
catalog (INVALID_PAYMENT_METHOD 422) and stamps
product_metadata.preferred_payment_code (upper-cased).
- Control-center /internal/payment-{groups,methods}{,/:id,/reorder}
endpoints (full CRUD + idempotent reorder). New Payment Catalog page
wired into the CC nav.
- Customer app renders the catalog as collapsible groups (first expanded)
via paymentCatalogProvider; QRIS-only hardcoded fallback on 5xx so
checkout never hard-fails. Replaces the hardcoded _PayMethod enum.
- 10 brand SVGs (~63KB) bundled in client_app/assets/payment_icons/ from
github.com/hafidznoor/idn-finlogos. Xendit's per-channel media-asset
pages were planned but found decommissioned during implementation —
switched to idn-finlogos with the standard "channels-we-accept"
trademark posture. See assets/payment_icons/README.md for the workflow
to add new methods.
- 16 vitest cases covering the service + cache; full backend suite green
(162/162).
Customer-app splash + register polish:
- Splash rewritten per figma S1: warm vertical gradient, two ImageFiltered
radial orbs, 96×96 rounded-square logo tile, "HaloBestie" + "kamu gak
harus ngerasain ini sendirian." Self-driving navigation via context.go
after a 2.5s post-frame timer (native Android splash burns ~1-1.5s
before Flutter paints — 1s timer yielded near-zero visible duration).
Router early-returns null for isSplash so it never moves us off /splash
on its own.
- 3-page onboarding carousel removed: user clarified the new splash
REPLACES that carousel. Dropped /onboarding route, OnboardingScreen,
onboardingDoneProvider + gating, dead splash_{1,2,3}.png + the
splash_chat_hebat.png Flutter asset. Phase 4 /onboarding/* subroutes
untouched; Android-native launch_background drawable left alone.
- Register screen (login-by-phone) polished: circular pink back button +
72×72 logo badge (same brandLogoBg pink as splash, Transform.scale 1.4
to fill the tile). Step-dots indicator removed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 lines
3.9 KiB
XML
14 lines
3.9 KiB
XML
<svg width="80" height="31" viewBox="0 0 80 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<g clip-path="url(#clip0_3802_11089)">
|
|
<path d="M25.636 3.73988e-05H4.61675C2.06806 3.73988e-05 0 2.11803 0 4.73408V25.5446C0 28.1366 2.02716 30.2414 4.54757 30.2787L25.621 30.2793C28.1697 30.2793 30.2426 28.1607 30.2426 25.5446L30.2528 4.73408C30.2528 2.11803 28.1841 3.73988e-05 25.636 3.73988e-05ZM7.11491 27.8533L5.96779 27.8672C4.57885 27.8672 3.4576 26.7236 3.4576 25.3185L3.44918 25.1158V5.89805L3.4576 4.86221C3.51354 3.50275 4.54517 2.40436 5.89861 2.40436H8.22834C10.3439 2.40436 12.0547 4.24203 12.0547 6.40634C12.0547 7.48128 11.6336 8.45155 10.9527 9.16075L5.00774 15.1905L10.5821 20.8689C11.298 21.6112 11.7311 22.5851 11.7311 23.6492C11.7311 25.9705 9.6684 27.8533 7.11491 27.8533V27.8533ZM24.2525 27.8359L13.8587 27.8329C13.8587 27.8329 15.0605 25.2331 15.0605 23.6264C15.0605 21.6672 14.4055 19.9137 13.3799 18.7564L9.82661 15.1315L13.4502 11.3864C14.5348 10.3674 15.2506 8.56463 15.2506 6.51401C15.2506 4.88928 14.8019 3.44982 14.0752 2.40436H16.595C18.7088 2.40436 20.4214 4.24203 20.4214 6.40634C20.4214 7.48128 20.0021 8.45155 19.323 9.16075L13.4881 15.1291L25.603 27.484C25.2168 27.7258 24.7343 27.8359 24.2525 27.8359V27.8359ZM26.788 23.9771L18.1049 15.1273L22.2398 10.9262C23.0825 9.87056 23.6191 8.28552 23.6191 6.51401C23.6191 4.87965 23.1619 3.4023 22.4323 2.35744L24.2808 2.41518C25.6673 2.41518 26.7952 3.55509 26.7952 4.96447L26.788 23.9771Z" fill="#00529C"/>
|
|
<path d="M48.8834 13.7179C49.0525 13.5489 49.2522 13.3311 49.4826 13.0647C49.7123 12.7982 49.9301 12.4836 50.1358 12.1203C50.3415 11.7569 50.5172 11.3521 50.6622 10.904C50.8077 10.4564 50.8805 9.97821 50.8805 9.46992C50.8805 8.47799 50.7109 7.55224 50.3722 6.69265C50.033 5.83366 49.5126 5.08295 48.8107 4.44112C48.1087 3.80049 47.2316 3.29761 46.1784 2.93428C45.1257 2.57156 43.8967 2.3899 42.4934 2.3899H42.4549H38.4198H37.3695H33.2346V7.01808V23.0405V27.8052H43.4011C44.8772 27.8052 46.1657 27.6055 47.2677 27.2061C48.3685 26.8066 49.2829 26.2562 50.0089 25.5542C50.7349 24.8523 51.2733 24.0354 51.6246 23.1036C51.9753 22.1718 52.151 21.1733 52.151 20.108C52.151 18.68 51.8243 17.4095 51.1711 16.2955C50.5172 15.1827 49.7545 14.3231 48.8834 13.7179ZM44.3882 7.04695C44.7305 7.17748 45.0162 7.34711 45.2394 7.56066C45.8174 8.11527 46.1068 8.77815 46.1068 9.54932C46.1068 10.2489 45.9859 10.827 45.7453 11.2847C45.504 11.7431 45.2628 12.0926 45.0222 12.3332H37.9548V6.74679H42.3478C43.1713 6.74679 43.8492 6.84844 44.3882 7.04695V7.04695ZM43.6549 16.7316C44.9344 16.7316 45.8824 17.063 46.4996 17.7247C47.08 18.3762 47.3724 19.1449 47.3724 20.0346C47.3724 20.9513 47.0409 21.7339 46.3781 22.3848C45.7146 23.0356 44.6246 23.3617 43.1057 23.3617H42.5385H37.9548V16.7316H43.6549Z" fill="#00529C"/>
|
|
<path d="M69.3872 16.8585C70.1493 16.3382 70.7851 15.7331 71.2934 15.0431C71.8017 14.3531 72.1765 13.591 72.4189 12.7561C72.6607 11.9206 72.7822 11.0676 72.7822 10.196C72.7822 9.05847 72.5939 8.0118 72.2192 7.05537C71.8432 6.09954 71.2808 5.27665 70.5307 4.58669C69.78 3.89673 68.8422 3.35836 67.7167 2.97098C66.5913 2.58419 65.2902 2.3899 63.814 2.3899H63.6811H53.902H53.8105V27.8052H58.6222V18.3654H61.305L67.9405 27.8052H73.5805L66.7188 18.0387C67.7348 17.7728 68.6244 17.3794 69.3872 16.8585ZM63.8501 6.74679C64.1527 6.74679 64.4384 6.76664 64.7103 6.80092C65.5681 6.93025 66.2689 7.23643 66.809 7.72307C67.5441 8.38656 67.9116 9.19983 67.9116 10.1635C67.9116 10.6465 67.8328 11.1163 67.6764 11.5741C67.5194 12.0324 67.2728 12.4361 66.9353 12.785C66.5973 13.135 66.1636 13.4178 65.6336 13.6349C65.1031 13.8521 64.4643 13.9603 63.7172 13.9603H58.6222V6.74679H63.8501Z" fill="#00529C"/>
|
|
<path d="M75.2797 2.3899V2.39712C75.231 2.39591 75.1835 2.3899 75.1348 2.3899H75.0939V2.3917V11.7076V18.3828V27.8052H80V2.3899H75.2797Z" fill="#00529C"/>
|
|
</g>
|
|
<defs>
|
|
<clipPath id="clip0_3802_11089">
|
|
<rect width="80" height="30.2793" fill="white"/>
|
|
</clipPath>
|
|
</defs>
|
|
</svg>
|