Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
home budget tracker
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Production-grade web application for managing shared household expenses.
# Install dependencies
npm install
# Create .env.local
cp .env.example .env.local
# Configure your environment variables
# - DATABASE_URL: PostgreSQL connection string
# - NEXT_PUBLIC_SUPABASE_URL: Your Supabase URL
# - NEXT_PUBLIC_SUPABASE_ANON_KEY: Your Supabase anon key
# - SUPABASE_SERVICE_ROLE_KEY: Your Supabase service role key
# Generate initial migration from schema
npm run db:generate
# Apply migrations
npm run db:migrate
# Optional: Open Drizzle Studio to inspect the database
npm run db:studio
# Start development server
npm run dev
Open http://localhost:3000 to see the application.
src/
├── app/ # Next.js pages and layouts
│ ├── (auth)/ # Authentication routes
│ ├── (dashboard)/ # Protected routes
│ └── page.tsx # Home page
├── components/ # Reusable UI components
│ ├── forms/ # Form components
│ ├── layout/ # Layout components
│ └── ui/ # Basic UI components
├── modules/ # Business logic (services)
│ ├── households/ # Household management
│ ├── expenses/ # Expense and balance logic
│ └── ...
├── actions/ # Server Actions (mutations)
│ ├── households/ # Household actions
│ └── expenses/ # Expense actions
├── db/ # Database layer
│ ├── schema/ # Drizzle ORM schema
│ ├── queries/ # Database queries
│ └── migrations/ # Generated migrations
├── lib/ # Utilities and helpers
│ ├── db.ts # Database client
│ ├── supabase/ # Supabase client
│ └── utils/ # Helper functions
└── types/ # TypeScript types
The application strictly follows the HBT Data Model (HBT-MDD.md):
Core Tables:
users: Application usershouseholds: Shared expense groupshousehold_members: User-household relationshipsexpenses: Financial eventsexpense_payers: Who paidexpense_splits: Who owesKey Principle:
balance = total_paid - total_owed
For every expense: SUM(payers) = SUM(splits)
const householdId = await createHousehold("My House", userId);
const expenseId = await createExpense(
householdId,
userId,
"Groceries",
"50.00",
"2024-01-15",
[payerMemberId],
[member1Id, member2Id], // participants
);
const transferId = await createTransfer(
householdId,
userId,
fromMemberId,
toMemberId,
"20.00",
"2024-01-16",
"Reimbursement for coffee"
);
const balance = await calculateHouseholdBalance(householdId);
// Returns: { memberBalances: [...], totalExpenses: "..." }
any typesdeleted_at fieldnpm run dev
# Navigate to http://localhost:3000/auth/login to test auth flow
npm run build
npm run start
Deploy to Vercel:
vercel deploy
Environment variables must be configured in Vercel dashboard.
MIT