Skip to content

Protected Layout

A copy-paste React access screen for a Next.js layout or app root — header and footer stay visible while locked. Zero dependencies.

Routing & LayoutCore Blockroutinglayout

Best used for A Next.js layout.tsx or app root where the header/footer must survive the locked state.

Built for a Next.js layout.tsx or any app root where the gate should wrap the page content but not the site chrome around it.

// Usage

Minimal setup

<ProtectedLayout expectedHash={process.env.NEXT_PUBLIC_KNOCK_HASH} header={<SiteHeader />}>
  <YourApp />
</ProtectedLayout>
FIG.01Demo code: 4242
Site header (always visible)
Site footer (always visible)
Installation

Add this block to your project

Recommended

npx shadcn@latest add @knock-codes/protected-layout

Also installs

  • Knock Codes Core
  • Knock Codes Types
  • useKnockCodes
  • cx (classname helper)
  • Gate Wrapper
  • PIN Input
  • Knock Codes

These install together as one atomic unit — even a presentational or read-only piece needs the full verification stack (hook, types, core) behind it to actually run.

Files created (12)

  • components/knock-codes/core/hash.ts
  • components/knock-codes/core/verify.ts
  • components/knock-codes/core/session.ts
  • components/knock-codes/core/storage.ts
  • components/knock-codes/react/types.ts
  • components/knock-codes/react/useKnockCodes.ts
  • components/knock-codes/react/KnockCodesContext.tsx
  • components/knock-codes/react/cx.ts
  • components/knock-codes/react/GateWrapper.tsx
  • components/knock-codes/react/PinInput.tsx
  • components/knock-codes/react/KnockCodes.tsx
  • components/knock-codes/react/ProtectedLayout.tsx
Other ways

GitHub shorthand

npx shadcn@latest add trivedi-vatsal/knock-codes/protected-layout

Copy the files by hand

  1. Open the Code tab in the preview above.
  2. Create each path listed below in your project and paste its contents in.
  3. Do the same for anything listed under “Also installs”, if present.
// Props

API reference

PropTypeDefaultDescription
expectedHashstringSHA-256 hex hash to verify against, for local mode.
verifyVerifyFnCustom async verification function, for server mode.
children *ReactNodeRendered once unlocked.
headerReactNodeRendered above the access-code prompt even while locked.
footerReactNodeRendered below the access-code prompt even while locked.

Exactly one of expectedHash or verify is required.

Notes

Accessibility

Header and footer are always in the document, in source order, whether or not the gate is unlocked — so a persistent nav landmark stays reachable by screen reader users at every state, not just once unlocked.

Customization

Pass `header`/`footer` for chrome that should survive the gate — a logo, a footer with legal links. Everything else (labels, storage, timeout) is identical to Knock Codes.

Security & Verification

Need a hash? Use the hash generator on Getting Started — computed locally, never sent anywhere.

The honest version

Knock Codes stops casual visitors, search engines, and forwarded links. Local mode does not stop anyone who opens DevTools — the hash ships in your client bundle by design. Server mode (swap one prop) hides the hash from the client; children you already bundled are still in the JavaScript, and a forged session works unless you wire validateSession. A velvet rope, with an optional real lock. Never marketed as more than that.

// Ready-made

Used in these templates

Want the whole screen instead of assembling it yourself? These templates already build on this block.

// Compose with

Blocks that pair well with this one

These combine naturally with this block, whether as a shared shell, a shared session, or a common fallback.