Skip to content

V2.1.0 - #28

Merged
Shubhamnpk merged 24 commits into
mainfrom
v2.0.4
May 9, 2026
Merged

V2.1.0#28
Shubhamnpk merged 24 commits into
mainfrom
v2.0.4

Conversation

@Shubhamnpk

@Shubhamnpk Shubhamnpk commented May 9, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • Added calendar system selection (AD/BS format).
    • Added stock sell previews with cost breakdown.
    • Added dividend what-if analysis for holdings.
    • Multiple floating calculator panels with drag/dock support.
    • Enhanced portfolio stock search functionality.
    • Improved IPO detail modal with login integration.
  • Improvements

    • Calendar-aware date formatting throughout app.
    • Richer notification actions and management controls.
    • Enhanced import price verification with transaction-level pricing.
    • Streamlined biometric authentication using web standards.
    • Refined settings UI and error handling.

Jhubham567 and others added 23 commits April 27, 2026 00:14
Remove Android Capacitor references to `@aparajita` biometric/secure-storage
modules and simplify biometric enrollment/authentication to a single WebAuthn-
based path in the app.

This unifies behavior across platforms, reduces native plugin coupling, and
updates mobile-native docs to match the new biometric architecture.refactor: drop Capacitor biometric plugins for WebAuthn flow

Remove Android Capacitor references to `@aparajita` biometric/secure-storage
modules and simplify biometric enrollment/authentication to a single WebAuthn-
based path in the app.

This unifies behavior across platforms, reduces native plugin coupling, and
updates mobile-native docs to match the new biometric architecture.
Include `refreshMarketData` in wallet data context/hooks and call it during manual portfolio sync so overview and notification feeds are updated together with holdings/prices.

Improve IPO list sorting by parsing and comparing relevant dates:
- open IPOs now prioritize earlier closing dates (then application status)
- upcoming IPOs now prioritize earlier opening dates

Also update sync success messaging to reflect combined portfolio + market refresh.feat(portfolio): sync market feed and refine IPO ordering

Include `refreshMarketData` in wallet data context/hooks and call it during manual portfolio sync so overview and notification feeds are updated together with holdings/prices.

Improve IPO list sorting by parsing and comparing relevant dates:
- open IPOs now prioritize earlier closing dates (then application status)
- upcoming IPOs now prioritize earlier opening dates

Also update sync success messaging to reflect combined portfolio + market refresh.
Extend the add transaction modal to support a new `reinvestment` transaction type, add a computed total amount preview (`quantity × price`) with locale formatting, and allow passing a configurable `currencySymbol` (defaulting to `Rs. `). Also update modal copy to reflect reinvestments, improving transaction clarity and entry accuracy.feat(portfolio): add reinvestment type and live total preview

Extend the add transaction modal to support a new `reinvestment` transaction type, add a computed total amount preview (`quantity × price`) with locale formatting, and allow passing a configurable `currencySymbol` (defaulting to `Rs. `). Also update modal copy to reflect reinvestments, improving transaction clarity and entry accuracy.
- Add `mode` prop to `StockDetailModal` to support "sold" view
- Implement `formatTimeSince` utility for relative time displays
- Add `soldTransactions` and `soldDetailStats` logic to modal
- Update `PortfolioList` to handle switching between holding and sold detail modes
- Bump manifest version to 2.0.4
Add IPO entries to overview notifications and prioritize them in the feed so users can quickly see open/upcoming offerings from the portfolio screen.
Update IPO modal CTA behavior for non-automated users to open the MeroShare login page directly (and relabel action from “Setup” to “Apply Now”) to reduce friction when applying manually.feat(portfolio): surface IPO notifications and direct apply flow

Add IPO entries to overview notifications and prioritize them in the feed so users can quickly see open/upcoming offerings from the portfolio screen.
Update IPO modal CTA behavior for non-automated users to open the MeroShare login page directly (and relabel action from “Setup” to “Apply Now”) to reduce friction when applying manually.
Enhance dashboard header notifications with structured metadata (category, action labels, tab targets, bill-dialog triggers, and settings links) so alerts can drive users directly to relevant actions. Also add IPO-specific handling with selected IPO state and detail modal support to make investment notifications more interactive and useful.feat(dashboard): add actionable notification categories and IPO modal

