How to Build·14 min read

How to Build an Internal Tools Dashboard Without Retool in 2026

Retool costs $50/user/month. For a 50-person team, that is $30,000 a year for drag-and-drop CRUD screens. Here is how to build something better for less.

N

Nate Laquis

Founder & CEO ·

Why Teams Are Leaving Retool (and When They Should)

Retool changed the game when it launched. Drag a table onto a canvas, connect a database, ship an internal tool by lunch. For small teams with simple needs, it still works. But as organizations scale, the math stops making sense.

Retool's Business plan costs $50 per user per month. If you have 50 people across engineering, ops, support, and finance who need access to internal dashboards, that is $30,000 per year. For 100 users, $60,000. And that price buys you a platform you do not own, cannot fully customize, and cannot self-host without their Enterprise tier (which costs even more).

The limitations compound. Complex multi-step workflows hit walls. Custom visualizations require workarounds. Performance degrades with large datasets because queries run through Retool's proxy layer. Version control is awkward. Testing is manual. And if Retool has an outage, your entire operations team sits idle.

None of this means Retool is bad. It is genuinely excellent for prototyping and for teams with fewer than 10 dashboard users. But there is a tipping point, usually around 20 to 30 users, where building your own internal tools dashboard becomes cheaper, faster, and more flexible. This guide covers exactly how to do it.

analytics dashboard showing charts and key performance metrics

The Real Cost Comparison: Build vs. Retool

Before writing any code, you need honest numbers. Here is a side-by-side comparison based on projects we have delivered and Retool's published pricing as of early 2027.

Retool Costs (50 Users, 3 Years)

  • Year 1: $30,000 (Business plan at $50/user/month)
  • Year 2: $30,000 (same, assuming no price increase)
  • Year 3: $30,000
  • Total: $90,000, plus your team's time building Retool apps and managing workarounds for anything the platform cannot handle natively

Custom Dashboard Costs (50 Users, 3 Years)

  • Initial build: $15,000 to $40,000 depending on complexity (4 to 10 weeks of development)
  • Hosting: $50 to $200/month on Vercel or Railway ($1,800 to $7,200 over 3 years)
  • Maintenance: $500 to $1,500/month for ongoing updates ($18,000 to $54,000 over 3 years)
  • Total: $34,800 to $101,200, but you own the code, control the roadmap, and pay zero per-seat fees

The breakeven point is typically 12 to 18 months. After that, the custom solution gets cheaper every year while Retool's costs stay fixed or increase. For a deeper look at this decision framework, read our build vs buy analysis.

There is a critical nuance here. If your internal tools are simple (a few CRUD tables, some filters, basic charts), Retool wins on speed. If your tools need custom logic, complex permissions, real-time data, or integrations with internal APIs, building your own wins on everything.

Open-Source Frameworks Worth Using

You are not starting from scratch. The open-source ecosystem for internal tools has matured dramatically. Here are the frameworks that actually work in production.

React Admin

The most mature option. React Admin has been around since 2016 and powers thousands of admin panels. It gives you data grids, forms, filters, and authentication out of the box. It connects to any REST or GraphQL API through data providers. The Enterprise Edition ($150/month) adds audit logs, calendar views, and real-time updates, but the open-source version handles most use cases.

Best for: teams that need a full-featured admin panel with standard CRUD operations and do not want to design UI from scratch.

Refine

Refine is the modern alternative to React Admin. It is headless, meaning it provides the logic (data fetching, routing, auth, access control) while you supply the UI layer. You can use Ant Design, Material UI, Chakra UI, or your own components. This makes it far more flexible for teams that want a custom look and feel.

Refine also has first-class support for Next.js, which matters if you are already running a Next.js stack. Its CLI scaffolds entire CRUD interfaces from your API schema in seconds.

Best for: teams that want full control over design but do not want to rebuild data fetching, caching, and state management.

Tremor and Shadcn/ui

These are not full frameworks. They are component libraries. Tremor specializes in dashboard components: charts, KPI cards, tables, and metrics displays. Shadcn/ui provides beautifully designed, accessible components that you copy into your project and own completely.

Use Tremor when your primary need is data visualization and reporting dashboards. Use Shadcn/ui when you need a broader set of UI components and want to maintain a consistent design system across your internal tools and customer-facing product.

Best for: teams building custom dashboards from the ground up who want beautiful components without the overhead of a full framework.

Architecture: Next.js, Prisma, and Your Database

Here is the architecture we use for most internal tools dashboards. It is simple, performant, and scales to hundreds of concurrent users without breaking a sweat.

code editor showing TypeScript and database connection logic

