{"id":49546076,"url":"https://github.com/vkondi/fin-tracker","last_synced_at":"2026-05-02T19:30:33.672Z","repository":{"id":291089127,"uuid":"976546662","full_name":"vkondi/fin-tracker","owner":"vkondi","description":"A modern multi-user investment portfolio tracker with real-time analytics and visual insights for managing family/group finances across diverse platforms","archived":false,"fork":false,"pushed_at":"2026-04-10T07:48:42.000Z","size":841,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-10T09:34:20.463Z","etag":null,"topics":["analytics","dashboard","finance-tracker","fintech","investment-tracking","nextjs","oauth","portfolio-management","postgresql","react","responsive-design","tailwindcss","typescript","vercel","wealth-management"],"latest_commit_sha":null,"homepage":"https://my-fintracker.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vkondi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-02T09:59:02.000Z","updated_at":"2026-04-10T07:45:09.000Z","dependencies_parsed_at":"2025-05-02T11:20:04.803Z","dependency_job_id":"859e562d-5165-4587-a305-ed46d128318b","html_url":"https://github.com/vkondi/fin-tracker","commit_stats":null,"previous_names":["vkondi/fin-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vkondi/fin-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkondi%2Ffin-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkondi%2Ffin-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkondi%2Ffin-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkondi%2Ffin-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vkondi","download_url":"https://codeload.github.com/vkondi/fin-tracker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkondi%2Ffin-tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32547643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T19:18:06.202Z","status":"ssl_error","status_checked_at":"2026-05-02T19:16:21.335Z","response_time":132,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","dashboard","finance-tracker","fintech","investment-tracking","nextjs","oauth","portfolio-management","postgresql","react","responsive-design","tailwindcss","typescript","vercel","wealth-management"],"created_at":"2026-05-02T19:30:33.034Z","updated_at":"2026-05-02T19:30:33.650Z","avatar_url":"https://github.com/vkondi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FINTRAKR\n\n[![CI](https://github.com/vkondi/fin-tracker/workflows/CI/badge.svg)](https://github.com/vkondi/fin-tracker/actions?query=workflow%3ACI)\n[![Coverage](https://img.shields.io/badge/coverage-85.13%25-brightgreen)](https://github.com/vkondi/fin-tracker/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Vercel](https://img.shields.io/badge/deploy-vercel-000000?logo=vercel)](https://vercel.com/vishwajeet-kondi/fintrakr)\n\nFINTRAKR is a modern, multi-user financial portfolio tracker built with Next.js. It helps families and groups track, analyze, and manage investments across platforms with real-time analytics, secure authentication, and a user-friendly dashboard.\n\n## Table of Contents\n\n- [Getting Started](#getting-started)\n- [Features](#features)\n- [Environment Variables](#environment-variables)\n- [Scripts](#scripts)\n- [Technologies Used](#technologies-used)\n- [Deployment](#deployment)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Getting Started\n\n1. **Clone the repository:**\n   ```bash\n   git clone https://github.com/vkondi/fin-tracker.git\n   cd fin-tracker\n   ```\n2. **Install dependencies:**\n   ```bash\n   yarn install\n   ```\n3. **Set up environment variables:**\n   Create a `.env.local` file in the root directory. See [Environment Variables](#environment-variables) for the minimal set required for local development.\n4. **Run the development server:**\n   ```bash\n   yarn dev\n   ```\n   This runs `next dev --turbopack` on port `3000`. On Windows the script attempts to open your default browser automatically; on other platforms open `http://localhost:3000` manually.\n\n5. **Database \u0026 migrations (local development)**\n   The app will attempt to connect to the database specified by `DATABASE_URL` and run migrations automatically on server start (see `src/app/api/migration.ts`). If you use Neon or other hosted Postgres, note the client is configured with `ssl.rejectUnauthorized=false` to support Neon. Ensure `DATABASE_URL` points to a writable Postgres instance before starting the server.\n\n---\n\n## Features\n- Secure user authentication (Google OAuth, next-auth)\n- Responsive dashboard for mobile and desktop\n- Real-time portfolio analytics and charts\n- Member-wise and category-wise investment tracking\n- Add, edit, and delete investments with instant calculations\n- Accessible UI (WCAG, keyboard, screen reader friendly)\n- Toast notifications for user actions\n- Modern, clean design with Tailwind CSS\n\n---\n\n## Environment Variables\nSet these in your `.env.local` (only the ones your setup needs):\n\n- `DATABASE_URL` — Postgres connection string used by the app (required for running migrations).\n- `NEXTAUTH_URL` — e.g., `http://localhost:3000`\n- `NEXTAUTH_SECRET` — secret used by next-auth\n- `NEXTAUTH_DEBUG` — optional; set to `true` for verbose next-auth logs\n- `GOOGLE_ID`, `GOOGLE_SECRET` — for Google OAuth (set OAuth callback/redirect to `http://localhost:3000/api/auth/callback/google`)\n- `CLOUDFLARE_WEB_ANALYTICS_TOKEN` — optional; if present Cloudflare Web Analytics will be enabled in production\n\n\u003e Note: The previous README listed multiple Postgres-related env var names; this repo primarily uses `DATABASE_URL` as the connection string (see `src/app/api/database.ts`).\n\n---\n\n## Scripts\n- `yarn dev` — Run the development server (`next dev --turbopack`) on port `3000`.\n- `yarn build` — Build for production.\n- `yarn start` — Start the production server.\n- `yarn check-types` — Run TypeScript type checking (`tsc --noEmit`).\n- `yarn lint` — Run ESLint for code quality (includes accessibility checks).\n- `yarn test` — Run tests in watch mode (Vitest).\n- `yarn test:run` — Run tests once (`vitest run`).\n- `yarn test:coverage` — Run tests with coverage report (`vitest run --coverage`). Coverage output is available in the project's `coverage/` directory.\n\n**Pre-commit hooks:** This repository uses Husky + lint-staged to run `eslint --fix` on staged `.ts`/`.tsx` files before commits.\n\n---\n\n## Technologies Used\n- [Next.js](https://nextjs.org)\n- [next-auth](https://next-auth.js.org)\n- [PostgreSQL](https://www.postgresql.org)\n- [Tailwind CSS](https://tailwindcss.com)\n- React Context API\n- [react-toastify](https://fkhadra.github.io/react-toastify)\n- [Recharts](https://recharts.org)\n- [clsx](https://github.com/lukeed/clsx)\n- [react-icons](https://react-icons.github.io/react-icons/)\n- [react-responsive](https://github.com/yocontra/react-responsive)\n- [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) (for accessibility)\n\n---\n\n## Project structure\nA quick map to important folders:\n\n- `src/app` — Next.js app routes and pages\n- `src/components` — React UI components and tests\n- `src/context` — React context providers (e.g., `FinContext`, `RootContext`)\n- `src/lib` — reusable libs (e.g., `authOptions`)\n- `src/app/api` — server API routes (database, auth, migrations)\n- `src/utils` — constants and utility functions\n- `coverage/` — test coverage report (generated by `yarn test:coverage`)\n\n---\n\n## Deployment\nDeploy easily on [Vercel](https://vercel.com):\n1. Push your code to GitHub.\n2. Connect your repo to Vercel.\n3. Set environment variables in the Vercel dashboard.\n4. Deploy!\n\n**Continuous Integration (GitHub Actions)**  \n- **Trigger:** Pull requests to `main`/`master` (`.github/workflows/ci.yml`)  \n- **Runs:** TypeScript checks, ESLint, unit tests with coverage (Vitest), uploads coverage to Codecov, and `yarn build`  \n- **Purpose:** Validate PRs before merge; configure Vercel to auto-deploy from `main` or add a deployment job to the workflow to run GitHub-native deployments.  \n- **Notes:** Codecov uploads for public repositories typically work without an upload token; add `CODECOV_TOKEN` as a secret only if your setup requires it.\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for detailed contribution guidelines.\n\nThe `docs/` directory contains additional documentation:\n- [Test Cases Guidelines](docs/TEST-CASES-GUIDELINES.md)\n\n---\n\n## Troubleshooting\n- **DB connection errors:** verify `DATABASE_URL` is reachable and has correct credentials; for Neon/Postgres ensure SSL options are compatible.\n- **OAuth issues:** verify your Google OAuth credentials and set the redirect URI to `http://localhost:3000/api/auth/callback/google`.\n- **Port conflicts:** change `PORT` or stop the process using port 3000.\n\n---\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvkondi%2Ffin-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvkondi%2Ffin-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvkondi%2Ffin-tracker/lists"}