Enhance dashboard header notifications with structured metadata (category, action labels, tab targets, bill-dialog triggers, and settings links) so alerts can drive users directly to relevant actions. Also add IPO-specific handling with selected IPO state and detail modal support to make investment notifications more interactive and useful.
Add logic to detect missing Dropbox permissions and prompt users to reconnect
when required scopes are not met. This includes:

- Implementing `getMissingDropboxScopes` to compare granted scopes against
  required ones.
- Updating `DataSettings` to handle scope-related errors and provide
  descriptive reconnection messages.
- Adding `revokeDropboxToken` to properly invalidate sessions on disconnect.
- Refactoring `clearDropboxToken` to use a prefix-based cleanup for all
  related localStorage keys.
- Updating the authentication flow to request the necessary scopes.
Implement new dashboard capabilities including notification management and
a floating calculator utility:

- Add ability to dismiss live notifications in the dashboard header,
  persisting dismissal state to localStorage.
- Implement a comprehensive floating calculator with expression
  evaluation, history tracking, and draggable/dockable UI.
- Add `clearLiveNotificationHistory` to manage notification lifecycle
  based on timestamps.
- Update dashboard header to filter out dismissed notifications from the
  active view.
Document the 2.0.4 release across `CHANGELOG.md` and `data/releases.json`
to reflect the finalized build date and published highlights.

- add 2.0.4 changelog entries for calculator, notifications, and Dropbox updates
- bump `currentBuild` to `2026.04.30` and align release date to `2026-04-30`
- revise release category/title and highlight list to match shipped UX changes

chore(release): update v2.0.4 changelog and release metadata

Document the 2.0.4 release across `CHANGELOG.md` and `data/releases.json`
to reflect the finalized build date and published highlights.

- add 2.0.4 changelog entries for calculator, notifications, and Dropbox updates
- bump `currentBuild` to `2026.04.30` and align release date to `2026-04-30`
- revise release category/title and highlight list to match shipped UX changes
Enhance the reliability and user feedback of the backup system by:

- Implementing detailed error reporting for Dropbox API operations, including HTTP status codes and parsed error descriptions.
- Adding robust network error detection for Dropbox uploads.
- Introducing explicit PIN validation during the backup import process to ensure the provided PIN matches the current wallet PIN.
- Adding UI error states and alert components in `DataSettings` and `BackupModal` to display specific validation and operation failures.
- Improving error message clarity for common failure scenarios like missing configuration or invalid PIN formats.
Enhance the import verification modal to support transaction-level pricing, not just symbol-level defaults. This adds state and props for transaction price inputs, filters and groups buy-row transactions by symbol, and introduces expandable transaction rows with contextual metadata (date, quantity, optional flag, description).

The modal layout was also widened to accommodate the richer review UI, helping users provide more accurate rates during import and reduce pricing mismatches.feat(portfolio): add per-transaction rate verification in import modal

Enhance the import verification modal to support transaction-level pricing, not just symbol-level defaults. This adds state and props for transaction price inputs, filters and groups buy-row transactions by symbol, and introduces expandable transaction rows with contextual metadata (date, quantity, optional flag, description).

The modal layout was also widened to accommodate the richer review UI, helping users provide more accurate rates during import and reduce pricing mismatches.
Show IPO symbols in the import verification modal instead of filtering them out, and clarify pricing UI by labeling the field as “IPO Price” with an auto-filled face value hint.

Also adjust queue-building logic to always prioritize Buy entries for symbol pricing, while only adding IPO defaults when a Buy price is not already present. This preserves correct manual pricing behavior and avoids unintended overrides.fix(portfolio): include IPO entries in import price verification

Show IPO symbols in the import verification modal instead of filtering them out, and clarify pricing UI by labeling the field as “IPO Price” with an auto-filled face value hint.

Also adjust queue-building logic to always prioritize Buy entries for symbol pricing, while only adding IPO defaults when a Buy price is not already present. This preserves correct manual pricing behavior and avoids unintended overrides.
Replace broad `useWalletData` usage with feature-specific hooks across UI
components (e.g., debt/credit, portfolio, notifications), including
separating portfolio state from NEPSE market data access.

This improves separation of concerns, reduces unnecessary coupling to the
global wallet context, and makes data dependencies clearer and easier to
maintain.refactor(hooks): split wallet context into domain data hooks

