Commit graph

56 commits

Author SHA1 Message Date
79dd6ed591 fix(web): parse real merchant out of card-string :MCI: segment
Card charges were showing as raw masked-card strings with no suggestion.
prettyMerchant/suggestCategory now extract the merchant after the last
:MCI: segment (e.g. "...:MCI:ANTHROPIC 1" -> "ANTHROPIC"), and the
keyword map is grounded in real uncategorized merchants (card-processed
software/cloud, cross-border marketplaces, local lenders, grocers,
carriers, electronics, gaming). Also fixes a Cyrillic \b word-boundary
bug (JS's \b never matches non-ASCII text) and moves CAFE/КАФЕ to the
Coffee rule instead of Food & Drink.
2026-08-23 00:41:58 +08:00
b9e58cb319 feat(web): batch categorizer with auto-suggested categories + coverage 2026-08-23 00:35:21 +08:00
ed4f7ca97b fix(web): categorize queue excludes salary/income/transfers (only uncategorized spending) 2026-08-23 00:26:56 +08:00
3f42f21504 feat(web): money-clarity home — cash-flow hero + where-it-went + recurring + net worth + categorize nudge 2026-08-23 00:04:20 +08:00
7014ed3d2e fix(web): planner category drill-down — filter to the actual category (backend appends unrelated stragglers) + localized title/icon 2026-08-22 23:33:25 +08:00
2e391ce244 fix(web): sync data-seed-user-color-scheme so system dark-mode follows OS 2026-08-22 23:25:10 +08:00
6260cc3479 merge feat/dark: dark mode + theme toggle
# Conflicts:
#	web/src/ds/index.ts
2026-08-22 23:20:11 +08:00
972ac65a2b feat(web): dark mode (system/light/dark) via Seed color-mode + profile toggle 2026-08-22 23:19:31 +08:00
14d04d348c feat(web): server-side bank sync button (trigger + poll + refresh) 2026-08-22 23:14:34 +08:00
245ef6ea03 merge feat/aux: feature build-out 2026-08-22 23:02:25 +08:00
2b56d94a9f merge feat/lend: feature build-out 2026-08-22 23:02:25 +08:00
2637eb48a7 feat(web): txn-detail subscription/convert-to-lending + lending transaction-linking 2026-08-22 23:02:01 +08:00
e478ca5826 feat(web): transactions month nav + category filters + categorize-review queue
Adds a month navigator and category filter chips to the Тооцоо list, plus a
categorize-review flow at /accounting/review for bulk-assigning categories to
uncategorized merchants (grouped by matchKey, biggest spend first).
2026-08-22 23:00:09 +08:00
7753168b11 feat(web): password-reset + email-verify pages + planner spend-breakdown 2026-08-22 22:59:15 +08:00
5eff0f661f feat(web): use real Seed icon catalog (@seed-design/react-icon) matching iOS iconography 2026-08-22 22:28:41 +08:00
0010b7b5fa test(web): expect localized category name (Кофе) after localization 2026-08-22 22:19:41 +08:00
11c30b6690 merge rw/profile: visual rework to reference bar 2026-08-22 22:18:47 +08:00
edef3272cd merge rw/planner: visual rework to reference bar 2026-08-22 22:18:47 +08:00
15f2879f8b merge rw/assets: visual rework to reference bar 2026-08-22 22:18:47 +08:00
059b7e13d5 feat(web): rework profile + auth visuals to reference bar
Elevate the Profile (Миний) tab and login/register/forgot screens to match
TransactionList's IconChip + Card row pattern:

- Profile: avatar medallion (initial + brand tint) + name/email header,
  IconChip menu rows (Тохиргоо/Ангилал/Захиалга) with chevrons, IconChip +
  EmptyState connected-banks list.
- Categories/Subscriptions: IconChip rows via categoryStyle, EmptyState for
  empty lists, chevron-left back buttons.
- Auth: shared AuthHeader with a tinted monogram + wordmark lockup, more
  comfortable field/CTA spacing in AuthForm.

Visual only — no changes to hooks, mutations, or auth actions.
2026-08-22 22:18:18 +08:00
1bb43e58c2 feat(web): rework dashboard visuals to reference bar 2026-08-22 22:17:22 +08:00
404ab94e1c feat(web): rework planner visuals to reference bar
Elevate the Planner page presentation to match the TransactionList
reference: category-limit and savings-goal rows now use IconChip for
the category/goal chip, SectionHeader for the "+" add actions, and
EmptyState for the empty limits/goals states (split from the existing
Mongolian copy, no new strings invented). The unset daily-limit card
now shows a subtle "Лимит тохируулаагүй" hint instead of "0₮ / —".
Pure presentation — usePutBudget's full-categories-echo save and all
mutation/dialog logic are untouched.
2026-08-22 22:16:20 +08:00
43108a92bb feat(web): rework assets visuals to reference bar 2026-08-22 22:16:05 +08:00
e0c07be232 feat(web): shared design primitives (IconChip, SectionHeader, EmptyState) 2026-08-22 22:09:32 +08:00
66d82b8b68 feat(web): real inline-SVG icon set (replace emoji); txn detail loading skeleton 2026-08-22 22:06:13 +08:00
06e74b1668 feat(web): localize categories to Mongolian + icon/color chips; fix transaction date sort; add deploy Dockerfile 2026-08-22 21:58:33 +08:00
6913c1e5ee feat(web): desktop layout (wider container + 2-col dashboard) + redirect-loop fix + mn string
- Shell content widens to max-w-6xl on desktop (was phone-strip max-w-2xl)
- Dashboard reflows into a 2-col grid on desktop instead of stretching
- On 401, clear session cookie via logout before redirect (prevents /login<->/home loop when cookie outlives server session)
- Profile 'Subscriptions' -> 'Захиалга'
2026-08-22 21:33:14 +08:00
d94e961d97 fix(web): apply Seed canonical theme setup (body fg-neutral color + data-seed attrs)
Default text resolved to white-on-white because globals.css set a background
but no base color, and <html> carried no data-seed attributes. Mirrors
daangn.com's live setup: html[data-seed][data-seed-color-mode] + body
color: var(--seed-color-fg-neutral). Fixes invisible text app-wide.
2026-08-22 21:30:30 +08:00
b02674aa62 fix(web): SwitchHiddenInput on settings hideAmounts toggle + correct smoke comment 2026-08-22 21:16:45 +08:00
6e84d99d46 test(web): exclude e2e/ from vitest collection 2026-08-22 21:10:48 +08:00
95729de201 test(web): MSW harness + Playwright smoke + QA pass 2026-08-22 21:09:59 +08:00
3014385e9b merge task/t10: transactions list + detail + edits 2026-08-22 21:01:05 +08:00
beb1915bd8 merge task/t11: assets, net worth, manual assets, lending 2026-08-22 21:00:44 +08:00
c8fd8eecc0 merge task/t13: profile settings/categories/subscriptions/connected-banks (read-only) 2026-08-22 21:00:11 +08:00
c52a2d731d merge task/t12: planner budget/limits/savings goals 2026-08-22 20:59:59 +08:00
0b2a786791 feat(web): assets, net worth, manual assets, lending 2026-08-22 20:58:36 +08:00
24642be543 feat(web): profile settings, categories, subscriptions, connected banks (read-only) 2026-08-22 20:57:19 +08:00
922d2b54ef feat(web): transactions list + detail + categorize/rename/note 2026-08-22 20:57:07 +08:00
f9195c5ffa feat(web): planner budget/limits/savings goals 2026-08-22 20:57:01 +08:00
762b572d30 feat(web): home dashboard + data assembly ported from iOS 2026-08-22 20:53:02 +08:00
2555e42f21 test(web): polyfill CSS.supports in shared vitest setup (Seed TextField needs it) 2026-08-22 20:45:59 +08:00
efd252e8ff merge task/t7: auth screens (login/register/forgot/2FA) 2026-08-22 20:45:48 +08:00
ef0fe234b8 feat(web): auth screens (login/register/forgot/2FA) 2026-08-22 20:42:29 +08:00
08cae39f59 feat(web): responsive app shell + tab navigation 2026-08-22 20:39:22 +08:00
071b5bdb6f merge task/t6: Mercury DS components + base i18n 2026-08-22 20:35:15 +08:00
7868c7e6f4 test(web): render real Seed components under vitest (inline @seed-design) + assert Mercury button styling 2026-08-22 20:34:14 +08:00
9afb5fcee8 fix(web): handle empty-body 201/204 responses in API client 2026-08-22 20:29:35 +08:00
83c5ffbdaf feat(web): Mercury DS components + base i18n 2026-08-22 20:29:14 +08:00
53755e9c3a feat(web): typed API client + TanStack Query hooks 2026-08-22 20:24:53 +08:00
3fd45fe54d fix(web): reject path-traversal segments in the API proxy 2026-08-22 20:19:31 +08:00