Skip to content

Team & Access

The admin screen a security questionnaire is really asking about — seats with the bill shown first, invitations, scopes split from bundles, sharing stated as its consequence, live sessions, and the audit trail underneath.

6 blocks61 lineslucide-reactAdded 10 Sept 2026

What's included

  • app/team-access-page.tsx
  • 6 blocks it is built from, installed with it
  • Needs lucide-react

Works with

  • React
  • Next.js
  • Tailwind CSS
  • TypeScript

npx hoverlab add team-access-page

Or over MCP, from your editor's agent — no account needed.

License

Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.

Was this useful?

Preview

Team & access

Seats, invitations, scopes, sharing, live sessions — and the trail that says what each of them was used for.

Seats

£12.00 per seat per month · renews 14 September

9 of 12 seats are in use

2 extra seats for the 18 days left in this period
£14.40
From 14 September, every month
£168.00

The part-period charge is £12.00 × 2 × 18/30 days. It goes on the card ending 4242 today.

Step 3 of 4

Bring your team in

Paste as many addresses as you like — commas, spaces or one per line all work.

priya@northwind.com

1 person will be invited to Northwind.

Can build and ship. The right default.

https://app.example.com/join/northwind-8f31c2

Invites expire after 14 days and can be revoked from Settings.

Give Retention agent access

It needs to see who is at risk, and — if you let it — act on that.

Can see

Can change

Off by default. These act without asking again.

Expires after

Revocable at any time from Settings → Agents

Where you are signed in

One row per browser that holds a valid session. Locations are estimated from the IP address and are frequently wrong on mobile networks and VPNs — treat an unfamiliar city as worth checking, not as proof.

  • MacBook ProThis device

    Chrome 141 · macOS 16

    near Lisbon, PortugalActive now

    Use Sign out in the menu
  • iPhone 15

    Safari · iOS 19

    near Lisbon, Portugal20 minutes ago

  • Windows PC

    Edge 140 · Windows 11

    near Frankfurt, Germany2 days ago

    First sign-in from this country

  • iPad Air

    Safari · iPadOS 19

    near Lisbon, Portugal3 weeks ago

3 other sessions are active.

Audit log

5 entries

  • Security

    Changed log retention

    — Workspace settings

    90 days365 days

    Rhea Patel rhea@acme.com · · IP 203.0.113.42

  • Access

    Removed member

    — jordan@acme.com

    Sam Okafor sam@acme.com · · IP 198.51.100.9

  • Security

    Rotated API key

    — prod-ingest-key

    Rhea Patel rhea@acme.com · · IP 203.0.113.42

  • Billing

    Changed plan

    — Acme Corp

    Team, 24 seatsStudio, 40 seats

    Billing system system · · IP —

  • Data

    Exported dataset

    — customers.csv (18,402 rows)

    Jordan Lee jordan@acme.com · · IP 192.0.2.77

Entries are kept for 365 days on your plan and then deleted. Export before that if you need them for longer — nothing here can be recovered afterwards.

The real page, rendered in your current theme — every section below is a live block, not a screenshot.

Built from

All blocks
  1. Seat Count & ProrationChanging seats with the bill shown first: the part-period charge and the new recurring amount as two numbers, the arithmetic spelled out, and the asymmetry stated where it bites — removing a seat refunds nothing today.
  2. Team Invite StepThe onboarding step where a product becomes multiplayer: pasted addresses split into chips, typos marked rather than dropped, and an honest way to skip.
  3. Agent Permission ScopesRead and write scopes separated rather than bundled, writes off by default, a required expiry, and switches that are real checkboxes with role="switch" — so the grant is toggleable by keyboard and announced as on or off.
  4. Share & Access DialogThe share modal where a design mistake is a data leak: general access stated as its consequence rather than its setting, and a copy button that never silently widens access.
  5. Active Sessions & DevicesThe screen people go looking for after losing a laptop. Sign out everywhere states what it does not reach — API keys keep working — locations are written as estimates, and this device is labelled rather than revocable by misclick.
  6. Audit LogA compliance-grade trail with named actors, before and after values, IP addresses, and a stated retention window — plus a count of what the active filter is hiding.

