Commit Graph
34 Commits
Author SHA1 Message Date
isaacclad d18bb3cd97 Skip ladl.link redirect for JSON QR pay requests so checkout sheets can open.
Deploy Ladill QR Plus / deploy (push) Successful in 46s
2026-07-21 18:46:26 +00:00
isaacclad 02e6778ccf Speed up QR create/update by cutting billing round-trips.
Deploy Ladill QR Plus / deploy (push) Successful in 2m2s
Create was making three sequential public HTTPS billing calls (~400ms each)
while holding a DB transaction open for image generation. Use loopback DNS
forcing, cache balances briefly, return balance from debit, regenerate images
only when style changes, and keep remote work outside the DB transaction.
2026-07-16 21:25:16 +00:00
isaacclad d83a314bee Add Portfolio and Bookshop QR types with tailored landing pages.
Deploy Ladill QR Plus / deploy (push) Successful in 58s
Portfolio showcases freelancer work projects; Bookshop lists author titles with multi-platform purchase links. Includes create/edit forms, public assets, and tests.
2026-07-16 20:56:52 +00:00
isaacclad 95d73d1367 Add Campaigns module for grouping QR codes.
Deploy Ladill QR Plus / deploy (push) Successful in 1m6s
Let accounts organise codes by promo or launch, attach or detach codes, and view combined scan totals from the sidebar.
2026-07-16 20:43:02 +00:00
isaaccladandCursor 31c292c5e5 Throttle platform SSO session checks to cut per-request auth latency.
Deploy Ladill QR Plus / deploy (push) Successful in 1m23s
Verify auth.ladill.com at most once every 90s; recommend Redis for session/cache in .env.example.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 16:51:12 +00:00
isaaccladandCursor fe9311001e Redirect legacy /q/* URLs to canonical ladl.link addresses.
Deploy Ladill QR Plus / deploy (push) Successful in 1m7s
External /q requests 301/307 to ladl.link; internal X-Ladill-Internal requests still serve content for platform proxying.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 17:19:04 +00:00
isaaccladandCursor 5372a4926f Wire LadillLink through QrCode model and remaining QR surfaces.
Deploy Ladill QR Plus / deploy (push) Successful in 52s
Public URLs, encoded payloads, slug preview, payment callbacks, and asset paths now use ladl.link instead of ladill.com/q/*.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 16:16:25 +00:00
isaaccladandCursor 1366015845 Use ladl.link URLs for all front-facing QR and short-link surfaces.
Deploy Ladill QR Plus / deploy (push) Successful in 36s
Public landing pages, asset paths, payment callbacks, and redirects now go through QrCode::publicPath() / LadillLink instead of ladill.com/q/* routes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 15:46:06 +00:00
isaaccladandClaude Opus 4.8 296312ab4b Wire QR overview create-code links into the two-step add-funds modal
Deploy Ladill QR Plus / deploy (push) Successful in 41s
The dashboard 'Create code' / 'Create your first code' links were plain hrefs
to the create page, so a user with insufficient balance only met the top-up
modal after filling the form. Gate them with balanceGate + mount the modal so
they open Add funds directly when the wallet can't cover a QR code.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 06:37:28 +00:00
isaaccladandClaude Opus 4.8 b7adb69245 Point in-app wallet top-up at the billing API (key the app already holds)
Deploy Ladill QR Plus / deploy (push) Successful in 33s
qr-plus authenticates to the monolith with a billing service key, not an
identity key, so the modal's top-up now goes through BillingClient::topup ->
POST /api/billing/topup. Drops the unused IdentityClient::walletTopup.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 06:23:03 +00:00
isaaccladandClaude Opus 4.8 73faa20fff Two-step add-funds modal instead of wallet redirect on insufficient balance
Deploy Ladill QR Plus / deploy (push) Successful in 40s
When a user hits an action they can't afford (e.g. creating a QR code with
0/low balance), open an in-app two-step modal instead of bouncing them to the
central wallet page. Step 1 explains pay-as-you-go billing + shows the action
cost and current balance; step 2 takes an amount and starts a Paystack checkout
via the central identity wallet-topup API, returning the user where they were.

- service-topup-modal: rebuilt as two-step (billing explainer -> amount/pay)
- IdentityClient::walletTopup + WalletTopupController + POST /wallet/topup
- balanceGate.openTopup / qrCustomizer.redirectTopup now prefer the modal,
  falling back to the wallet page only when no modal is wired
- qr-codes index + create render the modal and open it on insufficient balance

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:25:06 +00:00
isaaccladandClaude Opus 4.8 bbef00b2f0 Add branded boot splash (Ladill Mail style) on app pages
Deploy Ladill QR Plus / deploy (push) Successful in 43s
InjectBootSplash middleware shows a self-branded loading splash once per session
while the app boots, then fades out.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:14:57 +00:00
isaaccladandCursor 67339046d4 Prefill business QR creation from CRM contact links.
Deploy Ladill QR Plus / deploy (push) Successful in 51s
Decode CRM prefill tokens so contact name, phone, email, and address carry into QR Plus.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 20:07:20 +00:00
isaaccladandClaude Opus 4.8 93a78cdba5 Add wallet balance widget to the profile menu (after Billing)
Deploy Ladill QR Plus / deploy (push) Successful in 23s
Wallet balance peek rendered as a menu row directly under Billing, backed by
a /wallet/balance endpoint (BillingClient) and guarded by Route::has. Also
opens Afia via a direct window event for reliability.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 12:25:51 +00:00
isaaccladandCursor 91c87493bf Bind app sessions to the platform auth session.
Deploy Ladill QR Plus / deploy (push) Successful in 25s
Clear local sessions when auth.ladill.com signs out and ping the platform session from keepalive.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-20 08:26:30 +00:00
isaaccladandCursor 03fffa04be Add account-level Analytics page to QR Plus.
Deploy Ladill QR Plus / deploy (push) Successful in 39s
Aggregates scan metrics across all codes with charts, breakdowns, and a sidebar nav item.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 00:57:08 +00:00
isaaccladandClaude Opus 4.8 f3563c7d3e QR: fix delete 500 — relation is scanEvents(), not scans()
Deploy Ladill QR Plus / deploy (push) Successful in 35s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:29:25 +00:00
isaaccladandClaude Opus 4.8 46d0ef8825 QR: add type-to-confirm delete on the QR code page
Deploy Ladill QR Plus / deploy (push) Successful in 59s
Users asked to delete codes they no longer need. Add a destroy route +
controller action (authorized via QrCodePolicy::delete) and a danger-zone
delete on the show page behind a confirmation modal that requires typing the
code's label — deliberately not a one-click delete since it permanently
breaks the printed code and removes its scan history.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:24:55 +00:00
isaaccladandCursor c4e2c75324 Send SSO guests to ladill.com/products/qrplus instead of subdomain landings.
Deploy Ladill QR Plus / deploy (push) Successful in 28s
Remove interactive OAuth fallback on silent SSO failure and add ladill.marketing_url config so app subdomains open the dashboard when signed in locally.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 22:22:28 +00:00
isaaccladandClaude Opus 4.8 997385b315 Per-app logout keeps platform SSO session (quick password-less re-entry).
Deploy Ladill QR Plus / deploy (push) Successful in 56s
Local-only sign-out: end this app's session but leave the auth.ladill.com
session intact, so the signed-out page's Sign in again re-auths silently via
prompt=none. Full sign-out of all Ladill apps remains on account.ladill.com.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 11:23:53 +00:00
isaaccladandCursor dcb6b486bd Fix SSO popup callback infinite loop and post-login 500.
Deploy Ladill QR Plus / deploy (push) Successful in 50s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 20:21:54 +00:00
isaaccladandCursor cd3ba1f334 Keep the app subdomain visible during Ladill SSO login and logout.
Deploy Ladill QR Plus / deploy (push) Successful in 30s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 12:15:48 +00:00
isaaccladandCursor 5fb2de31c8 Add mobile and desktop search for QR Plus.
Deploy Ladill QR Plus / deploy (push) Successful in 40s
Introduce a dedicated /search page, wire the bottom nav and topbar to it, and expose JSON results for live lookup of QR codes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 15:37:58 +00:00
isaaccladandCursor b759d78432 Improve cross-app SSO when switching between Ladill apps.
Deploy Ladill QR Plus / deploy (push) Successful in 28s
Keep the shared auth session alive with periodic pings, store OIDC refresh tokens for silent re-login, and route launcher links through SSO connect.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 12:06:40 +00:00
isaaccladandCursor a7090e9c30 Add QR-specific settings for notifications and new-code defaults.
Deploy Ladill QR Plus / deploy (push) Successful in 1m15s
Store per-account preferences in qr_settings and pre-fill the create flow with saved type and brand styling.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 09:14:16 +00:00
isaaccladandCursor 9ddda21ea3 Add Afia AI assistant to the QR Plus header.
Deploy Ladill QR Plus / deploy (push) Successful in 1m33s
Wire in-app chat scoped to QR codes, billing, and scans so users get product-specific help without leaving qrplus.ladill.com.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 08:56:29 +00:00
isaaccladandCursor d62f0f0c57 Unify SSO with platform for seamless sign-in across Ladill apps.
Deploy Ladill QR Plus / deploy (push) Successful in 29s
Add silent OAuth, deep-link guest redirects, and a session keepalive iframe.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 06:33:16 +00:00
isaaccladandCursor 43728bcec3 Add QR Plus REST API for listing, creating, and updating codes.
Deploy Ladill QR Plus / deploy (push) Successful in 29s
Exposes /api/v1/qr-codes with analytics, team account header support, and qr:read/qr:write token abilities.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 06:25:16 +00:00
isaaccladandCursor 69405c93d3 Fix QR code show page undefined orders variable.
Deploy Ladill QR Plus / deploy (push) Successful in 34s
Pass orders as null from the controller so the leftover commerce section does not 500 on Plus types.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 06:20:49 +00:00
isaaccladandCursor 8c3e9d3c26 Add team, developers, PDF type, and QR rendering dependency.
Deploy Ladill QR Plus / deploy (push) Successful in 42s
Enables account collaboration, API tokens, hosted PDF codes, and fixes QR detail 500s by declaring chillerlan/php-qrcode.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 06:16:13 +00:00
isaaccladandCursor bcd1cf5d28 Fix QR codes views to use user.qr-codes route names.
Deploy Ladill QR Plus / deploy (push) Successful in 56s
Removes missing topup route/modal and sends low-balance users to the platform wallet.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 06:02:33 +00:00
isaaccladandCursor 9fc9db8a2f Add User avatarUrl helper and harden dashboard billing lookup.
Deploy Ladill QR Plus / deploy (push) Successful in 23s
Fixes dashboard 500 after SSO when layout renders profile avatar.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 21:55:13 +00:00
isaaccladandCursor 666b169043 Remove hosting team invite hook from QR Plus SSO login.
Deploy Ladill QR Plus / deploy (push) Successful in 27s
Fixes 500 on OAuth callback after sign-in with Ladill.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 21:49:38 +00:00
isaaccladandCursor cd6571f199 Extract Ladill QR Plus as standalone app at qr.ladill.com.
Deploy Ladill QR Plus / deploy (push) Failing after 1s
Utility QR types only (URL, WiFi, link list, business, app download) with
SSO, Billing API integration, public /q resolver, and qr-plus:import for
platform migration. vCard and commerce types stay on the platform.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 21:31:24 +00:00