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.
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.
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.
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".
- 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
- 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
Introduces a new index.html file providing a web interface to fetch and export USD exchange rates from BIDV for a selected date range. The README is updated with feature descriptions and relevant API endpoints.
* build(deps): remove unused frameworks and clear all advisories
The v0 scaffold declared @remix-run/react, @sveltejs/kit, svelte, vue and
vue-router, none of which are imported anywhere in the app. Removing them
drops react-router, react-router-dom, turbo-stream, cookie, vite and their
trees, clearing 13 advisories outright.
Replace xlsx with write-excel-file. The npm release of xlsx is abandoned at
0.18.5, so its prototype pollution and ReDoS advisories have no registry fix,
and SheetJS only ships newer builds from its own CDN as a tarball with no
integrity hash, which pnpm rejects. write-excel-file is maintained, carries no
advisories, and pulls in only fflate. The export writes the same eight columns
in the same order to a sheet named "Exchange Rates", with every value still
written as a string. It also cuts the route's first-load JS from 264 kB to
163 kB.
Add pnpm overrides forcing the lowest release that closes every advisory
affecting the previously resolved version of each remaining transitive dep.
postcss is pinned exactly because pnpm's minimumReleaseAge policy rejects
releases younger than 24h during CI installs.
* ci: add typecheck and build workflow
The repository had no workflows. Type errors are skipped during builds via
next.config.mjs, so check them here where a regression fails the run.
Installs use --frozen-lockfile so dependency overrides cannot silently stop
applying.