Build status

What is done, what is left.

Tracks the same list as TASK.md in the repo.

Scaffold
Repo, Nuxt + Bun
Decode
Resolve, proven live
Create & convert
Real BookABet payload
Deploy
Live on Dokploy
Production UI
This page included
Flutter
One-screen APK
Wrap-up
Docs, Loom
Step 4 of 0

Core exercise

5/5

  • Decode / resolve
  • Encode / create
  • Convert
  • Proof: create/convert confirmed live, by curl
  • Proof: same round trips captured as screenshots

Deploy

1/3

  • Live on the Dokploy VPS
  • Re-run the decode/encode/convert proof against the live URL
  • Add the live URL to README.md

Flutter

0/6

  • Set up the Flutter SDK
  • Scaffold a standalone one-screen slip viewer
  • Wire it to the same public /api/slip* endpoints
  • Build a release APK
  • Firebase App Distribution: upload, add testers
  • Write the IPA-path note

Documentation and wrap-up

1/5

  • Production UI pass
  • Refresh the architecture diagram
  • Confirm /doc is complete end to end
  • Record the 5-minute Loom
  • Reply with the live URL, the repo, and a short note

Changelog

Shipped

Pin-input code, segmented encode, invert buttons

The booking code is now an 8-cell pin input with B/W already filled in front, auto-searching the moment it is complete, paste-aware whether the BW prefix is included or not. Encode's three fields render as one bordered bar. Create and Convert share one square, invert-on-hover button style.
Shipped

Production UI pass

Header, footer, a docs page, and this changelog. Monochrome, pixelarticons icons throughout, encode rebuilt as one row per match instead of a raw ID list.
Live

Live on Dokploy

betcorner.luxminima.org serves the app and proxies Betway successfully, confirmed with a real decode against the live URL.
Shipped

Create and convert, the real payload

First pass sent a guessed payload and Betway rejected it every time. The real shape, a rich object per outcome, turned up in a public repo and worked immediately: no account, a real code, resolved back successfully.
Shipped

Decode, proven live

GET /api/slip/:code proxies Betway's FindBookABet directly. No account, no cookies, no headless browser needed.
Shipped

Scaffold

Nuxt 4 on Bun, design system and Dockerfile reused from an earlier prototype.

Troubleshooting

"Booking code not found"

A clean 404 from Betway's own FindBookABet. The code does not exist, is not currently valid, or was mistyped. Not a bug on this end.

"Betway rejected this request: ..."

Create or convert reached Betway, and Betway itself returned an error. The message after the colon is Betway's own errorMessage, passed through as is, not rewritten or hidden.

A code got created, but it will not resolve

Betway does not check outcome IDs when it mints a code, only when the code gets read back. Fake or expired IDs still return a 200 and a real code. Reading that code back then fails with a specific error, errorCode 6000332, "BookABetSelectionsExpired". Use real IDs, lifted from a decoded slip, and this does not happen.

Where do Event ID / Market ID / Outcome ID come from?

Decode any real Betway code first. Each selection in the result carries all three, ready to copy into the encode form.