The Stack

  • Frontend: Next.js 15 with App Router, Shadcn/ui for components, Tremor for charts
  • Backend: Next.js API routes or tRPC for type-safe API calls
  • ORM: Prisma for database access, migrations, and type generation
  • Database: PostgreSQL (your existing production database, read replica, or a dedicated analytics DB)
  • Auth: NextAuth.js or Clerk for authentication
  • Deployment: Vercel, Railway, or self-hosted on your VPC

Database Connection Strategy

This is where most teams make their first mistake. Do not point your internal dashboard directly at your production database. Production databases are tuned for transactional workloads. Dashboard queries (aggregations, joins across large tables, date-range filters on millions of rows) compete for the same connection pool and can degrade your customer-facing product.

Instead, use a read replica. Every major database provider supports them. AWS RDS, Supabase, Neon, and PlanetScale all offer read replicas that stay in sync with your primary database within milliseconds. Your dashboard reads from the replica. Your production app writes to the primary. No contention.

For analytics-heavy dashboards with complex aggregations, consider a dedicated analytical store. Pipe your data into ClickHouse or DuckDB for fast OLAP queries. This adds complexity, but if your dashboard runs queries across millions of rows with multiple GROUP BY clauses, it is worth it.

Prisma Setup for Internal Tools

Prisma shines here because it generates TypeScript types directly from your database schema. Your dashboard components get full type safety on every query result. No guessing field names, no runtime type errors, no mismatched column types.

Define your Prisma schema to match your existing database. Use prisma db pull to introspect an existing database and generate the schema automatically. Then use Prisma Client in your API routes to query data with full type safety. If you are building on the same stack as a SaaS product, our SaaS platform guide covers this architecture in depth.

RBAC and Permissions: Getting Access Control Right

Internal tools without proper permissions are a liability. The support intern should not have the same database access as the VP of Engineering. Role-based access control is not optional.

The Permission Model

