# FinWise AI

Retirement planning for Indian users, with a calculator, a chat agent and monthly email reminders.

- Status: complete
- Started: 2025-11
- Stack: React, Vite, Tailwind CSS, Framer Motion, Botpress Webchat, Node.js, Express, node-cron, Nodemailer, ESLint
- Page: https://www.architbhuta.space/projects/finwise-ai
- Repository: https://github.com/Ronit9320/FinWise_AI

## Overview

Retirement planning in India involves local products (EPF, NPS, SIPs, FDs) and a long horizon, and most people have no simple way to check whether they are saving enough. The README says the project set out to make retirement planning more accessible.

## How it works

The front end is a single-page React app built with Vite. The page has a hero section, a Basic/Advanced mode explainer, a feature list and a calculator. The chat is a Botpress Webchat widget loaded from CDN scripts in `index.html` and opened from a floating bubble. The chat flows themselves live in Botpress, not in this repo. The chat panel in the hero section is a static mock-up.

*[Image: Landing page hero with the static chat mock-up and the Basic and Advanced mode cards]*

*[Image: Landing page with the Botpress chat widget open and empty]*

The calculator is plain JavaScript in `src/utils/retirementCalculator.js`. It grows today's expenses by inflation to retirement, finds the corpus needed to fund retirement using a real rate of return, compares that with the projected value of existing savings and monthly SIPs, and solves for the monthly SIP needed to close the gap.

*[Image: Retirement calculator with default inputs showing a corpus shortfall and the monthly investment needed]*

`server.js` is a separate Express app. It has one endpoint, `POST /api/reminders/subscribe`, which stores a name and email in memory. A node-cron job runs daily at 09:00 and sends a reminder email through SMTP only when the date is the 1st.

```text filename="project.config"
frontend: React 19, Vite 7
chat: Botpress Webchat (chat flows live in Botpress, not in the repo)
calculator: src/utils/retirementCalculator.js
reminders: node-cron, daily at 09:00, sends on the 1st of the month
```

## Where it could break

[TODO: no risks written for this project yet]

## Key features

- Retirement calculator with inputs for ages, expenses, inflation, pre- and post-retirement returns, existing corpus and current SIP
- Results shown in rupees with Indian digit grouping, plus crore values
- Embedded Botpress chat agent, opened from a floating bubble
- Basic and Advanced mode descriptions on the landing page
- Monthly reminder emails via a Node server

## Highlights

- Implemented the retirement maths in `retirementCalculator.js`: inflation adjustment, future value of a lump sum and of a monthly SIP, and a closed-form required-SIP calculation.
- Built a retirement calculator UI in React that recomputes results on every input change and flags a shortfall or surplus.
- Integrated a Botpress Webchat agent into a React/Vite site through CDN embed scripts.
- Wrote an Express and node-cron service that emails subscribers on the 1st of each month through Nodemailer.
- Designed a dark glass-style interface with Tailwind CSS custom colours and Framer Motion entrance animations.

## Tech stack

- **Language:** JavaScript (ES modules), JSX
- **Frontend framework:** React 19, Vite 7
- **Styling and animation:** Tailwind CSS 3, PostCSS, Framer Motion
- **Backend:** Node.js, Express 4, node-cron, Nodemailer, dotenv, cors
- **AI chat:** Botpress Webchat v3.3 (hosted, loaded from CDN)
- **Tooling:** ESLint 9, npm
