Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
TaxSnap helps self-employed contractors, owner-operators, and freelancers snap photos of receipts, auto-categorize tax write-offs with AI, and export clean data for tax season.
翻訳待ち
金融TypeScript · PLpgSQLGitHub @zizu10101接続状況の再確認が必要です所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
A mobile-first PWA that helps self-employed trade contractors (painters,
handymen, barbers, etc.) snap photos of receipts, auto-categorize tax
write-offs with Gemini, and export clean data for tax season.
Stack: Next.js (App Router) · TypeScript · Tailwind CSS · shadcn/ui ·
Supabase (Postgres + Auth + Storage) · Google Gemini 3.6 Flash · Stripe.Read the full README ↗A mobile-first PWA that helps self-employed trade contractors (painters, handymen, barbers, etc.) snap photos of receipts, auto-categorize tax write-offs with Gemini, and export clean data for tax season.
Stack: Next.js (App Router) · TypeScript · Tailwind CSS · shadcn/ui · Supabase (Postgres + Auth + Storage) · Google Gemini 3.6 Flash · Stripe.
npm install
supabase/migrations/0001_init.sql. This creates
the profiles, receipts, and invoices tables with row-level security,
a trigger that auto-creates a profile on signup, and a private receipts
storage bucket for uploaded photos.Create a key at Google AI Studio.
/api/stripe/webhook listening for
checkout.session.completed, customer.subscription.created,
customer.subscription.updated, and customer.subscription.deleted.
For local development, use the Stripe CLI:
stripe listen --forward-to localhost:3000/api/stripe/webhook
Copy .env.local.example to .env.local and fill in the values from steps
2-4:
cp .env.local.example .env.local
npm run dev
Open http://localhost:3000. The app is installable as a PWA (Add to Home Screen) once served over HTTPS or from localhost.
src/app - routes (App Router): /, /auth, /dashboard, /billing,
/invoices, and API routes under src/app/api.src/components - UI components; src/components/ui holds shadcn
primitives.src/lib - Supabase clients, Gemini receipt parsing, Stripe client, CSV
export, and shared types.supabase/migrations - SQL schema and RLS policies.public/manifest.json, public/sw.js - PWA manifest and service worker.UploadReceipt (src/components/dashboard/upload-receipt.tsx)
uploads a photo to /api/parse-receipt, which stores the image in Supabase
Storage and calls Gemini with a strict JSON schema to extract merchant,
date, totals, tax, and category. The result is shown in a preview modal for
the user to edit; "Approve & Save" posts to /api/receipts, which inserts
the row into the receipts table./billing calls /api/stripe/checkout to start a Checkout
Session for the Basic or Pro price. The webhook updates
profiles.subscription_status, which gates the /invoices page (Pro only).