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:
2026-05-26 23:06:46 +08:00
parent d60c048776
commit 1f6d8e09ae
39 changed files with 2634 additions and 370 deletions

View File

@@ -0,0 +1,20 @@
<svg width="80" height="36" viewBox="0 0 80 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3802_18175)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M24.9554 0.00732258L1.05561 3.19434C1.05561 3.19434 0 3.31692 0 4.58885V27.2859C0 27.2859 0.144209 29.9422 3.17981 29.9422H30.2666C30.2666 29.9422 32.6807 29.3654 32.6807 26.9485V8.22003C32.6807 8.22003 32.7282 5.5637 29.5427 5.5637H3.42208C3.11467 5.4987 2.83195 5.34801 2.6066 5.12904C2.38126 4.91008 2.22251 4.6318 2.14871 4.32639C2.0694 3.90529 2.23957 3.86203 2.68517 3.86203H26.67V1.27492C26.67 1.27492 26.5849 -0.112371 24.9554 0.00732258Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.8249 26.0904C14.8434 26.0904 13.384 25.2829 11.231 23.1529C11.0547 22.9688 10.9572 22.7232 10.9593 22.4683C10.9614 22.2134 11.063 21.9694 11.2424 21.7884C11.4218 21.6073 11.6648 21.5034 11.9197 21.4989C12.1745 21.4944 12.4211 21.5895 12.6068 21.7642C14.8737 24.0052 15.9236 24.5618 17.7348 24.0715C18.7876 23.7831 19.7321 22.4448 19.7869 20.9061C19.8302 19.7106 18.9866 18.9304 17.2806 18.5887C14.2176 17.9758 12.4092 16.8048 11.9073 15.106C11.5036 13.7389 12.0343 12.2117 13.3624 10.924L13.4172 10.8749C16.2726 8.48826 19.5879 10.2664 20.9421 11.5412C21.1228 11.7206 21.2263 11.9634 21.2308 12.218C21.2352 12.4725 21.1402 12.7188 20.9659 12.9044C20.7915 13.09 20.5517 13.2003 20.2973 13.2118C20.043 13.2233 19.7941 13.1351 19.6038 12.966C19.4899 12.8592 16.9244 10.5288 14.7007 12.3516C13.9407 13.103 13.5975 13.9264 13.7849 14.558C14.0561 15.4781 15.4347 16.2308 17.6656 16.6779C21.4569 17.4364 21.7799 19.9413 21.7424 20.9825C21.6617 23.2509 19.7639 25.7919 17.9829 26.0169C17.5988 26.0658 17.212 26.0904 16.8249 26.0904Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M42.7335 5.4267C42.301 5.16259 41.8328 4.96201 41.3433 4.83112C40.3338 4.5427 39.6056 4.17352 39.258 3.70196C38.948 3.29241 38.948 2.75883 39.3201 2.07528C39.5306 1.66573 40.0411 1.40615 40.6972 1.35424C41.5277 1.32131 42.3515 1.51419 43.081 1.91232C43.1862 1.96491 43.308 1.97357 43.4195 1.93638C43.5311 1.89919 43.6233 1.81922 43.6759 1.71404C43.7285 1.60886 43.7371 1.4871 43.6999 1.37554C43.6628 1.26398 43.5828 1.17176 43.4776 1.11917C42.4609 0.597138 41.4587 0.398129 40.6237 0.461581C39.6546 0.535128 38.8932 0.95766 38.5269 1.63977C37.9674 2.67086 38.0049 3.51449 38.5269 4.22111C39.01 4.85419 39.8911 5.33873 41.0953 5.6733C41.5074 5.78805 41.9033 5.95475 42.2735 6.16938C42.745 6.45779 43.0551 6.79092 43.205 7.15C43.3486 7.48899 43.369 7.86756 43.2627 8.22003C43.2046 8.40269 43.1252 8.5779 43.0262 8.74207C43.0262 8.76658 43.0017 8.7911 42.9772 8.82859C42.6167 9.36216 42.0341 9.63472 41.326 9.63472C40.5444 9.63472 39.5883 9.32467 38.5716 8.70457C38.4274 8.61805 38.2832 8.53008 38.1621 8.44355C38.0634 8.37777 37.9426 8.35388 37.8263 8.37714C37.71 8.40039 37.6077 8.4689 37.542 8.56757C37.4762 8.66625 37.4523 8.78702 37.4755 8.90331C37.4988 9.0196 37.5673 9.12189 37.666 9.18767C37.8116 9.27948 37.9522 9.37914 38.0871 9.48618C39.2537 10.1943 40.3584 10.5404 41.3015 10.5404C42.3196 10.5404 43.1632 10.1438 43.6968 9.34919C43.7184 9.30589 43.7435 9.26442 43.7718 9.22517C43.9158 8.99307 44.0283 8.74284 44.1063 8.48105C44.2729 7.93272 44.2376 7.34287 44.0068 6.81832C43.7387 6.23248 43.2933 5.74569 42.7335 5.4267Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.5719 4.44608C49.0637 4.32126 48.531 4.33822 48.0317 4.49511C47.4631 4.67076 46.9385 4.96574 46.493 5.36036V0.884114C46.4866 0.770127 46.4367 0.66294 46.3537 0.584534C46.2707 0.506128 46.1609 0.462446 46.0467 0.462446C45.9325 0.462446 45.8227 0.506128 45.7397 0.584534C45.6567 0.66294 45.6069 0.770127 45.6004 0.884114V10.1048C45.6069 10.2188 45.6567 10.326 45.7397 10.4044C45.8227 10.4828 45.9325 10.5265 46.0467 10.5265C46.1609 10.5265 46.2707 10.4828 46.3537 10.4044C46.4367 10.326 46.4866 10.2188 46.493 10.1048V6.65392C46.5019 6.64698 46.5101 6.63926 46.5176 6.63084C47.0771 5.94729 47.6972 5.5262 48.2928 5.34017C48.6343 5.2295 48.9999 5.21652 49.3484 5.30268C49.632 5.37955 49.8811 5.55038 50.055 5.78722C50.2486 6.08717 50.3439 6.44004 50.3275 6.79668V10.0947C50.3275 10.2133 50.3746 10.327 50.4585 10.4109C50.5423 10.4947 50.656 10.5418 50.7746 10.5418C50.8931 10.5418 51.0069 10.4947 51.0907 10.4109C51.1745 10.327 51.2216 10.2133 51.2216 10.0947V6.79236C51.237 6.25299 51.0804 5.72271 50.7746 5.27816C50.4824 4.86958 50.0572 4.57539 49.5719 4.44608Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M57.1659 9.01318C56.7502 9.42611 56.188 9.65785 55.602 9.65785C55.016 9.65785 54.4538 9.42611 54.038 9.01318C53.6251 8.59741 53.3934 8.03521 53.3934 7.44923C53.3934 6.86325 53.6251 6.30105 54.038 5.88529C54.4554 5.47431 55.017 5.24295 55.6027 5.24067C56.0396 5.24095 56.4667 5.37071 56.83 5.61356C57.1932 5.8564 57.4763 6.20145 57.6436 6.60511C57.8109 7.00877 57.8548 7.45295 57.7698 7.88155C57.6847 8.31014 57.4746 8.70393 57.1659 9.01318ZM55.6027 4.35955C54.7948 4.37701 54.0259 4.71019 53.4607 5.28772C52.8956 5.86525 52.5791 6.64117 52.5791 7.44923C52.5791 8.2573 52.8956 9.03322 53.4607 9.61075C54.0259 10.1883 54.7948 10.5215 55.6027 10.5389C56.4106 10.5215 57.1795 10.1883 57.7447 9.61075C58.3098 9.03322 58.6264 8.2573 58.6264 7.44923C58.6264 6.64117 58.3098 5.86525 57.7447 5.28772C57.1795 4.71019 56.4106 4.37701 55.6027 4.35955Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.6864 9.01318C64.2705 9.42591 63.7092 9.65893 63.1232 9.66212C62.6863 9.66184 62.2592 9.53208 61.896 9.28924C61.5327 9.04639 61.2496 8.70135 61.0823 8.29768C60.915 7.89402 60.8711 7.44984 60.9562 7.02125C61.0412 6.59265 61.2513 6.19886 61.56 5.88961C61.9766 5.47846 62.5379 5.24704 63.1232 5.245C63.5593 5.24613 63.9852 5.37619 64.3476 5.61882C64.7099 5.86146 64.9924 6.20582 65.1595 6.6086C65.3265 7.01138 65.3708 7.45457 65.2866 7.88244C65.2025 8.3103 64.9936 8.70371 64.6864 9.01318ZM63.1347 4.35955C62.7291 4.35908 62.3273 4.43885 61.9526 4.59428C61.5779 4.74971 61.2376 4.97772 60.9514 5.26518C60.9151 5.29503 60.8818 5.32836 60.8519 5.36469V4.8066C60.8519 4.68804 60.8048 4.57433 60.721 4.49049C60.6371 4.40665 60.5234 4.35955 60.4049 4.35955C60.2863 4.35955 60.1726 4.40665 60.0888 4.49049C60.0049 4.57433 59.9578 4.68804 59.9578 4.8066V13.5918C59.9578 13.7104 60.0049 13.8241 60.0888 13.9079C60.1726 13.9918 60.2863 14.0389 60.4049 14.0389C60.5234 14.0389 60.6371 13.9918 60.721 13.9079C60.8048 13.8241 60.8519 13.7104 60.8519 13.5918V9.53378C60.8879 9.56399 60.9212 9.59729 60.9514 9.63328C61.3107 9.99238 61.753 10.2573 62.2391 10.4047C62.7252 10.552 63.2402 10.5772 63.7384 10.478C64.2366 10.3788 64.7026 10.1582 65.0952 9.83592C65.4878 9.51359 65.7948 9.09942 65.9891 8.63009C66.1834 8.16075 66.259 7.65074 66.2091 7.14523C66.1592 6.63972 65.9855 6.15431 65.7032 5.732C65.4209 5.30968 65.0389 4.9635 64.5909 4.7241C64.1428 4.48471 63.6427 4.35949 63.1347 4.35955Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M68.4993 6.7664C68.6098 6.40543 68.808 6.07744 69.0762 5.81174C69.2513 5.63445 69.4599 5.4937 69.6899 5.39764C69.9199 5.30157 70.1666 5.25211 70.4159 5.25211C70.6651 5.25211 70.9118 5.30157 71.1418 5.39764C71.3718 5.4937 71.5804 5.63445 71.7556 5.81174C72.022 6.08244 72.2258 6.40833 72.3526 6.7664H68.4993ZM72.3843 5.1801C72.1292 4.91877 71.8241 4.71154 71.4871 4.57081C71.1501 4.43007 70.7883 4.35871 70.4231 4.361C70.0574 4.3549 69.6943 4.42452 69.3568 4.56548C69.0193 4.70644 68.7146 4.9157 68.4618 5.1801C67.3947 6.33377 67.4077 7.57542 67.8288 8.82859C68.0172 9.36277 68.3858 9.81458 68.8714 10.1063C69.3653 10.4143 69.9411 10.5652 70.5226 10.5389C71.2326 10.5127 71.9312 10.3527 72.5819 10.0673C72.639 10.0469 72.6912 10.0149 72.7355 9.97352C72.7799 9.93212 72.8152 9.88211 72.8395 9.82656C72.8638 9.771 72.8766 9.71107 72.8769 9.65044C72.8772 9.5898 72.8652 9.52973 72.8415 9.47391C72.8178 9.41809 72.783 9.36769 72.7391 9.3258C72.6953 9.2839 72.6434 9.2514 72.5865 9.23027C72.5297 9.20915 72.4692 9.19984 72.4086 9.20293C72.348 9.20602 72.2887 9.22144 72.2343 9.24824C71.6903 9.49802 71.1021 9.63723 70.5038 9.65779C70.0945 9.67236 69.6897 9.56927 69.3372 9.36072C69.0246 9.14782 68.7826 8.84657 68.6421 8.49547C68.547 8.23033 68.4807 7.95571 68.4445 7.67636H72.5516C72.7751 7.67636 73.5077 7.72539 73.1284 6.47222C72.9922 5.98508 72.7352 5.54018 72.3814 5.17866L72.3843 5.1801Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M75.2772 6.7664C75.387 6.40513 75.5853 6.07699 75.854 5.81174C76.0293 5.63441 76.238 5.49363 76.4681 5.39754C76.6982 5.30146 76.9451 5.25199 77.1944 5.25199C77.4438 5.25199 77.6906 5.30146 77.9207 5.39754C78.1508 5.49363 78.3596 5.63441 78.5349 5.81174C78.8008 6.08259 79.0041 6.40846 79.1304 6.7664H75.2772ZM80.0044 7.2322V6.90629C79.9841 6.75953 79.9513 6.61479 79.9063 6.47366C79.7716 5.98493 79.515 5.53837 79.1607 5.17578C78.906 4.91435 78.6011 4.70705 78.2644 4.5663C77.9276 4.42555 77.5659 4.35425 77.2009 4.35667C76.8352 4.35048 76.4721 4.42006 76.1346 4.56103C75.7971 4.702 75.4924 4.9113 75.2397 5.17578C74.1725 6.32945 74.184 7.57109 74.6066 8.82427C74.7946 9.35868 75.1634 9.81062 75.6492 10.102C76.1431 10.41 76.7189 10.5608 77.3004 10.5346C78.0104 10.5084 78.7091 10.3484 79.3597 10.063C79.4168 10.0425 79.4691 10.0106 79.5134 9.9692C79.5577 9.9278 79.5931 9.87779 79.6174 9.82223C79.6417 9.76668 79.6544 9.70675 79.6547 9.64611C79.6551 9.58548 79.643 9.52541 79.6194 9.46959C79.5957 9.41377 79.5608 9.36337 79.517 9.32147C79.4732 9.27958 79.4212 9.24708 79.3644 9.22595C79.3075 9.20482 79.247 9.19552 79.1864 9.19861C79.1259 9.2017 79.0666 9.21712 79.0122 9.24392C78.4682 9.49369 77.88 9.6329 77.2817 9.65347C76.8724 9.66804 76.4675 9.56494 76.115 9.3564C75.8021 9.14388 75.56 8.84252 75.4199 8.49114C75.325 8.22587 75.2583 7.95131 75.2209 7.67204H79.3295C79.4924 7.67348 79.925 7.69944 80 7.2322H80.0044Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.0307 22.0641H40.393V15.3252H44.575C44.6468 15.3247 44.7186 15.3286 44.7899 15.3368C45.4273 15.4074 48.2105 15.8891 48.2105 18.8742C48.2105 22.0612 45.0279 22.0612 45.0279 22.0612L45.0307 22.0641ZM44.2116 12.7569H37.7828V29.9422H40.393V24.8127H44.4914C45.8669 24.8261 47.2206 24.4695 48.411 23.7802C49.817 22.9481 51.2216 21.4815 51.2216 18.9463C51.2216 16.5683 49.9872 15.0599 48.6749 14.1268C47.3652 13.218 45.8057 12.7383 44.2116 12.754V12.7569Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M57.6837 27.5758C56.9189 27.5758 56.1714 27.3491 55.5355 26.9243C54.8996 26.4996 54.4038 25.8959 54.1109 25.1895C53.818 24.4831 53.7411 23.7058 53.8899 22.9557C54.0386 22.2056 54.4064 21.5164 54.9468 20.9753C55.4871 20.4341 56.1757 20.0653 56.9256 19.9154C57.6755 19.7655 58.4529 19.8413 59.1598 20.1332C59.8666 20.425 60.471 20.9198 60.8967 21.5551C61.3224 22.1904 61.5502 22.9376 61.5513 23.7023V23.7124C61.5506 24.7375 61.1427 25.7204 60.4174 26.4449C59.6921 27.1694 58.7088 27.5761 57.6837 27.5758ZM61.5513 17.7263V18.9362C60.6493 18.2041 59.5584 17.7426 58.4049 17.6051C57.2514 17.4676 56.0825 17.6598 55.0337 18.1593C53.9849 18.6588 53.0991 19.4453 52.4789 20.4276C51.8588 21.4099 51.5296 22.5478 51.5296 23.7095C51.5296 24.8712 51.8588 26.0091 52.4789 26.9914C53.0991 27.9737 53.9849 28.7602 55.0337 29.2597C56.0825 29.7593 57.2514 29.9514 58.4049 29.8139C59.5584 29.6764 60.6493 29.2149 61.5513 28.4828V29.8514H64.1586V17.7263H61.5513Z" fill="#E8451E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.3325 17.5605H68.8195L72.9107 25.391L76.8577 17.5605H80V17.5821L70.6293 35.0242H67.5591L71.1369 28.542L65.3325 17.5605Z" fill="#E8451E"/>
</g>
<defs>
<clipPath id="clip0_3802_18175">
<rect width="80.0044" height="35.0242" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB