What it is
A reusable private-by-default boundary for temporary standalone Vercel apps that need one shared generated credential rather than public access.
A small Vercel starter for private internal apps, demos, and spikes: scrypt credentials, signed expiring sessions, strict cookies, centralized rate limiting, and a fail-closed request boundary.
A reusable private-by-default boundary for temporary standalone Vercel apps that need one shared generated credential rather than public access.
Missing authentication or rate-limit configuration returns 503. There is no environment flag that silently turns an intended private deployment public.
Tests exercise denial, login, cookie flags, tampering, expiry, protected assets, APIs, and downloads over the actual HTTP boundary.
Login attempts use a centralized Upstash counter instead of isolated per-instance memory that resets across serverless invocations.
A shared login authenticates possession of one credential; it does not provide individual identity, per-person revocation, roles, row ownership, or MFA.
Apps with customer data, durable production identity, or different user rights should use managed authentication and authorization rather than extending this starter.
The starter is deliberately narrow: internal spikes, temporary standalone tools, and small trusted-group demos. A public static artifact or share-by-link page needs a different, explicitly public boundary.
Credential generation, secret placement, deployment checks, and rotation are documented as one runbook. Development uses the real Vercel middleware boundary because a UI-only preview cannot prove authentication.
The repository documents the complete threat model, deployment and rotation runbook, runtime proof, and the boundary where managed accounts become the correct answer.