
A self-hosted personal finance dashboard with AI-powered insights, real-time bank sync, and on-demand PDF reports.
powerhour is a self-hosted personal finance dashboard that connects to your bank accounts via Plaid and layers AI on top of your real transaction data. It aggregates spending, balances, and recurring expenses across every linked institution into a single dashboard — then gives you two conversational AI agents that can answer questions about your money, generate PDF reports, plan travel budgets, and help you cut spending.
Existing finance apps are either too simple (no AI, no reports) or too locked down (no self-hosting, no data ownership). I wanted something that combined real-time bank data with conversational AI and full control over my own financial data.
A full-stack Next.js application with Plaid for bank sync, PostgreSQL for storage, and two Gemini-powered AI agents — one embedded in the dashboard for quick queries, and a dedicated Budget Planner with web search grounding for travel and savings planning.
A production-grade, Docker-deployable finance platform with 24 AI agent tools, on-demand PDF reports, subscription auditing, smart budget goals, and a security model built around encrypted tokens and database-layer isolation.
A ReAct-style conversational agent embedded directly in the dashboard. Ticker has access to 15 tools that query spending summaries, account balances, transaction history, recurring expenses, cash flow forecasts, anomaly detection, debt payoff timelines, and more. It streams responses via SSE with an 8-step iteration cap and 30-second timeout.
A separate AI agent with a 16-step cap, 120-second timeout, and Google Search grounding for real-world cost research. Detects user intent to route between three modes: travel budgets with low/mid/high estimates, savings goals that calculate feasibility against recurring expenses, and spending analysis that suggests category-level budget caps.
Bank accounts connect through Plaid Link, with access tokens encrypted at rest using AES-256-GCM. A cursor-based sync pulls transactions and balance snapshots daily via an in-process cron scheduler. Plaid webhooks are verified with JWK-based JWT signatures and SHA-256 body hashing. Recurring expense detection uses frequency analysis to classify charges as weekly, biweekly, monthly, or annual.
Started with a deep dive into Plaid's API surface, financial data modeling, and the security requirements of handling bank credentials. Defined a four-phase roadmap: security foundation and agent tools, dashboard and data visualization, AI agents and reports, and production hardening with Docker deployment.
Built the security layer before any features: AES-256-GCM encryption for Plaid tokens, database views that structurally exclude sensitive columns from AI agent queries, layered rate limiting across nginx and application middleware, iron-session with encrypted httpOnly cookies, and a pre-commit hook for secret scanning via Husky.
Designed and implemented 24 agent tools using the Vercel AI SDK v6, each backed by parameterized PostgreSQL queries through Drizzle ORM. The Ticker agent uses a ReAct loop with streaming SSE, while the Budget Planner integrates Google Search grounding for real-time cost research. Both agents operate exclusively through security views that cannot access raw tokens or credentials.
Containerized with Docker Compose (app, PostgreSQL, nginx reverse proxy) with Let's Encrypt TLS. Built a demo mode that seeds realistic fake data for showcasing without Plaid credentials. Added automated daily syncs, weekly AI digests, audit logging, and encrypted database backups.
Plaid-powered connection to checking, savings, and credit accounts across multiple institutions. Cursor-based transaction sync with daily automated pulls and webhook-triggered updates.
Nine-section financial reports generated entirely in-memory with PDFKit — including an AI-written narrative summary, spending breakdowns by category and merchant, net worth history, and anomaly highlights.
Automatically flags recurring charges with no activity in 90+ days and calculates potential monthly savings if cancelled. Recurring detection classifies charges by frequency — weekly, biweekly, monthly, or annual.
AI-generated spending caps per category with progress tracking, based on 3-month spending history and month-over-month trends. Savings targets with feasibility checks against recurring expenses.
AES-256-GCM token encryption, database views that structurally exclude sensitive data from AI queries, JWK-verified Plaid webhooks, layered rate limiting, HSTS/CSP headers, and an immutable audit log.
Full Docker Compose stack with the app, PostgreSQL 16, and nginx reverse proxy. Let's Encrypt TLS, automated encrypted backups, and a demo mode that seeds realistic data for showcasing without bank credentials.
Feel free to reach out — I'm always open to discussing new projects and opportunities.