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
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
tiennm99
3418461059
feat: remember last bank and date range in localStorage
2026-04-03 23:18:51 +07:00
tiennm99
ba1de1ae4f
feat: auto-fetch exchange rates on page load
2026-04-03 23:18:07 +07:00
tiennm99
43b358e28c
feat: add date range presets (Today, Last 7d, Last 30d, This month)
2026-04-03 23:17:26 +07:00
tiennm99
2132d97067
feat: add Enter key shortcut to trigger fetch
2026-04-03 23:16:47 +07:00
tiennm99
ea2f3dafcc
refactor: parallel fetching, simplified page, consistent dates, cleanup
...
- Fetch dates in parallel chunks of 5 instead of sequentially
- Simplify page.js to server component, move default dates into viewer
- Replace showTable with hasFetched for clearer semantics
- Normalize date display to yyyy-MM-dd for both banks
- Remove unused Geist_Mono font import (~50KB savings)
- Change lang to "vi" for Vietnamese bank data context
- Clean up empty blocks and redundant variables in API route
2026-04-03 23:14:40 +07:00
tiennm99
339d779540
ci: add Claude Code project configuration
2026-04-03 23:03:43 +07:00
tiennm99
41dd014b75
feat: improve UI/UX with dark mode, better visual hierarchy, and accessibility
...
- Add card layout, loading spinner, error/empty states for better UX
- Full dark mode support for date picker, tables, and inputs via CSS vars
- Extract reusable RateTable component, remove duplicate table markup
- Fix CSV injection vulnerability with escapeCsv sanitizer
- Fix URL.createObjectURL memory leak
- Replace JS hover handlers with CSS hover for better performance
- Add aria-live region for screen reader announcements
- Fix metadata from default "Create Next App" to proper title
- Differentiate table stripe/hover colors in light mode
2026-04-03 23:02:53 +07:00
Tien Nguyen Minh
edb3a2096f
Merge pull request #17 from tiennm99/dependabot/npm_and_yarn/tar-7.5.11
...
build(deps-dev): bump tar from 7.4.3 to 7.5.11
2026-03-13 14:58:48 +07:00
dependabot[bot]
179afe7a53
build(deps-dev): bump tar from 7.4.3 to 7.5.11
...
Bumps [tar](https://github.com/isaacs/node-tar ) from 7.4.3 to 7.5.11.
- [Release notes](https://github.com/isaacs/node-tar/releases )
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md )
- [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.11 )
---
updated-dependencies:
- dependency-name: tar
dependency-version: 7.5.11
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-03-11 11:40:53 +00:00
Tien Nguyen Minh
32a502b784
Merge pull request #11 from tiennm99/dependabot/npm_and_yarn/next-16.1.5
...
build(deps): bump next from 15.5.9 to 16.1.5
2026-03-11 18:39:51 +07:00
dependabot[bot]
3e002c5dcb
build(deps): bump next from 15.5.9 to 16.1.5
...
Bumps [next](https://github.com/vercel/next.js ) from 15.5.9 to 16.1.5.
- [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/v15.5.9...v16.1.5 )
---
updated-dependencies:
- dependency-name: next
dependency-version: 16.1.5
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-01-28 19:36:19 +00:00