Start with four roles. Admin (full access, can manage users and settings), Manager (read/write access to their department's data), Viewer (read-only access), and Support (read access plus specific write operations like issuing refunds or updating customer records). You can always add more roles later, but these four cover 90% of internal tool needs.

Implement permissions at three levels:

  • Route level: Middleware that checks if the user's role can access the page at all. A support agent should never see the billing admin panel.
  • API level: Every API route validates that the requesting user has permission for the specific operation. Never rely solely on hiding UI elements.
  • Field level: Some users can see a customer's name and email but not their payment details. Field-level permissions let you show the same table to different roles with different columns visible.

Implementation with NextAuth.js

Store roles in your database. When a user logs in, attach their role to the session token. In your middleware, check the role against a permissions map that defines which roles can access which routes and which operations. This keeps authorization logic centralized and easy to audit.

For Refine users, the framework has a built-in access control provider that integrates directly with your permission model. Define a can function that takes a resource and action, checks the user's role, and returns true or false. Refine automatically hides UI elements the user cannot access.

One more thing: log everything. Every data access, every mutation, every export. When (not if) someone asks "who changed this customer's plan last Tuesday," you need an answer in seconds, not hours.

CRUD Generators, Charts, and the Features That Matter

The core of any internal tools dashboard is CRUD operations and data visualization. Here is how to build both efficiently.

CRUD Generators

Writing create, read, update, and delete endpoints for every database table is tedious. Do not do it manually. Both React Admin and Refine can generate full CRUD interfaces from your API or database schema. Refine's CLI, for example, takes an API endpoint and scaffolds a list page with filters and sorting, a detail page, a create form with validation, and an edit form, all in seconds.

If you are building without a framework, use Prisma's generated types to create a generic CRUD handler. One function that accepts a model name, validates input against the Prisma schema, and performs the operation. You write it once and reuse it for every table.

For bulk operations (update 500 records, delete old data, mass-assign tags), build these as background jobs using Inngest or BullMQ. Large mutations should not block the UI or risk timeout errors.

Charts and Dashboards

Recharts and Tremor are the two best options for dashboard visualizations in React. Recharts gives you more control and customization. Tremor gives you better defaults and faster development.

For a typical internal dashboard, you need: KPI cards showing current metrics with period-over-period comparison, line charts for time-series data (revenue, signups, active users), bar charts for categorical comparisons (revenue by plan, tickets by category), and tables with sorting, filtering, pagination, and CSV export.

Tremor handles all of these with minimal code. A KPI card is literally five lines. A line chart with formatted axes, tooltips, and responsive sizing is about fifteen. The time savings are real.

For teams exploring AI-powered analytics on top of their dashboards, our guide on AI data analyst tools covers how to add natural language querying to internal data.

startup team working in a modern office environment

Deployment and Security

Internal tools need to be accessible to your team but invisible to the outside world. Deployment strategy matters here more than it does for customer-facing products.

Deployment Options

Vercel with password protection. The simplest option. Deploy to Vercel, enable password protection or use Vercel's built-in authentication. Your dashboard gets a public URL but requires login to access. Good for distributed teams. Costs $20/month on the Pro plan.

Railway or Render on a private network. Deploy as a Docker container on Railway or Render with no public URL. Access through a VPN or private network. Better security posture. Costs $5 to $50/month depending on usage.

Self-hosted on your VPC. Maximum control. Run the dashboard on an EC2 instance or ECS cluster inside your existing AWS VPC. Access through your corporate VPN. No data leaves your network. Costs vary, but you are already paying for the infrastructure.

For most teams, Vercel with Clerk authentication is the sweet spot. You get zero-config deployments, automatic SSL, and enterprise-grade auth without managing any infrastructure.

Security Checklist

  • Authentication: Enforce SSO through your corporate identity provider (Google Workspace, Okta, Azure AD). No shared passwords, ever.
  • Authorization: RBAC at every layer, as covered above. Validate permissions server-side on every request.
  • Network: Restrict access by IP range or require VPN for sensitive dashboards. Vercel and Cloudflare both support IP allowlisting.
  • Audit logging: Record every login, data access, mutation, and export. Store logs in a tamper-resistant system. This is not optional for SOC 2 compliance.
  • Data masking: Mask PII (emails, phone numbers, addresses) by default. Only reveal full data to authorized roles with explicit "reveal" actions that are logged.
  • Database credentials: Use connection pooling through Prisma Accelerate or PgBouncer. Never expose raw database credentials in your application code. Rotate credentials quarterly.

A Real Build Timeline

Here is a realistic timeline for building a production-quality internal tools dashboard, assuming one senior full-stack developer working full-time.

Week 1: Foundation

Set up the Next.js project with Shadcn/ui and Tremor. Configure Prisma and connect to your database (or read replica). Implement authentication with NextAuth.js or Clerk. Build the layout: sidebar navigation, header with user menu, responsive shell. Deploy to Vercel or Railway. By Friday, your team can log in and see an empty dashboard.

Week 2 to 3: Core CRUD

Build the primary data tables your team needs. For most companies, this means customers, orders, subscriptions, and support tickets. Add search, filters, sorting, and pagination. Implement create and edit forms with validation. Add bulk actions (export, delete, status changes). Wire up RBAC so different roles see different data.

Week 4: Analytics Dashboard

Build the main dashboard with KPI cards and charts. Revenue metrics, user growth, conversion rates, whatever your team tracks daily. Add date range pickers and comparison periods. Implement data caching so dashboard loads stay under 2 seconds even with complex queries.

Week 5: Polish and Launch

Add audit logging for all mutations. Implement data masking for PII fields. Build an activity feed so managers can see recent changes. Write basic documentation for your team. Run security review and penetration testing. Launch to your full team.

Five weeks. One developer. A dashboard that serves 50 to 200 internal users, costs nothing per seat, and you own completely. After launch, budget 10 to 20 hours per month for ongoing maintenance, bug fixes, and new feature requests.

When Custom Wins (and When It Does Not)

Not every team should build a custom internal tools dashboard. Here is a straightforward decision framework.

Build Custom When:

  • You have more than 20 users who need dashboard access and the per-seat costs are becoming significant
  • Your workflows require custom logic that low-code platforms cannot handle (complex approval chains, multi-system integrations, real-time data)
  • You need fine-grained permissions that go beyond what Retool or Appsmith offer out of the box
  • Data residency or compliance requirements prevent you from using a third-party hosted platform
  • Your engineering team already uses React and TypeScript, so the maintenance burden is low

Stick with Retool When:

  • You have fewer than 15 users and straightforward CRUD needs
  • Speed of initial delivery matters more than long-term cost (you need something working by next week, not next month)
  • Your team does not have React/TypeScript expertise and hiring for it is not in the budget
  • The dashboards are simple enough that you will never hit platform limitations

There is also a middle path. Build your primary, high-traffic dashboards as custom tools. Use Retool or a similar platform for one-off admin screens that only two people use. Not everything needs the same level of investment.

The companies we work with usually start with Retool, outgrow it around the 30 to 50 user mark, and then migrate to a custom solution. If you are hitting that inflection point now, or if you want to skip Retool entirely and build on a foundation you own from day one, we can help.

Ready to build internal tools your team actually wants to use? We have built dashboards for ops teams, finance departments, and support organizations. We know what works. Book a free strategy call and we will scope your project in 30 minutes.

Need help building this?

Our team has launched 50+ products for startups and ambitious brands. Let's talk about your project.

build internal tools dashboardRetool alternative open sourceReact Admin vs Refineinternal admin panel Next.jsRBAC dashboard permissions

Ready to build your product?

Book a free 15-minute strategy call. No pitch, just clarity on your next steps.

Get Started