Replace broad `useWalletData` usage with feature-specific hooks across UI
components (e.g., debt/credit, portfolio, notifications), including
separating portfolio state from NEPSE market data access.

This improves separation of concerns, reduces unnecessary coupling to the
global wallet context, and makes data dependencies clearer and easier to
maintain.
Switch release date rendering to `formatAppDate(..., "BS")` and update budget
period calculations to be calendar-aware via `getCalendarMonthRange` and
`getCalendarSystem`.

Also refactor budget period filtering to use explicit `{start, end}` ranges,
so spending totals are constrained to the correct window (including proper
week/year boundaries and exclusive end dates). This improves consistency and
accuracy for non-Gregorian users.feat(calendar): use app calendar for dates and budget periods

Switch release date rendering to `formatAppDate(..., "BS")` and update budget
period calculations to be calendar-aware via `getCalendarMonthRange` and
`getCalendarSystem`.

Also refactor budget period filtering to use explicit `{start, end}` ranges,
so spending totals are constrained to the correct window (including proper
week/year boundaries and exclusive end dates). This improves consistency and
accuracy for non-Gregorian users.
Redesign the About settings section to make maintenance actions and help resources clearer and easier to use.
- Upgraded “Check for Updates” and “Clear caches” into richer action cards with icons, status feedback, and descriptions
- Added storage detail (“On-device by default”) to improve transparency about user data handling
- Updated external/support link handling and refreshed icon usage for docs/help/security/dev sections
- Replaced outdated organization URL (`bit-nepal.com` → `bitnepal.net`) and removed unused policy/partner link handlers to simplify the pagefeat(settings): revamp About page actions and support links

Redesign the About settings section to make maintenance actions and help resources clearer and easier to use.
- Upgraded “Check for Updates” and “Clear caches” into richer action cards with icons, status feedback, and descriptions
- Added storage detail (“On-device by default”) to improve transparency about user data handling
- Updated external/support link handling and refreshed icon usage for docs/help/security/dev sections
- Replaced outdated organization URL (`bit-nepal.com` → `bitnepal.net`) and removed unused policy/partner link handlers to simplify the page
Compute next SIP cycle amounts using base installment plus remainder carryover, and use the net investable amount to decide whether a due installment can be completed.

Also update the stock detail modal’s installment breakdown UI to show:
- base installment investment after DPS
- carryover amount (when present)
- total net investment for the current cycle

This ensures affordability checks and displayed SIP split values reflect actual payable/investable amounts.feat(portfolio): include SIP carryover in due installment logic

Compute next SIP cycle amounts using base installment plus remainder carryover, and use the net investable amount to decide whether a due installment can be completed.

Also update the stock detail modal’s installment breakdown UI to show:
- base installment investment after DPS
- carryover amount (when present)
- total net investment for the current cycle

This ensures affordability checks and displayed SIP split values reflect actual payable/investable amounts.
Move inline SIP gross/net amount, enrollment eligibility, base/remainder, and affordability logic in `stock-detail-modal` to shared utilities from `@/lib/sip`.

This reduces duplicated business logic in the modal, improves consistency across SIP flows, and makes cycle amount handling (including optional carry remainder) easier to maintain.refactor(portfolio): centralize SIP calculation helpers

Move inline SIP gross/net amount, enrollment eligibility, base/remainder, and affordability logic in `stock-detail-modal` to shared utilities from `@/lib/sip`.

This reduces duplicated business logic in the modal, improves consistency across SIP flows, and makes cycle amount handling (including optional carry remainder) easier to maintain.
Improve the expanded dividend “all years” view to surface more actionable insights per portfolio.

- Use shared `DividendPortfolioAllYearsRow` from `dividend-outlook` and remove local duplicate typing
- Add richer UI blocks for top contributors (e.g., top cash stock) alongside yearly summaries
- Wire in `OverviewStockSearch` import to support enhanced overview interactions

This makes dividend projections easier to scan by highlighting key contributors, not just year-by-year totals.feat(portfolio): enrich all-years dividend overview cards

Improve the expanded dividend “all years” view to surface more actionable insights per portfolio.

- Use shared `DividendPortfolioAllYearsRow` from `dividend-outlook` and remove local duplicate typing
- Add richer UI blocks for top contributors (e.g., top cash stock) alongside yearly summaries
- Wire in `OverviewStockSearch` import to support enhanced overview interactions

