-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3ee88c0
Showing
32 changed files
with
3,427 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
name: CI | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
branches: | ||
- main | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
strategy: | ||
matrix: | ||
node-version: [18.17.x, 20.x, 22.x] | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
|
||
- uses: pnpm/action-setup@v4 | ||
with: | ||
version: 9.12.1 | ||
|
||
- name: Set up Node.js | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: ${{ matrix.node-version }} | ||
cache: "pnpm" | ||
|
||
- name: Install dependencies | ||
run: pnpm install | ||
|
||
- name: Run code check | ||
run: pnpm lint:check | ||
|
||
- name: Run tests | ||
run: pnpm test | ||
|
||
- name: Upload results to Codecov | ||
uses: codecov/codecov-action@v4 | ||
with: | ||
token: ${{ secrets.CODECOV_TOKEN }} | ||
fail_ci_if_error: true | ||
file: packages/app/coverage/coverage-final.json | ||
|
||
- name: Build the application | ||
run: pnpm build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
on: | ||
push: | ||
branches: | ||
- main | ||
|
||
permissions: | ||
contents: write | ||
pull-requests: write | ||
|
||
name: release-please | ||
|
||
jobs: | ||
release: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Release Please | ||
uses: googleapis/release-please-action@v4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
# Build | ||
/dist | ||
/lib | ||
/lib-types | ||
/server | ||
/tmp | ||
**/coverage/ | ||
.turbo | ||
|
||
# Development | ||
node_modules | ||
*.local | ||
|
||
# Cache | ||
.cache | ||
.mf | ||
.rollup.cache | ||
tsconfig.tsbuildinfo | ||
|
||
# Logs | ||
logs | ||
*.log | ||
npm-debug.log* | ||
yarn-debug.log* | ||
yarn-error.log* | ||
pnpm-debug.log* | ||
lerna-debug.log* | ||
|
||
# Editor | ||
.vscode/* | ||
!.vscode/launch.json | ||
!.vscode/*.code-snippets | ||
|
||
.idea | ||
.DS_Store | ||
*.suo | ||
*.ntvs* | ||
*.njsproj | ||
*.sln | ||
*.sw? | ||
|
||
# Husky | ||
**/_/ | ||
|
||
# Local Netlify folder | ||
.netlify |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
INPUT_FILE=$1 | ||
START_LINE=`head -n1 $INPUT_FILE` | ||
# Define a regex for conventional commit messages with scope | ||
CONVENTIONAL_COMMIT_REGEX="^(feat|fix|docs|style|refactor|perf|test|chore|build|ci|revert)(\([a-zA-Z0-9]+\))?: .+" | ||
|
||
|
||
# Check if the commit message matches the regex | ||
if ! [[ "${START_LINE}" =~ ${CONVENTIONAL_COMMIT_REGEX} ]]; then | ||
echo "Commit message is not conventional. It should follow the format: <type>(<scope>): <description>" | ||
echo "Your message:" | ||
echo "--------------" | ||
echo $START_LINE | ||
echo "--------------" | ||
exit 1 | ||
fi | ||
|
||
echo "Commit message is valid." | ||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Check for changed files and filter out certain suffixes | ||
if git diff --cached --name-only | grep -E '\.(ts|tsx|json|html)$' | grep -q .; then | ||
echo "Running checks..." | ||
pnpm lint:check | ||
pnpm test | ||
else | ||
echo "No relevant changes, skipping checks." | ||
fi | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"packages/app": "0.1.1" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
<br> | ||
<p align="center"> | ||
<img alt="Don Logo" width="300" src="https://raw.githubusercontent.com/lindenquan/don/main/.github/assets/logo.png" /> | ||
</p> | ||
<br> | ||
<p align="center"> | ||
<a href="https://github.com/lindenquan/don/actions/workflows/ci.yaml"> | ||
<img src="https://img.shields.io/github/actions/workflow/status/lindenquan/don/ci.yaml?branch=main&logo=github&style=for-the-badge" alt="Don CI"> | ||
</a> | ||
<a href="https://don.doctornova.net/" target="_blank"> | ||
<img src="https://img.shields.io/badge/Cloudflare_Pages-0690FA?labelColor=grey&logo=Cloudflare&style=for-the-badge" alt="Cloudflare Pages"> | ||
</a> | ||
<a href="https://app.codecov.io/github/lindenquan/don"> | ||
<img src="https://img.shields.io/codecov/c/github/lindenquan/don/master.svg?style=for-the-badge" alt="Codecov"> | ||
</a> | ||
<a href=""><img src="https://img.shields.io/badge/License-ISC-blue.svg?style=for-the-badge" alt="License" /></a> | ||
</p> | ||
<br> | ||
<br> | ||
|
||
<h1 align="center">Personal Financial Management App</h1> | ||
|
||
## Table of Contents | ||
|
||
- [Tech stack](#tech-stack) | ||
- [Project Structure](#project-structure) | ||
- [Development](#development) | ||
- [Production](#production) | ||
- [Roadmap](#roadmap) | ||
|
||
## Tech stack | ||
|
||
[pNpm](https://pnpm.io/): Fast, disk space efficient package manager | ||
|
||
[Release Please](https://github.com/googleapis/release-please): Release Please automates CHANGELOG generation, the creation of GitHub releases, and version bumps for your projects. | ||
|
||
[Husky](https://github.com/typicode/husky): Auto run `lint`, `unit tests`, `build` before commit. | ||
|
||
[SolidJS](https://www.solidjs.com/): Simple and performant reactivity for building user interfaces. | ||
|
||
[Vite](https://vitejs.dev/): Frontend Tooling. It uses Rollup and esbuild internally for bundling | ||
|
||
[Vitest](https://vitest.dev/): Testing Framework. | ||
|
||
## Project Structure | ||
|
||
This project is using Qwik with [QwikCity](https://qwik.dev/qwikcity/overview/). QwikCity is just an extra set of tools on top of Qwik to make it easier to build a full site, including directory-based routing, layouts, and more. | ||
|
||
Inside your project, you'll see the following directory structure: | ||
|
||
``` | ||
├── public/ | ||
│ └── ... | ||
└── src/ | ||
├── components/ | ||
│ └── ... | ||
└── routes/ | ||
└── ... | ||
``` | ||
|
||
- `src/routes`: Provides the directory-based routing, which can include a hierarchy of `layout.tsx` layout files, and an `index.tsx` file as the page. Additionally, `index.ts` files are endpoints. Please see the [routing docs](https://qwik.dev/qwikcity/routing/overview/) for more info. | ||
|
||
- `src/components`: Recommended directory for components. | ||
|
||
- `public`: Any static assets, like images, can be placed in the public directory. Please see the [Vite public directory](https://vitejs.dev/guide/assets.html#the-public-directory) for more info. | ||
|
||
## Development | ||
|
||
Development mode uses [Vite's development server](https://vitejs.dev/). The `dev` command will server-side render (SSR) the output during development. | ||
|
||
```shell | ||
pnpm start | ||
``` | ||
|
||
> Note: during dev mode, Vite may request a significant number of `.js` files. This does not represent a Qwik production build. | ||
## Production | ||
|
||
The production build will generate client and server modules by running both client and server build commands. The build command will use Typescript to run a type check on the source code. | ||
|
||
```shell | ||
pnpm build | ||
``` | ||
|
||
## Roadmap | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Account Aggregation | ||
|
||
- Link multiple bank accounts, credit cards, loans, and investment accounts. | ||
- Real-time synchronization of balances and transactions. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Expense Tracking | ||
|
||
- Automatically categorize transactions (e.g., groceries, entertainment, utilities) by taking pictures of receipts. | ||
- Manual entry of expenses and transactions. | ||
- Support for splitting transactions (e.g., shared bills). | ||
- Tagging expenses for more personalized tracking (e.g., vacations, business). | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Income Tracking | ||
|
||
- Record and categorize income (salary, freelance, dividends, etc.). | ||
- Monitor recurring income streams and one-time payments. | ||
- Integration with payroll systems and tax tracking for income insights. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Bill Management | ||
|
||
- Add and track recurring bills (rent, utilities, subscriptions, etc.). | ||
- Bill reminders and notifications (upcoming due dates). | ||
- Ability to set up autopay or mark bills as paid. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Investment Tracking | ||
|
||
- Link investment accounts and track portfolio performance. | ||
- Track asset allocations (stocks, bonds, mutual funds, etc.). | ||
- Monitor net worth based on assets and liabilities. | ||
- Portfolio diversification and investment insights. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Debt Management | ||
|
||
- Track loans (student loans, mortgages, credit card debt). | ||
- Payment reminders and automated debt payoff plans (e.g., debt snowball, debt avalanche). | ||
- Interest calculation and amortization schedules. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Financial Insights & Reports | ||
|
||
- Visualize monthly cash flow (income vs. expenses). | ||
- Detect trends in cash flow patterns (e.g., surpluses, deficits). | ||
- Forecast future cash flow based on current spending patterns. | ||
- Generate monthly, quarterly, and annual financial reports. | ||
- Provide insights into spending patterns, income trends, and savings performance. | ||
- Track overall net worth based on assets (bank balances, properties) and liabilities (debts, loans). | ||
- Historical data visualization to track net worth growth or decline. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Credit Score Monitoring | ||
|
||
- Link with credit score agencies to monitor and report credit scores. | ||
- Provide insights on how to improve the credit score. | ||
- Offer alerts for changes in credit reports. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Alerts & Notifications | ||
|
||
- Customizable alerts for various financial events (e.g., low balance, overspending, bill due). | ||
- Notifications for account changes, suspicious activity, or significant financial milestones. | ||
- Weekly or monthly summaries of financial activities. | ||
|
||
- 🚧 <span style="color:blue">**TODO**</span> Security Features | ||
- Bank-level encryption to protect sensitive data. | ||
- Biometric login (fingerprint, face ID). | ||
- Automatic logout after a period of inactivity. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
{ | ||
"$schema": "https://biomejs.dev/schemas/1.9.3/schema.json", | ||
"files": { | ||
"ignoreUnknown": true, | ||
"ignore": [ | ||
"**/dist/**", | ||
"**/coverage/**", | ||
"node_modules/", | ||
".husky/", | ||
".github/", | ||
".turbo/" | ||
] | ||
}, | ||
"formatter": { | ||
"enabled": true, | ||
"indentStyle": "space", | ||
"indentWidth": 2 | ||
}, | ||
"organizeImports": { | ||
"enabled": true | ||
}, | ||
"linter": { | ||
"enabled": true, | ||
"rules": { | ||
"recommended": true, | ||
"suspicious": { | ||
"noExplicitAny": "off" | ||
}, | ||
"a11y": { | ||
"useButtonType": "off" | ||
}, | ||
"style": { | ||
"noNonNullAssertion": "off" | ||
} | ||
} | ||
}, | ||
"json": { | ||
"formatter": { | ||
"lineWidth": 1 | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
{ | ||
"name": "@linden_quan/don", | ||
"description": "personal financial management app", | ||
"author": "Linden Quan", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/lindenquan/don" | ||
}, | ||
"engines": { | ||
"node": ">=18.17.0" | ||
}, | ||
"packageManager": "pnpm@9.12.1", | ||
"keywords": [ | ||
"financial management" | ||
], | ||
"license": "ISC", | ||
"private": false, | ||
"scripts": { | ||
"preinstall": "npx only-allow pnpm", | ||
"postinstall": "pnpm husky", | ||
"lint:check": "pnpm biome check --verbose", | ||
"lint:fix": "pnpm biome check --write", | ||
"build": "pnpm turbo build", | ||
"test": "pnpm turbo test", | ||
"prepublish": "pnpm build", | ||
"publish-packages": "./scripts/publish.sh" | ||
}, | ||
"devDependencies": { | ||
"@biomejs/biome": "1.9.3", | ||
"husky": "^9.1.6", | ||
"turbo": "^2.1.3", | ||
"typescript": "^5.6.3", | ||
"vite": "^5.4.8", | ||
"vitest": "^2.1.2" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
node_modules | ||
dist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Ignore source files | ||
src/ | ||
|
||
# Ignore test files | ||
tests/ | ||
__tests__/ | ||
|
||
# Ignore configuration files | ||
*.config.js | ||
.env |
Oops, something went wrong.