From 7b727cec53d6eccdd278a0bf77f59e1c75f13aa5 Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 10:12:10 +0330 Subject: [PATCH 01/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20Mini=20App=20c?= =?UTF-8?q?art=20FAB=20(v2.8.60)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 43e484f..3dffdde 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -689,6 +689,19 @@ TON-only, no EVM; backend already has tonProofService). --- +### 2026-06-03 — frontend@HEAD — Mini App floating cart FAB (v2.8.60) + +**Why:** User wants the web shop's small edge-docked basket (count badge) in the Mini App too. +New `TelegramCartFab` component pinned above the tab bar, shown on shop tab + in-shell seller +shop, opens the in-shell cart. Replaced the header cart chip + bottom cart bar. +**Pending next (user requests):** (1) Mini App «تنظیمات» — dark/light mode for the Telegram shell +(needs a dark palette variant of telegram-shell-css + toggle; should follow webApp.colorScheme); +(2) «درخواست جدید» button font — it is Telegram's NATIVE MainButton, font cannot be customized; +option is replacing it with an in-shell button using the project font. +**Verification:** tsc + eslint clean. + +--- + ### 2026-06-02 — backend@7c4dedf — complete dual-write repos, migrations pipeline, TTL scheduler, address reconciliation **Commits:** `7c4dedf` (backend v2.8.44), frontend v2.8.44 From 3cac5bd45ecbc00945611826a78dac14e276229d Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 10:35:17 +0330 Subject: [PATCH 02/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20Mini=20App=20s?= =?UTF-8?q?upport=20bubble=20(v2.8.61)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 3dffdde..b08294e 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -712,4 +712,16 @@ option is replacing it with an in-shell button using the project font. --- +### 2026-06-03 — frontend@HEAD — Mini App floating support bubble (v2.8.61) + +**Why:** Parity with the web dashboard's green floating chat widget. New `TelegramSupportFab` +(edge-docked, green bubble) on home/shop/requests tabs + in-shell seller shop; opens/creates the +support chat. Stacks above the cart FAB in shop contexts. +**Verification:** tsc + eslint clean. +**In progress / queued:** Points & Referral audit (background agent — bugs observed: values render +as "·", Bronze level claims "highest level"); Mini App dark mode (تنظیمات); buyer-parity phase 2 +(offers view/accept). + +--- + From c663c657e298e6bdcce2e3d3be88e1a7fb7a71fc Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 10:54:04 +0330 Subject: [PATCH 03/50] =?UTF-8?q?docs:=20sync=20from=20backend=20c5d6490?= =?UTF-8?q?=20=E2=80=94=20points=20level=20fixes=20(v2.8.62)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index b08294e..d88465a 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -724,4 +724,19 @@ as "·", Bronze level claims "highest level"); Mini App dark mode (تنظیما --- +### 2026-06-03 — backend@c5d6490 — Points & Referral audit fixes (v2.8.62) + +**Why (from points audit):** /dashboard/points showed "·" instead of numbers and told Bronze users +they are at "the highest level". Root causes: (1) level boundary off-by-one — seeds define +inclusive maxPoints (Bronze 0–999) but PG used `>` and Mongo `<`, so exact-boundary users resolved +to no level; (2) `level_configs` table in Postgres was created but NEVER seeded → zero levels → +null next-level → "highest level" message. Fixes: inclusive comparisons in both repos + +self-seeding of the 5 default levels (برنز/نقره/طلا/پلاتین/الماس) in ensurePostgresLevelConfigSchema. +**Remaining from audit:** frontend points page swallows API errors (shows zeros instead of an +error state); integration ideas: award points on completed escrow, show points in Mini App. +**Verification:** tsc clean, 8 tests green. Admin verifies after deploy: /dashboard/points shows +real numbers and Bronze shows progress toward نقره. + +--- + From c61028f880f7023562b830f5bda2992e5fdd311b Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 10:57:27 +0330 Subject: [PATCH 04/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20compact=20Mini?= =?UTF-8?q?=20App=20FABs=20(v2.8.63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index d88465a..ee2c76f 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -739,4 +739,12 @@ real numbers and Bronze shows progress toward نقره. --- +### 2026-06-03 — frontend@131700b — compact floating cart/support FABs (v2.8.63) + +**Why:** User feedback — the two edge-docked FABs were too large. Compacted paddings, icons, +badge, and stack positions. +**Verification:** tsc clean. + +--- + From 23c4a717bae70b201dc0c46c063f9d987d841888 Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 11:18:48 +0330 Subject: [PATCH 05/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20Mini=20App=20p?= =?UTF-8?q?oints=20+=20email=20verify=20(v2.8.64)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index ee2c76f..ab59fec 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -747,4 +747,15 @@ badge, and stack positions. --- +### 2026-06-03 — frontend@d64e194 — Mini App points view + tap-to-verify email (v2.8.64) + +**Why:** Buyer parity — امتیازات و رفرال now in-shell (TelegramPointsView: points cards, level +progress, referral code copy + stats; account-tab row). Email verification from the Mini App: +unverified badge is tappable → sends code → code-entry sheet → verifyProfileEmail → session +refresh. Reuses existing account.ts actions. +**Verification:** tsc + eslint clean. Test after deploy: account tab → امتیازات row; unverified +user → tap red badge → enter emailed code → badge turns green. + +--- + From f68b54a9eff8e2963f7ac6f0c3e719cf607aa981 Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 11:41:21 +0330 Subject: [PATCH 06/50] =?UTF-8?q?docs:=20sync=20from=20backend=2091877ae?= =?UTF-8?q?=20=E2=80=94=20points=20legacy-id=20fix=20(v2.8.63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index ab59fec..b92d80e 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -758,4 +758,13 @@ user → tap red badge → enter emailed code → badge turns green. --- +### 2026-06-03 — backend@91877ae — points lookups accept legacy user ids (v2.8.63) + +**Why:** Mini App points view (v2.8.64) failed: every user lookup in DrizzlePointsRepo compared +users.id (uuid) against the JWT legacy 24-hex id → uuid cast error → 500. All lookups now match +either format (id::text = $n OR legacy_object_id = $n). +**Verification:** tsc clean, tests green. Test after deploy: Mini App → حساب → امتیازات shows data. + +--- + From a28bcff4f42e79532085e03955f85bd02aa9ae3a Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 11:55:10 +0330 Subject: [PATCH 07/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20v2.8.65=20+=20?= =?UTF-8?q?Mini=20App=20UX=20queue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index b92d80e..f4622c8 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -767,4 +767,17 @@ either format (id::text = $n OR legacy_object_id = $n). --- +### 2026-06-03 — frontend@HEAD — remove MainButton, in-tab CTA, sign-in retry (v2.8.65) + +**Why (user requests):** (1) native Telegram MainButton removed — wrong font, duplicated CTAs; +«+ درخواست جدید» button added inside the requests tab header instead. (2) Intermittent 503 on +Telegram sign-in (backend redeploy windows) — sign-in now retries transient 502/503/504 3x with +backoff and shows the Persian message. +**Queued (user, with screenshots):** cart −=remove at qty 1; seller-shop card redesign (+ icon, +template detail view, search/filter/sort); requests search + status-chip filters + sort; shop +search; seller chat button; referral signup points; dark mode. +**Verification:** tsc + eslint clean. + +--- + From 773e2e23c4ff32103a246adddfac460516196a62 Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 12:44:27 +0330 Subject: [PATCH 08/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20v2.8.66-67=20+?= =?UTF-8?q?=20review=20system=20audit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index f4622c8..032d84a 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -780,4 +780,20 @@ search; seller chat button; referral signup points; dark mode. --- +### 2026-06-03 — frontend v2.8.66–67 — seller chat, header bell, cart UX + review system audit + +**v2.8.66:** seller rows in the Mini App shop get a chat icon (direct conversation with the +seller); header gets a notification bell opening the in-shell notifications list. +**v2.8.67 fixes:** seller chat gave "Validation failed" (backend expects ONE participant for +direct chats — current user auto-added; we sent two). Cart «−» at qty 1 now removes the item +(separate remove button dropped). Bell: borderless + red dot instead of count. +**Review/rating system audit completed (agent):** backend schema/API/store fully working +(reviews table, /api/marketplace/reviews). Broken: seller rating HARDCODED 4.5 in +DrizzleMarketplaceRepo.findSellersWithActiveRequestTemplates (never reads real reviews); +review form never sends purchaseRequestId (verified-buyer badge never set); Step 6 +post-delivery has NO review prompt; Mini App has no reviews. Full phased plan in agent output — +next work items. + +--- + From 32a033869bf6a3d2383b74a5730b346aa62449ce Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 13:17:29 +0330 Subject: [PATCH 09/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20backend=20v2.8?= =?UTF-8?q?.64-65=20ratings=20+=20chat=20names?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 032d84a..5b8c76b 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -796,4 +796,18 @@ next work items. --- +### 2026-06-03 — backend v2.8.64–65 — real seller ratings + chat participant names + +**v2.8.64:** seller list ratings now aggregated from published reviews (was hardcoded 4.5); +exposes rating/ratingCount per seller. +**v2.8.65:** PG chats showed "Unknown User" — participants (JSONB ids) are now populated with +firstName/lastName/email/avatar from the users table (uuid OR legacy id matched), in +findByIdWithParticipants and findForUser. Parity with Mongo .populate(). +**In progress:** background agent fixing seeds for the PG database + creating complete mock shops +(categories in PG → fixes template-creation 500) — will be reviewed and shipped when it reports. +**Queued (user):** in-shell تنظیمات عمومی (profile editing) in Mini App; post-delivery review +prompt; template detail view + search/filter/sort in shop and requests; dark mode. + +--- + From c39e89b266394e35c1a36628643fa0243bfc860a Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 13:38:34 +0330 Subject: [PATCH 10/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20PG=20seeds,=20?= =?UTF-8?q?mock=20shops,=20template-creation=20fix=20(backend=20v2.8.65-66?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 5b8c76b..1f27691 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -810,4 +810,26 @@ prompt; template detail view + search/filter/sort in shop and requests; dark mod --- +### 2026-06-03 — backend v2.8.65–66 — PG seeds, mock shops, template-creation fix + +**Template-creation 500 root cause (agent):** categories table column conflict (Drizzle "order" +vs categoryStore order_num) + random legacy ids per seed → category ids served by the API were +unresolvable by createRequestTemplate. Fixed: categoryStore aligned to canonical "order" column +(with one-time order_num migration), deterministic category legacy ids, hardened categories +fallback (id::text match). Also fixed: the v2.8.64 rating aggregation queried Drizzle reviews +columns but the physical table (written by reviewStore) has different columns — rewritten +against the real columns (seller_user_id). +**New seed:** src/seeds/seedMockShops.ts — Persian categories, 5 sellers + shop settings, +templates with picsum product images, published reviews. npm scripts fixed (paths) + added +seed:levels / seed:templates / seed:mock-shops. +**⚠️ DEV ENV REQUIREMENT:** CATEGORY_STORE=postgres (and ideally REVIEW_STORE / +SHOP_SETTINGS_STORE = postgres) must be set in dev .env.local when REPO_MARKETPLACE=postgres — +docker-compose.dev.yml still defaults these to mongo. Without this, template creation keeps +failing. +**Run on dev after deploy:** docker exec npm run seed:categories && npm run +seed:mock-shops +**Verification:** tsc clean, 14 tests green (3 suites). + +--- + From 128945f0e979119872b27f89ffc82164cb5dee2d Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 14:01:47 +0330 Subject: [PATCH 11/50] =?UTF-8?q?docs:=20sync=20=E2=80=94=20template=20car?= =?UTF-8?q?ds=20redesign=20+=20detail=20view=20(frontend=20v2.8.68)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09 - Audits/Activity Log.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 1f27691..ee4ac27 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -832,4 +832,18 @@ seed:mock-shops --- +### 2026-06-03 — frontend v2.8.68 — product-style template cards + in-shell template detail + +**Why (user reference design):** seller-shop template cards redesigned image-first (photo + +circular add-to-cart overlay + title/price); tapping opens a new in-shell template detail view +(image gallery with thumbnails/counter, product-type chip, price, description, specs, tags, +sticky add-to-cart/order). New view: telegram-template-detail-view.tsx; shell openTemplate +overlay. +**Dev env (user applied):** CATEGORY_STORE/REVIEW_STORE/SHOP_SETTINGS_STORE=postgres set; +backend v2.8.66 restarted healthy; 24 categories auto-seeded into PG. seed:mock-shops still to +be run by the user for demo data. +**Verification:** tsc + eslint clean. + +--- + From 22b1ad4f2b45b5116ce7ff4f32adac7d0e271ed1 Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 14:42:52 +0330 Subject: [PATCH 12/50] =?UTF-8?q?docs:=20activity=20log=20=E2=80=94=20back?= =?UTF-8?q?end=20v2.8.67=20(auto-seed=20flag),=20frontend=20v2.8.69=20(web?= =?UTF-8?q?-parity=20shop=20UI)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- 09 - Audits/Activity Log.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index ee4ac27..59d21c1 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -846,4 +846,27 @@ be run by the user for demo data. --- +### 2026-06-03 — backend v2.8.67 — auto-seed mock shops on startup + +**Feature:** new env flag `SEED_MOCK_SHOPS_ON_START=true` runs seedMockShops() during backend +boot (after migrations/levels). Idempotent — existing rows are skipped — so the flag can stay +on permanently in dev. +**Action for dev env:** add `SEED_MOCK_SHOPS_ON_START=true` next to the other store flags and +restart the backend container; demo shops/templates/reviews appear automatically. +**Verification:** tsc clean. + +--- + +### 2026-06-03 — frontend v2.8.69 — web-app-parity shop cards + template detail gallery + +**Per user screenshots:** (1) shop cards — circular «+» add-to-cart moved OFF the photo, now +sits beside the title/price row; (2) template detail — web-style carousel: rounded image, +‹ n/m › arrow/counter pill, touch-swipe navigation, centered thumbnails; (3) removed «سفارش این +قالب» everywhere (product logic: buyer either creates a request or buys via cart) — add-to-cart +is the single full-width CTA in the detail sticky bar. +Files: telegram-seller-shop-view.tsx, telegram-template-detail-view.tsx. +**Verification:** tsc + eslint clean. + +--- + From 17755b97e027dc5856c7490cf24e91f52dfa3a41 Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 17:45:58 +0330 Subject: [PATCH 13/50] =?UTF-8?q?docs:=20activity=20log=20=E2=80=94=20fron?= =?UTF-8?q?tend=20v2.8.70=20(in-shell=20settings/addresses,=20central=20th?= =?UTF-8?q?eme=20+=20dark=20mode)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- 09 - Audits/Activity Log.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 59d21c1..86337b4 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -869,4 +869,34 @@ Files: telegram-seller-shop-view.tsx, telegram-template-detail-view.tsx. --- +### 2026-06-03 — frontend v2.8.70 — in-shell settings + addresses, central theme + dark mode + +**In-shell account screens (were opening the web dashboard):** +- تنظیمات عمومی → telegram-settings-view.tsx: name/email/bio edit form via + updateUserProfile; session refresh on save. +- آدرس‌های تحویل → telegram-addresses-view.tsx: full address CRUD (list / add / + edit / delete / set-primary) on the addresses API + use-telegram-addresses SWR hook. +- Account rows switched from href→onClick; new overlay states 'settings'/'addresses' + in the shell. (Passkey stays web — WebAuthn limitation.) + +**Theme overhaul — Mini App now uses the CENTRAL web-app theme:** +- constants.ts: TG_PALETTE_LIGHT / TG_PALETTE_DARK derived from + src/theme/theme-config.ts (primary green, grey ramp, status colors) instead of + the ad-hoc cream/saffron palette; font stack aligned with AMANEH_FONT + (IBM Plex Sans / Vazirmatn). +- telegram-shell-css.ts: emits both palettes; `.tg-shell--dark` flips every token — + components keep the same CSS-var names. +- use-telegram-theme hook: auto (follow Telegram colorScheme) | light | dark, + persisted in localStorage; syncs Telegram native header/background colors. +- Theme toggle row (auto/light/dark) added to the account tab. +- Hero headers (account / seller-shop / welcome banner / unlinked) use new + --header-bg/--header-fg/--header-fg-muted vars so they stay legible in both modes. +- Removed the inline themeParams background/text override in getTelegramShellStyle + that forced a navy shell under light components on dark-mode Telegram clients + (the bad bg/font the user reported). +**Verification:** tsc + eslint clean (one pre-existing no-constant-condition +warning in telegram-webapp.ts, untouched). + +--- + From d6628db325018ff2e45997956cba0bc09fa52a8c Mon Sep 17 00:00:00 2001 From: moojttaba Date: Wed, 3 Jun 2026 18:05:36 +0330 Subject: [PATCH 14/50] =?UTF-8?q?docs:=20activity=20log=20=E2=80=94=20fron?= =?UTF-8?q?tend=20v2.8.71=20(solar=20icons,=20avatar=20upload,=20achieveme?= =?UTF-8?q?nts,=20theme-toggle=20fix)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- 09 - Audits/Activity Log.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/09 - Audits/Activity Log.md b/09 - Audits/Activity Log.md index 86337b4..ef5d03c 100644 --- a/09 - Audits/Activity Log.md +++ b/09 - Audits/Activity Log.md @@ -899,4 +899,29 @@ warning in telegram-webapp.ts, untouched). --- +### 2026-06-03 — frontend v2.8.71 — Mini App: solar icons, avatar upload, achievements, theme-toggle fix + +**Icons:** telegram-icons.tsx redrawn to mirror the dashboard's Solar "linear" +set (home-2 / document-add / chat-round-dots / user / shop-2 / wallet-money / +rounded arrows). Added sun, moon, themeAuto, camera, trophy, lock. +**Theme toggle now icon-based** (sun=light, moon=dark, half-disc=auto) instead +of text labels — per user request. +**BUGFIX — theme toggle didn't respond:** TelegramListRow rendered a *disabled* +