This makes dividend projections easier to scan by highlighting key contributors, not just year-by-year totals.
Introduce a new “what-if” flow in `stock-detail-modal` to estimate dividend outcomes for other stocks and unit counts without leaving the detail view.

- Added local state for what-if panel visibility, symbol query, unit input, and search focus handling
- Built a searchable dividend symbol catalog with normalized matching and top suggestions
- Added selected-symbol resolution and matched dividend history lookup for scenario calculation
- Reset all what-if states when the modal closes to prevent stale inputs between sessionsfeat(portfolio): add dividend what-if calculator in stock modal

Introduce a new “what-if” flow in `stock-detail-modal` to estimate dividend outcomes for other stocks and unit counts without leaving the detail view.

- Added local state for what-if panel visibility, symbol query, unit input, and search focus handling
- Built a searchable dividend symbol catalog with normalized matching and top suggestions
- Added selected-symbol resolution and matched dividend history lookup for scenario calculation
- Reset all what-if states when the modal closes to prevent stale inputs between sessions
Enhance the add-transaction modal with stronger typing and sell-specific trade insights.
Introduces a shared `TransactionDraft` type, adds portfolio context props (`portfolioItems`, `activePortfolioId`), and integrates `createNepseTradePreview` to compute sell preview details from matching holdings.

Also updates modal UI state and icons to support expandable preview details, while refining stock/crypto suggestion behavior for buy vs sell flows. This improves transaction accuracy and helps users validate sell entries before submitting.feat(portfolio): add NEPSE sell preview and typed tx draft

Enhance the add-transaction modal with stronger typing and sell-specific trade insights.
Introduces a shared `TransactionDraft` type, adds portfolio context props (`portfolioItems`, `activePortfolioId`), and integrates `createNepseTradePreview` to compute sell preview details from matching holdings.

Also updates modal UI state and icons to support expandable preview details, while refining stock/crypto suggestion behavior for buy vs sell flows. This improves transaction accuracy and helps users validate sell entries before submitting.
Simplify the add-transaction modal by removing extra header description text and disabling the date picker preview for a cleaner input flow.

Redesign the trade preview card to surface key values (share amount and charges) upfront and improve the expandable details toggle styling, making settlement calculations easier to scan before submission.feat(portfolio): refine add transaction preview layout

Simplify the add-transaction modal by removing extra header description text and disabling the date picker preview for a cleaner input flow.

Redesign the trade preview card to surface key values (share amount and charges) upfront and improve the expandable details toggle styling, making settlement calculations easier to scan before submission.
Use onboarding state to avoid redirecting users from wallet to `/welcome`
unless onboarding is actually active, preventing unnecessary navigation.

Enhance the welcome page to detect existing accounts (including localStorage),
show a returning-user card, and switch the primary CTA from “Start” to
“Dashboard” so returning users can quickly resume from home.feat(onboarding): improve returning-user welcome routing

Use onboarding state to avoid redirecting users from wallet to `/welcome`
unless onboarding is actually active, preventing unnecessary navigation.

Enhance the welcome page to detect existing accounts (including localStorage),
show a returning-user card, and switch the primary CTA from “Start” to
“Dashboard” so returning users can quickly resume from home.
Prepare the 2.1.0 release by updating version references and release notes across the project:
- bump release manifest and releases data to `2.1.0` (`currentBuild` 2026.05.09)
- update Android (`versionCode` 2, `versionName` 2.1.0) and iOS (`CURRENT_PROJECT_VERSION` 2, `MARKETING_VERSION` 2.1.0) app versions
- add 2.1.0 entries to `CHANGELOG.md` and `README.md` with feature, improvement, and fix highlights
- mark 2.0.4 as `stable` in release metadata

This keeps platform builds, public docs, and release tracking aligned for the 2.1.0 rollout.chore(release): cut v2.1.0 and sync app version metadata

Prepare the 2.1.0 release by updating version references and release notes across the project:
- bump release manifest and releases data to `2.1.0` (`currentBuild` 2026.05.09)
- update Android (`versionCode` 2, `versionName` 2.1.0) and iOS (`CURRENT_PROJECT_VERSION` 2, `MARKETING_VERSION` 2.1.0) app versions
- add 2.1.0 entries to `CHANGELOG.md` and `README.md` with feature, improvement, and fix highlights
- mark 2.0.4 as `stable` in release metadata

