SmartSplit logo

SmartSplit

A clean, secure way to split groups, vote and manage shared decisions...

Loading personalized workspace…

SmartSplitSplit bills. Settle fast. Keep friendships intact.

SmartSplit combines a crisp UX with server-authoritative validation — so shared expenses are transparent, settlements are safe, and reminders actually get results.

Net balances, simplified
Clear balances • Smart suggestions

Why SmartSplit

Expense Engine
Create expenses with Equal / Percentage / Exact splits. Rounding diffs automatically allocate to the payer to ensure totals always match.
Visual Dashboard
Monthly trends and per-user balances are presented with clear visuals so you can quickly understand flows and spot anomalies.
Reminders
Send manual reminders with optional notes, or rely on scheduled weekly reminders to nudge outstanding payers automatically.
Server-authoritative
All critical checks and final balance mutations run on the server (Convex) — preventing reversed payments, overpayments and race conditions.
Group-first UX
Built for groups with member lists, roles, and simple invite flows — onboarding is fast and intuitive.
Friendly Design
Subtle animations, clear copy and pragmatic defaults keep interactions calm so money conversations stay friendly.

Tech stack

Frontend
  • Next.js (App Router) — React + SSR + routing.
  • Tailwind CSS — utility-first styling; `gradient-title` utility for headings.
  • shadcn/ui + Radix — accessible primitives (Dialog, Tabs, Avatar, Cards).
  • Framer Motion — micro-interactions and accessible animations.
  • Recharts — charts for monthly / trend visualizations.
Backend & Jobs
  • Convex — functions + realtime DB; authoritative server mutations for expenses & settlements.
  • Inngest — scheduled jobs (weekly reminders, monthly insight generation).
  • Nodemailer — SMTP transport for transactional mail templates (or use a transactional provider in prod).
  • Clerk — authentication (Email OTP, OAuth providers).
Utilities & Tools
  • date-fns — date formatting.
  • zod — schema validation for forms and server args.
  • Sonner — toast notifications.
  • lucide-react — icons.
AI & Insights
  • Google Generative / Gemini — monthly narrative insights (category trends, anomalies).
  • Templates are curated and sent as branded HTML—keeps email appearance consistent with the app.

Key functions (what they do)

Expense APIs
  • api.expenses.createExpense — Create a new expense, compute splits (equal/percentage/exact) and persist it.
  • api.expenses.deleteExpense — Delete an expense; authorized only for creator or payer.
  • api.expenses.getExpensesBetweenUsers — Fetch 1:1 expense history and related settlements.
Settlement & Group APIs
  • api.settlements.createSettlement — Record a settlement; server validates direction and clamps to outstanding exposure.
  • api.groups.getGroupExpenses — Get a group's expenses, members, balances and settlements for the group page.
  • api.groups.deleteGroup — Delete a group (server-side removes related records; guarded by authorization checks).
Notifications & Jobs
  • api.emails.sendEmail — Transactional email sender used by jobs & actions.
  • inngest.send-payment-reminders — Scheduled job that composes payment reminder emails weekly.
  • api.inngest.getUsersWithOutstandingDebts — Query used by the job to find users to remind.
User & Dashboard
  • api.users.getCurrentUser — Client-side query for session user metadata.
  • api.dashboard.getUserBalances & api.dashboard.getMonthlySpending — Aggregations powering the dashboard charts.

How it works (simplified)

  1. Create expense — choose split type; client validates and shows suggested splits.
  2. Server stores — Convex saves raw splits and derives per-user balances.
  3. Settle — Insert settlement record; server enforces direction and exposure checks.
  4. Notify — Email pipeline sends transactional messages (settlement confirmations, reminders, insights).

Security & privacy

SmartSplit treats financial flows seriously:

  • Server-side validation for all monetary mutations (Convex mutations are authoritative).
  • Least-privilege for API keys and separate inbox for transactional mail.
  • Do not store sensitive card data — payments are handled via external providers (links to Pay/UIs).
  • GDPR mindful: store only what's necessary and follow your privacy policy.
Get in touch

Questions, feedback or want help running this for your group? I'm available — shoot a message or open the repo.