# yoz-sirait98/final-finance-family architecture

> Architecture diagram of the GitHub repository yoz-sirait98/final-finance-family, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yoz-sirait98/final-finance-family
- Repository: https://github.com/yoz-sirait98/final-finance-family

## Overview

FamFin is a family finance and household-operations PWA. A household member enters through the Vue app and navigates to finance, scheduling, or kitchen workflows; those modules cover money tracking and planning, family tasks and calendars, and meal planning and pantry management. The tree and README establish these product capabilities, while sampled scheduler code confirms local-first task storage and synchronization. Several finance and meal service connections are not shown in the excerpts, so their internal wiring is left unspecified.

Main entry points: [`frontend/src/router/index.js`](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/router/index.js) (Page router), [`frontend/src/services/scheduler/schedulerSyncService.js`](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/scheduler/schedulerSyncService.js) (Scheduler sync), [`frontend/src/services/scheduler/googleCalendarService.js`](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/scheduler/googleCalendarService.js) (Google Calendar sync), [`frontend/src/main.js`](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/main.js) (Vue application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App Shell"]
  node_app["Vue application<br/>[main.js]"]
  node_router["Page router<br/>[index.js]"]
end

subgraph group_finance["Family Finance"]
  node_dashboard["Family dashboard<br/>[DashboardPage.vue]"]
  node_transactions["Transactions and OCR"]
  node_accounts["Accounts<br/>[AccountsPage.vue]"]
  node_budgets["Budgets<br/>[BudgetsPage.vue]"]
  node_goals["Goals and pockets<br/>[GoalsPage.vue]"]
  node_recurring["Recurring payments<br/>[RecurringPage.vue]"]
  node_reports["Reports<br/>[ReportsPage.vue]"]
  node_financial_ai["Financial advisor<br/>[AiPage.vue]"]
end

subgraph group_schedule["Family Scheduler"]
  node_scheduler["Calendar and chores<br/>[SchedulerPage.vue]"]
  node_scheduler_tasks["Task repository<br/>[taskRepository.js]"]
  node_scheduler_db[("Local scheduler database")]
  node_scheduler_sync["Scheduler sync"]
  node_google_calendar["Google Calendar sync"]
end

subgraph group_kitchen["Meals and Pantry"]
  node_meals["Meal planner<br/>[MealsPage.vue]"]
  node_meal_plans["Meal plans<br/>[mealPlanService.js]"]
  node_pantry["Pantry inventory<br/>[pantryService.js]"]
  node_recipes["Recipe box and Chef AI<br/>[recipeService.js]"]
  node_shopping["Shopping plan<br/>[ShoppingPage.vue]"]
end

subgraph group_platform["Shared Services"]
  node_auth["Authentication<br/>[authService.js]"]
end

node_household(("Household member"))
node_supabase[("Supabase")]
node_gemini["Google Gemini"]
node_google["Google Calendar API"]

node_household -->|"uses"| node_app
node_app -->|"mounts"| node_router
node_router -->|"dispatches"| node_dashboard
node_router -->|"dispatches"| node_transactions
node_router -->|"dispatches"| node_accounts
node_router -->|"dispatches"| node_budgets
node_router -->|"dispatches"| node_goals
node_router -->|"dispatches"| node_recurring
node_router -->|"dispatches"| node_reports
node_router -->|"dispatches"| node_financial_ai
node_router -->|"dispatches"| node_scheduler
node_router -->|"dispatches"| node_meals
node_router -->|"dispatches"| node_shopping
node_scheduler_tasks -->|"reads and writes"| node_scheduler_db
node_scheduler_sync -->|"syncs local data"| node_scheduler_db
node_scheduler_sync -->|"pushes and pulls"| node_supabase
node_google_calendar -->|"creates and updates"| node_scheduler_tasks
node_google_calendar -.->|"syncs events"| node_google
node_auth -->|"authenticates"| node_supabase
node_recipes -.->|"generates recipes"| node_gemini

click node_app "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/main.js"
click node_router "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/router/index.js"
click node_dashboard "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/DashboardPage.vue"
click node_transactions "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/TransactionsPage.vue"
click node_accounts "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/AccountsPage.vue"
click node_budgets "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/BudgetsPage.vue"
click node_goals "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/GoalsPage.vue"
click node_recurring "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/RecurringPage.vue"
click node_reports "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/ReportsPage.vue"
click node_financial_ai "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/AiPage.vue"
click node_scheduler "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/SchedulerPage.vue"
click node_scheduler_tasks "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/db/taskRepository.js"
click node_scheduler_db "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/db/schedulerDatabase.js"
click node_scheduler_sync "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/scheduler/schedulerSyncService.js"
click node_google_calendar "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/scheduler/googleCalendarService.js"
click node_meals "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/MealsPage.vue"
click node_meal_plans "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/mealPlanService.js"
click node_pantry "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/pantryService.js"
click node_recipes "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/recipeService.js"
click node_shopping "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/ShoppingPage.vue"
click node_auth "https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/authService.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_router toneBlue
class node_dashboard,node_transactions,node_accounts,node_budgets,node_goals,node_recurring,node_reports,node_financial_ai,node_supabase toneAmber
class node_scheduler,node_scheduler_tasks,node_scheduler_db,node_scheduler_sync,node_google_calendar,node_google toneMint
class node_meals,node_meal_plans,node_pantry,node_recipes,node_shopping toneRose
class node_auth,node_household,node_gemini toneIndigo
```

## Components

### App Shell

- [Vue application](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/main.js): `frontend/src/main.js`
- [Page router](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/router/index.js): `frontend/src/router/index.js`

### Family Finance

- [Family dashboard](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/DashboardPage.vue): `frontend/src/pages/DashboardPage.vue`
- [Transactions and OCR](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/TransactionsPage.vue): `frontend/src/pages/TransactionsPage.vue`
- [Accounts](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/AccountsPage.vue): `frontend/src/pages/AccountsPage.vue`
- [Budgets](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/BudgetsPage.vue): `frontend/src/pages/BudgetsPage.vue`
- [Goals and pockets](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/GoalsPage.vue): `frontend/src/pages/GoalsPage.vue`
- [Recurring payments](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/RecurringPage.vue): `frontend/src/pages/RecurringPage.vue`
- [Reports](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/ReportsPage.vue): `frontend/src/pages/ReportsPage.vue`
- [Financial advisor](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/AiPage.vue): `frontend/src/pages/AiPage.vue`

### Family Scheduler

- [Calendar and chores](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/SchedulerPage.vue): `frontend/src/pages/SchedulerPage.vue`
- [Task repository](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/db/taskRepository.js): `frontend/src/db/taskRepository.js`
- [Local scheduler database](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/db/schedulerDatabase.js): `frontend/src/db/schedulerDatabase.js`
- [Scheduler sync](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/scheduler/schedulerSyncService.js): `frontend/src/services/scheduler/schedulerSyncService.js`
- [Google Calendar sync](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/scheduler/googleCalendarService.js): `frontend/src/services/scheduler/googleCalendarService.js`

### Meals and Pantry

- [Meal planner](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/MealsPage.vue): `frontend/src/pages/MealsPage.vue`
- [Meal plans](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/mealPlanService.js): `frontend/src/services/mealPlanService.js`
- [Pantry inventory](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/pantryService.js): `frontend/src/services/pantryService.js`
- [Recipe box and Chef AI](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/recipeService.js): `frontend/src/services/recipeService.js`
- [Shopping plan](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/pages/ShoppingPage.vue): `frontend/src/pages/ShoppingPage.vue`

### Shared Services

- [Authentication](https://github.com/yoz-sirait98/final-finance-family/blob/main/frontend/src/services/authService.js): `frontend/src/services/authService.js`

### Other components

- **Household member**
- **Supabase**
- **Google Gemini**
- **Google Calendar API**

## Connections

- Household member → Vue application: uses
- Vue application → Page router: mounts
- Page router → Family dashboard: dispatches
- Page router → Transactions and OCR: dispatches
- Page router → Accounts: dispatches
- Page router → Budgets: dispatches
- Page router → Goals and pockets: dispatches
- Page router → Recurring payments: dispatches
- Page router → Reports: dispatches
- Page router → Financial advisor: dispatches
- Page router → Calendar and chores: dispatches
- Page router → Meal planner: dispatches
- Page router → Shopping plan: dispatches
- Task repository → Local scheduler database: reads and writes
- Scheduler sync → Local scheduler database: syncs local data
- Scheduler sync → Supabase: pushes and pulls
- Google Calendar sync → Task repository: creates and updates
- Google Calendar sync → Google Calendar API: syncs events
- Authentication → Supabase: authenticates
- Recipe box and Chef AI → Google Gemini: generates recipes