Only want one section? Open it and copy that block instead — browse Billing & Usage.

Source

app/team-access-page.tsx
/**
 * Who is in, what they can reach, and what they did — the admin screen a
 * security questionnaire is actually asking about.
 *
 * The unifying idea is that every section here is one half of a pair, and
 * products routinely ship one half. Seats without invitations. Sharing
 * without scopes. Sessions without an audit trail. Each of those pairs is
 * fine on its own and useless as a control, because the question an
 * administrator has is never "who has a seat" — it is "who can reach the
 * customer table, and when did they last do it".
 *
 * So the order runs from the commercial fact to the forensic one:
 *
 *   seats        changing headcount with the bill shown first, including
 *                the part-period charge, because a surprise invoice is how
 *                a team stops adding people who need access
 *   invite       addresses pasted, typos caught, roles assigned
 *   scopes       read and write separated rather than bundled, writes off
 *                by default, an expiry that is required
 *   sharing      where a design mistake is a data leak — general access
 *                stated as its consequence, not as a setting name
 *   sessions     the screen people go looking for after losing a laptop
 *   audit        named actors, before and after values, and a retention
 *                period stated rather than implied
 *
 * <SettingsAuditLog> is last because it is the only read-only surface here.
 * Everything above it changes something; it records that the change
 * happened. Putting it first would turn an admin screen into a report.
 */

import * as React from 'react'
import { BillingSeatManager } from '@/components/billing-seat-manager'
import { TeamInviteStep } from '@/components/team-invite-step'
import { PermissionScopeDialog } from '@/components/permission-scope-dialog'
import { ShareAccessDialog } from '@/components/share-access-dialog'
import { SettingsSessions } from '@/components/settings-sessions'
import { SettingsAuditLog } from '@/components/settings-audit-log'

export default function TeamAccessPage() {
  return (
    <main className="min-h-screen bg-background text-foreground">
      <section className="mx-auto w-full max-w-5xl px-6 pb-2 pt-12">
        <h1 className="text-2xl font-bold tracking-tight">Team &amp; access</h1>
        <p className="mt-1 text-sm text-muted-foreground">
          Seats, invitations, scopes, sharing, live sessions — and the trail
          that says what each of them was used for.
        </p>
      </section>

      <BillingSeatManager />
      <TeamInviteStep />
      <PermissionScopeDialog />
      <ShareAccessDialog />
      <SettingsSessions />

      {/* The only read-only surface here, so it closes rather than opens. */}
      <SettingsAuditLog />
    </main>
  )
}

How to use it

  1. 1. Copy each of the 6 blocks above into components/ — each block page has its own copy button.
  2. 2. Drop this file at app/team-access-page.tsx. The imports already point at @/components/…, so they resolve with no edits.
  3. 3. Delete the sections you do not want. Every block takes props, so the copy changes without the layout moving.

For AI

The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.

See the prompt

More Account & Billing

Open the full page for this page

Account Settings

Profile, team, API keys and danger zone in one screen — with the destructive panel last, well away from the everyday controls.

Account & Billing5 blocks39 lines
Open the full page for this page

Billing & Usage Screen

Plan, quota meters and invoice history, with the upgrade prompt placed beside a bar that is nearly full rather than on the plan card.

Account & Billing5 blocks44 lines
Open the full page for this page

Usage & Limits

Consumption in the order the questions arrive: the overage warning first because it is time-critical, then the meters, then what actually happens at each limit.

Account & Billing4 blocks66 lines
Open the full page for this page

Invoices

Billing history laid out for finance rather than for the user — a retrieval screen, so the table leads and the payment method comes last.

Account & Billing3 blocks41 lines
Open the full page for this page

Notification Settings

Notifications from the receiving end: the inbox you arrived from, per-event and per-channel control, and the push prompt asked after the decision rather than on arrival.

Account & Billing5 blocks59 lines
Open the full page for this page

Change Plan

Both directions, because only one of them is usually built: a radiogroup with the prorated charge announced as it changes, and a cancellation with the end date, what breaks, and one honest alternative offered once.

Account & Billing3 blocks52 lines