Skip to content

Commit

Permalink
init: Let's GO ! 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
lindenquan committed Oct 13, 2024
0 parents commit 3ee88c0
Show file tree
Hide file tree
Showing 32 changed files with 3,427 additions and 0 deletions.
Binary file added .github/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions .github/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 50 additions & 0 deletions .github/workflows/ci.yaml
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
17 changes: 17 additions & 0 deletions .github/workflows/release-please.yml
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
46 changes: 46 additions & 0 deletions .gitignore
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
18 changes: 18 additions & 0 deletions .husky/commit-msg
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
9 changes: 9 additions & 0 deletions .husky/pre-commit
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

3 changes: 3 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"packages/app": "0.1.1"
}
149 changes: 149 additions & 0 deletions README.md
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.
42 changes: 42 additions & 0 deletions biome.json
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
}
}
}
36 changes: 36 additions & 0 deletions package.json
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"
}
}
2 changes: 2 additions & 0 deletions packages/app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
dist
10 changes: 10 additions & 0 deletions packages/app/.npmignore
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
Loading

0 comments on commit 3ee88c0

Please sign in to comment.