This keeps platform builds, public docs, and release tracking aligned for the 2.1.0 rollout.
@vercel

vercel Bot commented May 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mywallet Ready Ready Preview, Comment May 9, 2026 8:28am

@coderabbitai

coderabbitai Bot commented May 9, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@Shubhamnpk has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 45 minutes and 27 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6e007c62-27af-4f72-b15d-5acd5663f57f

📥 Commits

Reviewing files that changed from the base of the PR and between 6a11dfb and 716dde0.

📒 Files selected for processing (8)
  • .gitignore
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • docs/CODEBASE_ANALYSIS.md
  • docs/QA_VERIFICATION_CHECKLIST.md
  • docs/thingstodo.md
  • public/manifest.json
📝 Walkthrough

Walkthrough

Release 2.1.0 introduces AD/BS calendar utilities and applies them across UI, expands portfolio (NEPSE preview, dividends, sold lots, edit flows), enhances notifications, refactors Dropbox/auth and biometric to WebAuthn, adds hooks/tests, and updates platform/version metadata.

Changes

Release 2.1.0

Layer / File(s) Summary
Contracts & Context
types/wallet.ts, contexts/wallet-data-context.tsx
Adds calendarSystem, SIP fields, portfolio detailContext; context gains refreshMarketData/updateShareTransaction.
Core Libraries
lib/app-calendar.ts, lib/sip.ts, lib/security.ts, lib/dropbox.ts, lib/biometric-key.ts
Calendar AD/BS utils; SIP math/schedule; base64 crypto; Dropbox scopes/revoke/errors; biometric via WebAuthn/local storage.
Market/Dividend Engines
lib/dividend-outlook.ts, lib/nepse-trade-preview.ts, lib/market-*
Dividend computation, NEPSE trade preview, market search/detail helpers.
UI Calendar Adoption
components/... (budgets, categories, goals, insights, transactions, scanners, settings)
Replaces native date logic with app calendar formatting and true month ranges.
Portfolio UI
components/portfolio/*
Typed add/edit, import verification per-transaction rates, IPO/sell/SIP updates, stock detail sold-mode, overview stock search.
Notifications
components/dashboard/dashboard-header.tsx, lib/notification-history.ts, hooks/use-notifications-data.ts
Live/history with actions, read/dismiss maps, IPO modal, live-history clear.
Dashboard & Welcome
components/dashboard/*, components/welcome/*, components/security/biometric-auth.tsx, components/settings/about-settings.tsx
Multi-panel calculator; URL/event tabs; onboarding guard/returning-user UI; security copy; About/resources revamp.
Settings / Dropbox
components/settings/data-settings*.tsx, docs/mobile-native.md
Reconnect messaging, token revoke/clear, PIN error handling, improved alerts; doc updates.
Hooks
hooks/use-*.ts
Adds portfolio, NEPSE, security, debt/credit, notifications hooks.
Tests/Config
lib/test/*, vitest.config.ts
Adds tests for dividends/SIP/market search; adds @ alias; minor utils test path.
Platform/Versioning
.release-please-manifest.json, package.json, android/*, ios/*, public/*, data/releases.json, CHANGELOG.md, README.md, lib/native-mobile.ts
Version bumps, remove native plugins/platform checks, iOS/Android version updates, SW precache refresh, release data and docs.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Poem

Two calendars dance, AD and BS,
I thump my paw at dates in finesse.
Dividends glimmer, calculators glide,
WebAuthn guards the carrot I hide.
Notifications chime, backups take wing—
2.1.0, a springtime fling! 🥕✨

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v2.0.4

Align project documentation with current repository and contribution workflow by switching test commands to pnpm, updating clone URL, clarifying license text, and adding security reporting guidance. Also fix `.gitignore` to track the moved docs file path and enhance `manifest.json` with screenshot metadata to improve PWA listing completeness.chore: update docs, ignore paths, and PWA manifest metadata

Align project documentation with current repository and contribution workflow by switching test commands to pnpm, updating clone URL, clarifying license text, and adding security reporting guidance. Also fix `.gitignore` to track the moved docs file path and enhance `manifest.json` with screenshot metadata to improve PWA listing completeness.
@Shubhamnpk
Shubhamnpk merged commit b4b5559 into main May 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants