Phase 5.x payment catalog + customer-app splash/register polish
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>
This commit is contained in:
23
client_app/assets/payment_icons/mandiri.svg
Normal file
23
client_app/assets/payment_icons/mandiri.svg
Normal file
@@ -0,0 +1,23 @@
|
||||
<svg width="80" height="25" viewBox="0 0 80 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_3802_8197)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.8989 0.896292C57.3589 1.81741 53.7265 3.96929 52.3705 4.77064C51.5441 5.20551 49.6301 5.39539 48.5475 3.88763C48.5281 3.86041 47.1077 2.02711 47.0497 1.95808C47.009 1.9093 46.0907 0.502368 44.0445 0.458381C43.7422 0.450977 42.239 0.442702 40.7724 1.30372C38.8229 2.45413 34.2891 5.13147 34.2891 5.13147C34.2891 5.13147 34.2878 5.13386 34.2855 5.13386C32.4218 6.23528 30.9697 7.09282 30.9697 7.09282L32.6854 9.26931C33.4879 10.2986 35.2978 11.095 36.8674 10.1643C36.8674 10.1643 42.6668 6.69541 42.6881 6.68539C45.1962 5.26452 47.1315 5.26452 48.416 5.79324C49.569 6.29647 50.572 7.55033 50.572 7.55033C50.572 7.55033 51.8829 9.22837 52.1142 9.52191C52.86 10.4702 54.0946 10.0977 54.0946 10.0977C54.0946 10.0977 54.5521 10.0441 55.2417 9.6212C55.2417 9.6212 60.8591 6.25684 60.8627 6.25575C62.6464 5.1748 64.2824 4.97294 65.1185 5.05242C67.7373 5.29827 68.5508 7.18798 69.6863 8.50628C70.355 9.28172 70.9584 9.72203 71.8811 9.69982C72.4874 9.68653 73.1724 9.30676 73.2734 9.23817L80.0002 5.22837C80.0002 5.22837 79.3099 4.15461 77.8964 2.48397C76.6313 0.993412 75.2875 1.66781 74.2162 2.21591C73.7661 2.44586 72.1352 3.56644 70.5195 4.34819C69.3682 4.905 67.7145 4.73754 66.8082 3.58081C66.754 3.51048 65.2878 1.67695 65.1337 1.45136C64.5419 0.68572 63.3873 0 61.9075 0C61.0078 0 59.9868 0.25347 58.8989 0.896292Z" fill="url(#paint0_linear_3802_8197)"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.0843273 16.5732C0.0843273 15.376 0.0632455 14.3713 0 13.4754H2.1942L2.29708 15.0145H2.35864C2.85596 14.2012 3.76543 13.2394 5.46188 13.2394C6.78603 13.2394 7.82031 14.0104 8.25396 15.1639H8.29655C8.64882 14.5871 9.06118 14.16 9.53658 13.8597C10.0957 13.4543 10.7372 13.2394 11.5647 13.2394C13.2398 13.2394 14.935 14.4144 14.935 17.7483V23.8801H12.453V18.1335C12.453 16.4029 11.8748 15.376 10.655 15.376C9.78471 15.376 9.14277 16.0182 8.87566 16.7664C8.81284 17.022 8.75086 17.3428 8.75086 17.6398V23.8801H6.26805V17.8547C6.26805 16.4029 5.71044 15.376 4.53112 15.376C3.57949 15.376 2.93902 16.1464 2.71091 16.8713C2.60677 17.1294 2.56503 17.4277 2.56503 17.7263V23.8801H0.0843273V16.5732Z" fill="#003A70"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.6052 21.3809C24.6052 22.3205 24.6465 23.2377 24.75 23.8806H22.4532L22.2883 22.7271H22.2255C21.6053 23.5398 20.5503 24.1157 19.2473 24.1157C17.2196 24.1157 16.0825 22.5999 16.0825 21.0179C16.0825 18.3889 18.3363 17.0654 22.06 17.0865V16.9149C22.06 16.2309 21.7908 15.0993 20.0121 15.0993C19.0187 15.0993 17.984 15.42 17.3018 15.8679L16.8047 14.1601C17.5508 13.6891 18.8551 13.2398 20.4466 13.2398C23.6749 13.2398 24.6052 15.3564 24.6052 17.6202V21.3809ZM22.122 18.7959C20.3226 18.7528 18.6062 19.1587 18.6062 20.7401C18.6062 21.7646 19.2473 22.2356 20.0543 22.2356C21.0666 22.2356 21.8125 21.5516 22.0393 20.8041C22.1009 20.6118 22.122 20.3973 22.122 20.227V18.7959Z" fill="#003A70"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.3642 16.5732C26.3642 15.376 26.3415 14.3713 26.2812 13.4754H28.5133L28.6381 15.035H28.6993C29.1342 14.2241 30.2304 13.2394 31.9056 13.2394C33.6645 13.2394 35.4847 14.4144 35.4847 17.7056V23.8801H32.9407V18.0054C32.9407 16.5088 32.4029 15.376 31.0168 15.376C30.0032 15.376 29.3001 16.124 29.0305 16.9149C28.9491 17.1505 28.9276 17.4717 28.9276 17.7687V23.8801H26.3642V16.5732Z" fill="#003A70"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.5156 9.2947V20.9524C46.5156 22.0205 46.5563 23.1763 46.5978 23.8806H44.3223L44.2204 22.2356H44.1783C43.5781 23.39 42.3557 24.1158 40.8887 24.1158C38.4902 24.1158 36.5865 22.0009 36.5865 18.7959C36.5654 15.3129 38.6753 13.2398 41.0953 13.2398C42.4808 13.2398 43.4746 13.8389 43.9289 14.6087H43.9708V9.2947H46.5156ZM43.9708 17.8115C43.9708 17.6 43.9495 17.3424 43.9097 17.1294C43.6818 16.1038 42.8746 15.27 41.7161 15.27C40.0821 15.27 39.1718 16.7664 39.1718 18.7108C39.1718 20.6118 40.0821 22.0009 41.6955 22.0009C42.7293 22.0009 43.6401 21.2747 43.888 20.1426C43.9495 19.9065 43.9708 19.6504 43.9708 19.3717V17.8115Z" fill="#003A70"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.3134 23.88H50.8809V13.476H48.3134V23.88Z" fill="#003A70"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M52.679 16.8295C52.679 15.4199 52.6575 14.4143 52.5957 13.4751H54.8095L54.8904 15.4615H54.9762C55.4719 13.9873 56.6512 13.4751 57.7264 13.4751C57.9741 13.4751 58.1187 13.4314 58.3262 13.4751V15.7834C58.1187 15.7407 57.8917 15.698 57.5813 15.698C56.3611 15.698 55.533 16.5092 55.3058 17.6835C55.2655 17.9187 55.2238 18.1977 55.2238 18.4982V23.8805H52.679V16.8295Z" fill="#003A70"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M59.5053 23.88H62.069V13.476H59.5053V23.88Z" fill="#003A70"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_3802_8197" x1="0" y1="24.1158" x2="80.0002" y2="24.1158" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FFCA06"/>
|
||||
<stop offset="0.330844" stop-color="#FBAA18"/>
|
||||
<stop offset="0.694742" stop-color="#FFC907"/>
|
||||
<stop offset="1" stop-color="#FAA619"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_3802_8197">
|
||||
<rect width="80.0002" height="24.1158" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
Reference in New Issue
Block a user