Claude Code Boilerplate
FeaturesPricingBlogDocs
Get started →

Product

  • Features
  • Pricing
  • Skills

Compare

  • vs ShipFast
  • vs MakerKit
  • vs supastarter

Resources

  • Docs
  • Blog
  • Discord

Legal

  • License
  • Privacy Policy
  • Terms of Service
Claude Code Boilerplate

© 2026 Claude Code Boilerplate. All rights reserved.

← All posts

How to Build an Internal Tool With Next.js -- Skip Retool and Airtable, Own Your Operations Dashboard

October 31, 2026
nextjssaasdrizzle-ormboilerplateadmin

You ship your product. Then your ops team needs to see customer data. Then support needs to fix account issues. Then finance wants a usage report. You open a new browser tab and start searching for "Retool free tier."

Before you do -- read this.

The hidden cost of no-code internal tools

Retool charges around $10 per user per month at its lowest paid tier. Airtable starts at around $20 per user per month for automations and version history. Both tools require you to build a separate sync from your real database, which means your internal tool is always one step behind your production data.

There is a simpler path if you already have a Next.js codebase.

What you are actually building

An internal tool is just a set of protected pages your team uses. It needs:

  • Authentication that only lets staff in
  • Read access to your real database
  • Write actions for common support tasks (reset a password, refund a charge, extend a trial)
  • A role check so a junior hire cannot do what an owner can

If you already have a Next.js SaaS boilerplate with auth, a database, and role-based access, you have 80% of this already.

The build-vs-buy decision

Here is the honest comparison:

Retool or Airtable:

  • Fast to set up a first dashboard (30 minutes)
  • Costs $10-20 per user per month
  • Data lives in a third-party tool or gets synced -- stale by definition
  • Custom logic requires JavaScript widgets or automations that get messy fast
  • Vendor lock-in: your ops logic lives in their UI builder

Built in Next.js:

  • Takes a few hours for the first useful page
  • Costs nothing per seat -- it runs on your existing Vercel deployment
  • Reads directly from your Neon DB -- always current
  • Custom logic is just TypeScript you already know how to write
  • You own it completely; no tool can break your ops workflow

The crossover point is around 3-4 staff users. At that point, Retool starts costing $30-40 per month and the sync complexity starts to irritate. A custom internal page pays for itself in one month.

How to build it with a Next.js boilerplate

1. Add a protected route group

Create app/(admin)/ alongside your main layout. Add a middleware check that only lets users with role: 'admin' or role: 'staff' through. This is the same JWT you already have -- you are just adding a route guard.

The Next.js SaaS Boilerplate ships an admin panel module with user search and bulk actions already wired up. Use it as the starting point instead of a blank page.

2. Write a repo function your ops team needs

Your modules/user/user.repo.ts already talks to Neon DB through Drizzle ORM. Add a function like findByEmail or listTrialExpiringSoon. Your internal page calls the service, the service calls the repo -- same pattern as the rest of your app.

No sync needed. No API key for a separate tool. The data is always live.

3. Add scoped write actions

Support tasks like "extend this trial by 7 days" or "reset this user's usage counter" are just service functions. Put them in a POST route under app/(admin)/api/. The admin role check in middleware means only staff can call them.

This is safer than giving your team raw database access, and faster than building a Retool workflow.

4. Role-gate the pages

The pattern is the same for internal tools as for the rest of your app: read the role from the JWT, redirect to / if they should not be there, render the page if they should.

See the related post on how to build a SaaS admin panel for the exact route structure and role check pattern.

What to build first

Start with the one page your team opens most often. For most early-stage SaaS teams that is:

  1. A user lookup page -- search by email, see their plan and recent activity
  2. A subscription management page -- extend trial, manually upgrade, view payment history
  3. A simple daily report -- signups today, revenue today, active trials expiring this week

Each of these is a single server component that calls a Drizzle query. The first one takes about two hours to build. The second takes another hour once the pattern is familiar.

The outcome

Your internal tool:

  • Lives inside your existing codebase -- one Vercel deploy covers everything
  • Has no per-seat cost
  • Reads live data, not synced data
  • Uses the same auth your team already has accounts for
  • Is maintainable by anyone who knows TypeScript

When a customer emails support at 10pm, your team opens a page on your own domain instead of logging into a third-party tool and waiting for the sync to catch up.

Get started

The Next.js SaaS Boilerplate gives you auth, the Drizzle database layer, and a working admin panel starting point. You add the specific queries and actions your team needs. Most teams ship a useful first internal page in an afternoon.

Stop paying per seat for tools you do not control. You already have everything you need.