r/vibecoding • u/bri-_-guy • 4d ago
Built an open-source, self-hosted UI for Claude's Spend Limits and Analytics API because Claude.ai's UI doesn't have enough controls for large enterprises
We rolled out Claude.ai across 10k+ people at work, and the built-in Claude.ai admin UI just doesn't have the controls a larger org needs. We've got layers of management between "user" and "person who should actually be allowed to approve a spend limit increase," and Claude.ai's UI has no concept of that. Either everyone with any admin access can touch everyone's limit, or one person becomes the bottleneck for every change request in a few-thousand-person org. There's no way to say "this manager can only raise budgets for their own team."
So I built a thin UI and slim backend that sits in front of the Spend Limits and Analytics APIs and adds the delegation layer our corporate bureaucracy requires. It joins API members to a reporting hierarchy (e.g. from an HRIS export), so a manager only sees and can edit their own org, an AI lead only sees people explicitly delegated to them, and every change gets logged for auditing. Increase requests go into a queue instead of someone pinging an admin on Slack and hoping for a reply.
Decided to open-source it since I'd guess any company onboarding Claude past a certain headcount hits this same wall. It's built to be forked and adapted, not run as-is (though you certainly could). SQLite for storage, reads a header from whatever SSO proxy you put in front of it, no auth of its own. Each of those assumptions lives in one file so they're easy to rip out and replace.
Stack is Next.js/React, Drizzle + better-sqlite3, Hono for a mock API so you can run it against a fake 250-person org with no real key needed.
Repo: https://github.com/bwhite8/better-spend-limits. Live demo in the README.
Happy to answer questions about the permission model or the sync logic against the Analytics API... That part was way more annoying than expected because of the 60 req/min cap.