Commit Graph
109 Commits
Author SHA1 Message Date
tiennm99 32123499cb Merge branch 'refactor/source-cleanup-and-viewer-split'
History-preserving absorb: the branch's content lands in this merge
commit and is restored to the previous main tree in the next commit.
The branch ref is deleted after this merge; its history stays reachable
through the second parent.
2026-08-07 13:44:56 +07:00
tiennm99 2f5df7bbec Revert "Merge branch 'vercel/react-server-components-cve-vu-xejazm'"
This reverts commit 09afad997c, reversing
changes made to 3cef2ee4f4.
2026-08-07 13:44:56 +07:00
tiennm99 09afad997c Merge branch 'vercel/react-server-components-cve-vu-xejazm'
History-preserving absorb: the branch's content lands in this merge
commit and is restored to the previous main tree in the next commit.
The branch ref is deleted after this merge; its history stays reachable
through the second parent.
2026-08-07 13:44:56 +07:00
tiennm99 3cef2ee4f4 Revert "Merge branch 'feature/pages'"
This reverts commit 3741d1b754, reversing
changes made to 3c7c93323f.
2026-08-07 13:44:56 +07:00
tiennm99 3741d1b754 Merge branch 'feature/pages'
History-preserving absorb: the branch's content lands in this merge
commit and is restored to the previous main tree in the next commit.
The branch ref is deleted after this merge; its history stays reachable
through the second parent.
2026-08-07 13:44:56 +07:00
tiennm99 3c7c93323f Revert "Merge branch 'feature/svelte'"
This reverts commit cdfefce61d, reversing
changes made to 3d20f84a4c.
2026-08-07 13:44:56 +07:00
tiennm99 cdfefce61d Merge branch 'feature/svelte'
History-preserving absorb: the branch's content lands in this merge
commit and is restored to the previous main tree in the next commit.
The branch ref is deleted after this merge; its history stays reachable
through the second parent.
2026-08-07 13:44:56 +07:00
tiennm99 3d20f84a4c Revert "Merge branch 'feature/react'"
This reverts commit d14d951cbe, reversing
changes made to d557d87898.
2026-08-07 13:44:56 +07:00
tiennm99 d14d951cbe Merge branch 'feature/react'
History-preserving absorb: the branch's content lands in this merge
commit and is restored to the previous main tree in the next commit.
The branch ref is deleted after this merge; its history stays reachable
through the second parent.
2026-08-07 13:44:56 +07:00
tiennm99 d557d87898 fix(deps): resolve 23 Dependabot advisories
Clears all 23 open advisories (13 high, 10 moderate) on the default
branch.

next 16.2.10 -> 16.2.11 (18 of the 23 alerts), with eslint-config-next
kept in lockstep.

Bump the exact-pinned overrides that held two packages at vulnerable
versions: js-yaml 4.2.0 -> 4.3.0, postcss 8.5.16 -> 8.5.18.

Add two overrides that no upstream bump could reach:
- sharp 0.35.0, because next 16.2.11 declares ^0.34.5 and caret on a 0.x
  version excludes the patched 0.35.0
- brace-expansion 1.1.16 and 5.0.7, scoped per major branch, since
  minimatch@3 pulls 1.x and minimatch@10 pulls 5.x independently

Verified by absence: the lockfile no longer contains next 16.2.10,
sharp 0.34.5, postcss 8.5.16, js-yaml 4.2.0, brace-expansion 1.1.14 or
5.0.6. Checking only that patched versions are present would pass while a
vulnerable copy survived under a different parent.
2026-07-26 00:26:28 +07:00
tiennm99 f207130719 chore: remove Claude Code project config
Delete .claude/settings.json and drop the .claude/session-state entry from
.gitignore. Claude Code workspace state is kept outside this repo now.
2026-07-26 00:12:58 +07:00
tiennm99 332a31aa99 chore: remove dependabot version-update config 2026-07-25 14:14:58 +07:00
tiennm99 b7bebedc94 chore(deps): bump next 16.2.10, react 19.2.7, axios, date-fns, recharts and refresh lockfile 2026-07-17 18:04:45 +07:00
tiennm99 0bc13f5fda fix: remediate dependency advisories 2026-07-03 11:27:31 +07:00
tiennm99 3a39111cc4 fix(lint): pin eslint ^9 for eslint-config-next@16 compat; replace removed next lint (#37)
- Downgrade eslint ^10 → ^9 (eslint-config-next@16 requires eslint >=9)
- Rewrite eslint.config.mjs to use native flat config API (defineConfig +
  eslint-config-next/core-web-vitals direct import) instead of FlatCompat
  bridge which triggers a circular-structure JSON crash with eslint-config-next@16
- Remove @eslint/eslintrc devDep (no longer needed with native flat config)
2026-05-23 23:58:39 +07:00
dependabot[bot] c7418f6ba7 chore(deps): bump react-datepicker from 8.10.0 to 9.1.0 (#31)
Bumps [react-datepicker](https://github.com/Hacker0x01/react-datepicker) from 8.10.0 to 9.1.0.
- [Release notes](https://github.com/Hacker0x01/react-datepicker/releases)
- [Commits](https://github.com/Hacker0x01/react-datepicker/compare/v8.10.0...v9.1.0)

---
updated-dependencies:
- dependency-name: react-datepicker
  dependency-version: 9.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:08:53 +07:00
dependabot[bot] d40f0bb156 chore(deps): bump @vercel/analytics from 1.6.1 to 2.0.1 (#29)
Bumps [@vercel/analytics](https://github.com/vercel/analytics/tree/HEAD/packages/web) from 1.6.1 to 2.0.1.
- [Release notes](https://github.com/vercel/analytics/releases)
- [Commits](https://github.com/vercel/analytics/commits/v2.0.1/packages/web)

---
updated-dependencies:
- dependency-name: "@vercel/analytics"
  dependency-version: 2.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:08:29 +07:00
dependabot[bot] e67e0f83a8 chore(deps): bump @vercel/speed-insights from 1.3.1 to 2.0.0 (#33)
Bumps [@vercel/speed-insights](https://github.com/vercel/speed-insights/tree/HEAD/packages/web) from 1.3.1 to 2.0.0.
- [Release notes](https://github.com/vercel/speed-insights/releases)
- [Commits](https://github.com/vercel/speed-insights/commits/v2.0.0/packages/web)

---
updated-dependencies:
- dependency-name: "@vercel/speed-insights"
  dependency-version: 2.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:05:39 +07:00
dependabot[bot] 8e2b572640 chore(deps-dev): bump eslint from 9.39.4 to 10.4.0 (#30)
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.4 to 10.4.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.4...v10.4.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.4.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 18:04:55 +07:00
dependabot[bot] e7c41f2763 chore(deps-dev): bump eslint-config-next from 15.3.4 to 16.2.6 (#32)
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.3.4 to 16.2.6.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.2.6/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 16.2.6
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 17:59:33 +07:00
dependabot[bot] ee8ae1cfb5 chore(deps): bump the minor-and-patch group across 1 directory with 3 updates (#28)
Bumps the minor-and-patch group with 3 updates in the / directory: [axios](https://github.com/axios/axios), [date-fns](https://github.com/date-fns/date-fns) and [next](https://github.com/vercel/next.js).


Updates `axios` from 1.16.0 to 1.16.1
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.16.0...v1.16.1)

Updates `date-fns` from 4.1.0 to 4.3.0
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Commits](https://github.com/date-fns/date-fns/compare/v4.1.0...v4.3.0)

Updates `next` from 16.2.3 to 16.2.6
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.3...v16.2.6)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.16.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: date-fns
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: next
  dependency-version: 16.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-23 17:55:38 +07:00
tiennm99 2a23cd11b0 refactor: source cleanup, viewer split, tooling/docs sync (#35)
* refactor: clean up source files and split viewer into modules

Source-level cleanup with no behavior changes:
- Drop unused React default imports (React 19 auto JSX runtime)
- Hoist CHART_COLORS and add MAX_DOTS_DAYS / MAX_LEGEND_LINES named constants
- Use date-fns addDays/subDays in route helpers (no more setDate mutation)
- Drop dead current:0 field from progress state
- Use format() for export filename (local tz, not UTC)
- Replace key={idx} with composite domain keys in table rows
- Fix border-3 (non-existent in Tailwind v4) -> border-[3px] in spinner
- Fix html lang from "vi" to "en" to match UI language
- Sync description text to "Excel or CSV" across metadata and header

Restructure:
- Rename ExchangeRateViewer.js -> exchange-rate-viewer.js (kebab-case)
- Extract icons, storage helpers, and constants into sibling modules

* chore: fix lint script and align dependabot commit format

- Switch pnpm lint to "eslint src" (Next 16 removed "next lint")
- Add conventional commit-message prefix/scope to dependabot config

* docs: align README with current build and export reality

- Mention CSV alongside Excel in feature description
- Drop npm/yarn/bun commands (project locks to pnpm 11.1.1)
- Add Node 24+ / pnpm 11+ requirement note
- Fix edit-page path: src/app/page.js
2026-05-23 17:33:18 +07:00
tiennm99 1e33a343dd docs: align README with current build and export reality
- Mention CSV alongside Excel in feature description
- Drop npm/yarn/bun commands (project locks to pnpm 11.1.1)
- Add Node 24+ / pnpm 11+ requirement note
- Fix edit-page path: src/app/page.js
2026-05-23 17:23:23 +07:00
tiennm99 e178483bca chore: fix lint script and align dependabot commit format
- Switch pnpm lint to "eslint src" (Next 16 removed "next lint")
- Add conventional commit-message prefix/scope to dependabot config
2026-05-23 17:23:18 +07:00
tiennm99 2417946d9e refactor: clean up source files and split viewer into modules
Source-level cleanup with no behavior changes:
- Drop unused React default imports (React 19 auto JSX runtime)
- Hoist CHART_COLORS and add MAX_DOTS_DAYS / MAX_LEGEND_LINES named constants
- Use date-fns addDays/subDays in route helpers (no more setDate mutation)
- Drop dead current:0 field from progress state
- Use format() for export filename (local tz, not UTC)
- Replace key={idx} with composite domain keys in table rows
- Fix border-3 (non-existent in Tailwind v4) -> border-[3px] in spinner
- Fix html lang from "vi" to "en" to match UI language
- Sync description text to "Excel or CSV" across metadata and header

Restructure:
- Rename ExchangeRateViewer.js -> exchange-rate-viewer.js (kebab-case)
- Extract icons, storage helpers, and constants into sibling modules
2026-05-23 17:23:13 +07:00
tiennm99 6211658e7f chore: drop inapplicable dependabot ecosystems (#34) 2026-05-23 11:09:00 +07:00
tiennm99 dd391a2f0d chore: add dependabot config (#27) 2026-05-23 10:48:56 +07:00
tiennm99 8b96873f8e chore(node): set Node 24 as default via engines.node 2026-05-13 17:12:31 +07:00
tiennm99 543a264785 fix(pnpm): add allowBuilds for sharp and unrs-resolver (pnpm 11) 2026-05-13 16:51:50 +07:00
tiennm99 da1252b598 fix(node): require Node 22.13+ for pnpm 11.1.1 2026-05-13 16:44:11 +07:00
tiennm99 4cd035f265 chore: migrate from npm to pnpm
Replace package-lock.json with pnpm-lock.yaml and add packageManager field.
2026-05-13 10:20:25 +07:00
dependabot[bot] 08e93e61d3 build(deps): bump next from 16.2.2 to 16.2.3 (#23)
Bumps [next](https://github.com/vercel/next.js) from 16.2.2 to 16.2.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.2...v16.2.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:33 +07:00
dependabot[bot] ac2a80d975 build(deps): bump follow-redirects from 1.15.9 to 1.16.0 (#25)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.9 to 1.16.0.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.9...v1.16.0)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-version: 1.16.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:31 +07:00
tiennm99 248851ab6a chore: add Apache-2.0 license 2026-04-29 21:33:36 +07:00
tiennm99 f93bc95ed9 Merge pull request #22 from tiennm99/dependabot/npm_and_yarn/next-16.2.2
build(deps): bump next from 16.1.5 to 16.2.2
2026-04-05 11:12:26 +07:00
dependabot[bot] ca423741ad build(deps): bump next from 16.1.5 to 16.2.2
Bumps [next](https://github.com/vercel/next.js) from 16.1.5 to 16.2.2.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.1.5...v16.2.2)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-03 16:31:13 +00:00
tiennm99 c7790918af Merge pull request #21 from tiennm99/dependabot/npm_and_yarn/multi-bf05dc1ecf
build(deps): bump picomatch
2026-04-05 11:12:04 +07:00
dependabot[bot] 11e885749c build(deps): bump picomatch
Bumps  and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together.

Updates `picomatch` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

Updates `picomatch` from 4.0.2 to 4.0.4
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:28:06 +00:00
tiennm99 38b6561e26 Merge pull request #20 from tiennm99/dependabot/npm_and_yarn/flatted-3.4.2
build(deps-dev): bump flatted from 3.3.3 to 3.4.2
2026-04-05 11:11:48 +07:00
dependabot[bot] eb818e51eb build(deps-dev): bump flatted from 3.3.3 to 3.4.2
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.3 to 3.4.2.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.3...v3.4.2)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-21 15:48:32 +00:00
tiennm99 8bd463227b feat: add responsive card layout for tables on mobile screens
Tables show as cards on small screens (<640px) with key rate fields
in a compact grid, while desktop retains the full table view.
2026-04-04 13:28:01 +07:00
tiennm99 e235aaff6d feat: add dark mode toggle with system/light/dark cycling
Three-state theme toggle persisted to localStorage. Supports
explicit light/dark override or falling back to system preference.
2026-04-04 13:27:02 +07:00
tiennm99 c7861eed5b feat: sync state to URL params for shareable/bookmarkable queries
Bank, currency, and date range are now reflected in URL search
params. URL params take priority over localStorage on load.
2026-04-04 13:25:52 +07:00
tiennm99 c1e37861d1 feat: add loading progress indicator with day count and progress bar
Show total days being fetched and an animated progress bar during
data loading to give users better feedback on long date ranges.
2026-04-04 13:25:14 +07:00
tiennm99 5d600e0ab9 feat: add retry with exponential backoff for bank API requests
Bank APIs can be flaky; retrying up to 2 times with exponential
backoff (500ms, 1s) improves reliability for transient failures.
2026-04-04 13:23:23 +07:00
tiennm99 ebe1bd3ba7 feat: improve UI/UX with consistent styling and better usability
Replace all inline styles with Tailwind classes, add SVG icons to
action buttons, right-align numeric table cells with tabular-nums,
add sticky table headers, highlight active date preset, improve
empty state with illustration, fix SSR hydration mismatch for
localStorage settings, and make buttons mobile-responsive.
2026-04-04 00:11:32 +07:00
tiennm99 75eed4a75a feat: add rate trend chart with recharts
Toggle "Show Chart" displays line chart above the table.
Supports single-bank and comparison mode visualizations.
Also modularized components: extracted tables, status indicators,
and chart into separate files for maintainability.
2026-04-03 23:27:21 +07:00
tiennm99 7c00e8b948 feat: add BIDV vs TCB comparison mode
Toggle fetches both banks simultaneously, merges by date+currency,
and displays side-by-side in a unified table. Bank selector disabled
in compare mode. Export handles comparison data format.
2026-04-03 23:24:56 +07:00
tiennm99 b2a7070d54 feat: add Excel (.xlsx) export alongside CSV
Use SheetJS (xlsx) for proper Excel file generation.
Both export buttons available: Excel as primary, CSV as secondary.
2026-04-03 23:22:57 +07:00
tiennm99 5c683f4c47 feat: add multi-currency support with currency selector
API now accepts currency param (USD, EUR, JPY, ALL, etc.).
Returns array of rates per date instead of single object.
Frontend adds currency dropdown with 12 common currencies plus "All".
2026-04-03 23:21:25 +07:00