-
c93346f8ff
docs(ops): add CI-runner offload (2a) + Gitea migration (2c) runbooks
master
Samir Boulahtit
2026-06-05 22:23:54 +02:00
-
64c8a0ec2c
chore(ops): prune build cache in deploy.sh + document rescale & disk maintenance
Samir Boulahtit
2026-06-01 23:36:53 +02:00
-
ac7850b880
docs(auth): record 2026-05-31 401-redirect review + dev/prod symmetry proposal
Samir Boulahtit
2026-05-31 22:34:09 +02:00
-
4423f0a5ed
fix(api-client): generalize 401 redirect from /account/* to all 4 personas
Samir Boulahtit
2026-05-31 13:02:59 +02:00
-
947ca43c7b
docs(loyalty): record 2026-05-30 afternoon — prod-readiness 1-3 done + alerting back online
Samir Boulahtit
2026-05-30 20:20:00 +02:00
-
1227567d08
docs(hetzner): record 25/465 egress block + mail1 SMTP setup (5h debug payback)
Samir Boulahtit
2026-05-30 19:54:10 +02:00
-
e44f5c0458
chore(alertmanager): untrack alertmanager.yml + ship .example template (post-SMTP migration)
Samir Boulahtit
2026-05-30 11:32:10 +02:00
-
cff0b3f911
docs(loyalty): record 2026-05-30 widget i18n + cache-bust + 401 redirect + alertmanager finding
Samir Boulahtit
2026-05-29 23:20:07 +02:00
-
c13e8e29b5
feat(deploy): scripts/deploy-api-only.sh + Hetzner doc for manual code-only redeploys
Samir Boulahtit
2026-05-29 22:55:05 +02:00
-
c9fe717184
fix(login-i18n): translate the 3 hardcoded JS toasts in customer login
Samir Boulahtit
2026-05-29 22:41:15 +02:00
-
bbb481aad4
fix(login-i18n): translate the "Welcome back ..." subtitle on customer login
Samir Boulahtit
2026-05-29 22:36:56 +02:00
-
6564f13898
fix(api-client): never-resolving promise on 401 redirect kills the wrong-UI flash
Samir Boulahtit
2026-05-29 22:35:12 +02:00
-
b04b36a232
fix(loyalty-storefront): initial loading=true so 401 redirect doesn't flash wrong UI
Samir Boulahtit
2026-05-29 22:27:17 +02:00
-
856db328b5
chore(api-client): drop dead /shop/ path branches (migrated to /storefront long ago)
Samir Boulahtit
2026-05-29 21:37:37 +02:00
-
a0ae638821
fix(storefront-auth): apiClient redirects to login on 401 from /account/*
Samir Boulahtit
2026-05-29 21:28:34 +02:00
-
3ce9468397
fix(cache-bust): close FE-024 gaps so every JS/CSS gets ?v=<sha>
Samir Boulahtit
2026-05-29 21:01:44 +02:00
-
5f359283bc
fix(storefront-i18n): dashboard widgets translate + correct customer-module key paths
Samir Boulahtit
2026-05-29 20:45:46 +02:00
-
acbe2eff1a
docs(loyalty): record 2026-05-29 Test 5.0 i18n sweep + FR/DE email accents
Samir Boulahtit
2026-05-29 00:17:49 +02:00
-
213a60533c
fix(seed): correct sys.path so seed_email_templates_core can import app.*
Samir Boulahtit
2026-05-29 00:02:44 +02:00
-
7e3a1cb93f
chore(skills): generalize loyalty-wrap into topic-agnostic /wrap
Samir Boulahtit
2026-05-29 00:00:54 +02:00
-
1bade6e6b2
fix(storefront): broken Alpine x-text from |tojson inside double-quoted attribute
Samir Boulahtit
2026-05-28 23:55:14 +02:00
-
36fd37813b
fix(email): DE password_reset umlauts (zurucksetzen → zurücksetzen etc.)
Samir Boulahtit
2026-05-28 23:51:32 +02:00
-
b463c6bf48
fix(email): FR password_reset accents + store-name signature on all 4 locales
Samir Boulahtit
2026-05-28 23:48:13 +02:00
-
10a99f98fe
fix(storefront): i18n sweep + locale-aware reset-password and welcome email
Samir Boulahtit
2026-05-28 23:06:11 +02:00
-
f04cbb8ca2
docs(audit): lessons learned from loyalty migration
Samir Boulahtit
2026-05-24 23:59:05 +02:00
-
eaf180c64f
feat(arch-rules): JS-016 blocks hardcoded 'en-US' in JS at error severity
Samir Boulahtit
2026-05-24 23:52:14 +02:00
-
bb4c400436
fix(loyalty): sweep remaining hardcoded 'en-US' in persona JS files
Samir Boulahtit
2026-05-24 23:51:24 +02:00
-
06e59f73b3
fix(i18n): sweep hardcoded 'en-US' from non-loyalty JS to I18n.locale
Samir Boulahtit
2026-05-24 23:38:35 +02:00
-
a21dbbcddf
docs(loyalty): record 2026-05-24 Test 4 + storefront auth body-schema fix
Samir Boulahtit
2026-05-24 23:36:31 +02:00
-
478c3a9c50
fix(storefront-auth): forgot/reset password accept JSON body, not query
Samir Boulahtit
2026-05-24 23:06:10 +02:00
-
dd1f9af811
fix(i18n): locale-aware date/number formatting in loyalty factories
Samir Boulahtit
2026-05-24 23:03:03 +02:00
-
d32c1fd545
fix(loyalty): show category column on card-detail for all 3 personas
Samir Boulahtit
2026-05-24 23:02:07 +02:00
-
58a9e3f740
docs(proposals): cross-module persona-template consolidation audit
Samir Boulahtit
2026-05-24 14:09:39 +02:00
-
82939c0005
docs(api): document apiClient error.status / errorCode / details surface
Samir Boulahtit
2026-05-24 00:32:42 +02:00
-
d03b96da1c
chore(skill): add loyalty-wrap end-of-day skill
Samir Boulahtit
2026-05-24 00:01:40 +02:00
-
78621cb7bb
docs(loyalty): record 2026-05-23 Test 3 + cooldown bug + routing investigation
Samir Boulahtit
2026-05-23 23:44:23 +02:00
-
aa8ca59493
fix(loyalty-terminal): localise cooldown toast (was raw English)
Samir Boulahtit
2026-05-23 23:16:32 +02:00
-
f9a15deed7
feat(arch-rules): TPL-016 flags large persona templates that skip shared/
Samir Boulahtit
2026-05-23 23:11:21 +02:00
-
f82dce30ca
docs(architecture): persona template consolidation pattern + proposal
Samir Boulahtit
2026-05-23 23:10:29 +02:00
-
c661c1e394
refactor(loyalty): migrate store cards + card-detail to shared partials
Samir Boulahtit
2026-05-23 23:09:29 +02:00
-
93ab072f55
fix(loyalty): enforce cooldown on earn-points (was silently skipped)
Samir Boulahtit
2026-05-23 22:28:23 +02:00
-
4b64233b5f
docs(loyalty): record 2026-05-19 Test 2 complete + subtitle fix
Samir Boulahtit
2026-05-19 22:27:16 +02:00
-
dee2eab266
fix(loyalty): conditional subtitle on enrollment success page
Samir Boulahtit
2026-05-19 22:15:15 +02:00
-
f68a30a820
docs(loyalty): record 2026-05-18 Test 1 round 2 cleanup + admin polish
Samir Boulahtit
2026-05-18 23:42:16 +02:00
-
78e098d4da
fix(static-assets): also cache-bust raw /static/ refs (fonts CSS, store JS)
Samir Boulahtit
2026-05-18 23:37:41 +02:00
-
5f2885023c
fix(loyalty-admin): require at least one terms field on program form
Samir Boulahtit
2026-05-18 23:36:14 +02:00
-
ab3e133af7
fix(loyalty): use flatpickr for birthday so Firefox honors dd/mm/yyyy on FR
Samir Boulahtit
2026-05-18 22:55:35 +02:00
-
54247ca4f0
feat(static-assets): cache-bust JS/CSS via ?v=<commit-sha>, immutable in prod
Samir Boulahtit
2026-05-18 19:35:59 +02:00
-
236fee015e
fix(loyalty): rename enrollment-success CTA from "continue shopping" to "back to home"
Samir Boulahtit
2026-05-18 19:25:48 +02:00
-
7cf2420bba
docs(loyalty): record B1-F resolution + 6 follow-ups for next session
Samir Boulahtit
2026-05-17 23:08:27 +02:00
-
5b21908ba4
fix(celery): preload every module's models so mapper resolution succeeds
Samir Boulahtit
2026-05-17 22:57:32 +02:00
-
2a21610128
fix(loyalty): register send_notification_email with celery worker
Samir Boulahtit
2026-05-17 22:50:44 +02:00
-
3e650ff863
fix(task-base): on_failure logging crashes on reserved LogRecord keys
Samir Boulahtit
2026-05-17 22:45:22 +02:00
-
e680fda8bd
docs(proposals): static asset cache-busting plan
Samir Boulahtit
2026-05-17 22:35:24 +02:00
-
d85271f6aa
fix(dev_tools): use registered 'clipboard-copy' icon in SQL Query Tool
Samir Boulahtit
2026-05-17 22:31:50 +02:00
-
44c4290916
fix(celery): bind @shared_task to our app so async dispatch reaches redis
Samir Boulahtit
2026-05-17 22:26:33 +02:00
-
120532e63f
fix(loyalty): ProgramCreate accepts null for minimum_purchase_cents
Samir Boulahtit
2026-05-17 15:08:29 +02:00
-
8d6830fc97
fix(loyalty-admin): existing-program warning crashes when no merchant selected
Samir Boulahtit
2026-05-17 14:25:34 +02:00
-
e94b6d07bb
feat(dev_tools): enhance SQL Query Tool — clear, copy, history, edit, hardening
Samir Boulahtit
2026-05-17 11:24:40 +02:00
-
64a178f45d
feat(admin-settings): show/hide toggle on SMTP password field
Samir Boulahtit
2026-05-17 11:23:37 +02:00
-
1425b48239
docs(loyalty): record session pause + next-session resume sequence
Samir Boulahtit
2026-05-16 23:50:23 +02:00
-
eb9afd3cdd
docs: loyalty go-live update + Hetzner reset fix + sweep nav
Samir Boulahtit
2026-05-16 23:23:50 +02:00
-
2b8dc84584
fix(seed): drop meta_keywords reference (column removed in cms_003)
Samir Boulahtit
2026-05-16 20:33:22 +02:00
-
f6e224fb24
fix(makefile): call the real email-template seed scripts
Samir Boulahtit
2026-05-16 19:50:13 +02:00
-
06a44e55e7
feat(storefront): translatable Store description + nav home key + dynamic html lang
Samir Boulahtit
2026-05-16 19:46:17 +02:00
-
caf1361291
fix(loyalty): admin/store/merchant card detail return phone + birthday
Samir Boulahtit
2026-05-16 19:45:25 +02:00
-
bdb613581c
fix(timestamps): callable default so each row gets a fresh timestamp
Samir Boulahtit
2026-05-16 19:44:35 +02:00
-
29b2170448
docs(onboarding): merchant intake checklist (EN + FR)
Samir Boulahtit
2026-05-12 23:08:35 +02:00
-
a3fb7029bd
docs(loyalty): add Android terminal E2E tests to user-journeys checklist
Samir Boulahtit
2026-05-10 22:05:00 +02:00
-
d3b1670623
docs(loyalty): go-live readiness snapshot — 2026-05-10
Samir Boulahtit
2026-05-10 22:00:43 +02:00
-
f2d1bdcd49
fix(messaging): test email + EmailLog show effective config, not stale env
Samir Boulahtit
2026-05-10 21:30:41 +02:00
-
b65c51c038
test: realign deps + page_context tests with current source
Samir Boulahtit
2026-05-09 22:58:07 +02:00
-
fc7dc0ccd5
chore(android-terminal): drop deprecated Window.statusBarColor write
Samir Boulahtit
2026-05-08 00:22:39 +02:00
-
c1d367bac2
feat(android-terminal): Phase F — kiosk, immersive, queued-action toast
Samir Boulahtit
2026-05-08 00:20:46 +02:00
-
ac5f46cff3
feat(android-terminal): Phase E — offline queue + sync
Samir Boulahtit
2026-05-07 23:54:42 +02:00
-
c158d920d2
chore(android-terminal): dev cleartext + readable HTTP error messages
Samir Boulahtit
2026-05-06 23:17:44 +02:00
-
c1bb225228
fix(loyalty): paired-device JWT bypasses program.require_staff_pin
Samir Boulahtit
2026-05-06 23:16:33 +02:00
-
d3f1c33b37
feat(android-terminal): Phase D.5 — auto-lock idle timer
Samir Boulahtit
2026-05-06 21:31:16 +02:00
-
01a12dcef4
feat(android-terminal): Phase D.4 — enrollment dialog + QR scanner overlay
Samir Boulahtit
2026-05-06 21:28:44 +02:00
-
d345d65fd4
feat(android-terminal): Phase D.3 — recent transactions list
Samir Boulahtit
2026-05-06 21:25:10 +02:00
-
02652ee8c6
feat(android-terminal): Phase D.2 — action sheets (stamp/earn/redeem)
Samir Boulahtit
2026-05-06 21:13:31 +02:00
-
47565419e2
feat(android-terminal): Phase D.1 — terminal lookup + customer card
Samir Boulahtit
2026-05-06 20:27:06 +02:00
-
3bf23c1b23
feat(android-terminal): Phase C — PIN screen with offline bcrypt verify
Samir Boulahtit
2026-05-05 22:58:18 +02:00
-
a0e3461c48
feat(android-terminal): Phase B — setup screen with QR scanner
Samir Boulahtit
2026-05-05 22:32:25 +02:00
-
3531ab8405
feat(android-terminal): Phase A — core infrastructure
Samir Boulahtit
2026-05-05 22:11:15 +02:00
-
90b5b3d135
fix(loyalty): drop unregistered device-tablet icon, guard QR template against null
Samir Boulahtit
2026-05-05 21:31:12 +02:00
-
cb8e6a0ec3
fix(loyalty): accept store_id in body for merchant PIN create
Samir Boulahtit
2026-05-05 21:25:01 +02:00
-
573b0ef483
fix(loyalty): wire merchant staff PIN form to team-member autocomplete
Samir Boulahtit
2026-05-05 21:20:07 +02:00
-
eaffc764ec
i18n(loyalty): translate terminal_devices block to FR/DE/LB
Samir Boulahtit
2026-05-05 21:05:58 +02:00
-
d99633345f
feat(loyalty): attribute transactions to the acting POS tablet
Samir Boulahtit
2026-05-05 21:04:56 +02:00
-
c267452dc6
fix(loyalty): align /locations endpoint shape with template bindings
Samir Boulahtit
2026-05-05 21:03:33 +02:00
-
cdacc8bc0d
fix(loyalty): make device tokens authenticate via require_module_access too
Samir Boulahtit
2026-05-05 20:39:58 +02:00
-
6276e9e3ac
feat(loyalty): pair POS terminal devices with one-time setup QR
Samir Boulahtit
2026-05-05 20:18:57 +02:00
-
c7ab5eb900
fix(makefile): use \
alembic upgrade heads\ for multi-branch migrations
Samir Boulahtit
2026-05-05 20:17:44 +02:00
-
b27d4ba6ff
docs: add Android terminal implementation plan
Samir Boulahtit
2026-04-27 22:52:00 +02:00
-
6da48f88c1
fix(dev_tools): display JSON columns with brackets in SQL query tool
Samir Boulahtit
2026-04-27 22:43:04 +02:00
-
516141b41d
fix(loyalty): add Category column to card detail transaction history
Samir Boulahtit
2026-04-27 22:35:47 +02:00
-
4f70290af5
fix(loyalty): translate transaction types + notes on card detail page
Samir Boulahtit
2026-04-27 22:23:02 +02:00
-
3fa159ff2a
fix(loyalty): sanitize earn amount input on every keystroke
Samir Boulahtit
2026-04-26 17:58:42 +02:00
-
143248ff0f
fix(loyalty): restrict earn points input to digits and decimal only
Samir Boulahtit
2026-04-26 16:11:10 +02:00