powerhour
Open source · MIT License

Self-hosted finance intelligence, built for clarity.

Powerhour connects to your banks via Plaid, syncs transactions daily, and gives you two AI agents — Ticker for Q&A and a Budget Planner for goal-setting. All on your own infrastructure.

24

AI tools across two agents

9

PDF report sections

16

Database tables

Built with
Next.js 14App Router + TypeScript
PostgreSQLvia Drizzle ORM
PlaidBank-grade data sync
Gemini 2.5 FlashAI agent backbone
AI SDK v6Streaming + tool calls
Features

Two AI agents. One self-hosted stack. Full financial visibility.

Account aggregation, historical analytics, AI planning workflows, and audit-friendly security controls in a single codebase you own.

Unified dashboard

Track net worth, balances, category spending, credit utilization, and recurring costs in one daily-updated view.

Ticker AI chat

Ask direct questions about spending behavior, account balances, transaction history, and anomalies using real synced data.

Budget Planner

Generate travel budgets, savings plans, and spend-reduction strategies with mode-specific agent workflows.

In-memory PDF reports

Produce detailed financial reports with charts and AI summaries without writing files to disk on the server.

Subscription audit

Identify recurring charges with no activity in 90+ days and estimate monthly savings at risk.

Smart budget goals

Create category caps from recent spending trends and track progress from the dashboard.

Security

Security built into
the data layer,
not bolted on.

Encrypted secrets, constrained agent data access, verified webhooks, and event auditing at the infrastructure level.

Read security model
  • AES-256-GCM token encryption

    Plaid access tokens are encrypted at rest using AES-256-GCM. Keys never leave the server environment.

  • Database-layer agent boundaries

    Agent tool access is constrained through database views that exclude sensitive columns from AI context.

  • Layered rate limiting

    Independent rate limits on login, chat, reports, and global API traffic prevent abuse at each surface.

  • Webhook signature verification

    Plaid webhooks are verified with JWT signature and body-hash checks before any processing occurs.

  • Audit log for security events

    Critical account and security events (login, token exchange, deletions) are recorded with IP and timestamp.

Open source

MIT licensed.
No SaaS dependency.
No black box.

  • MIT licensed — fork, self-host, or adapt without restriction.
  • No SaaS dependency. All data stays on your own infrastructure.
  • Full source available: schema, agents, tools, and sync pipeline.
  • Environment-first configuration. No vendor lock-in.
View on GitHub
git clone https://github.com/your-username/powerhour
cp .env.example .env

# Configure your credentials:
# DATABASE_URL=postgres://...
# PLAID_CLIENT_ID=...
# PLAID_SECRET=...
# SESSION_SECRET=...

npm run db:migrate
npm run dev
Self-hosting

Self-host in four steps

1

Clone and configure

Clone the repository, copy .env.example to .env, and fill in your Plaid credentials, database URL, and session secret.

2

Run database migrations

Powerhour uses Drizzle ORM. Run the migration command to create all 16 tables.

3

Start the application

Start in development mode or build for production. Compatible with any Node.js host.

Your data. Your server. Your rules.

Powerhour is MIT-licensed and self-hosted. Clone the repo, run the migrations, and own your financial data stack.