Website for the Knights of Zalantha LARP.
- Next.js (App Router) + Tailwind CSS
- Hosted on Vercel
- SES for contact form delivery
- Images hosted in S3 and served via AWS CloudFront
- Auth API for sign-in and password reset flows
Create a .env.local with the values below (see Environment Variables).
Then run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the result.
Required:
NEXT_PUBLIC_CLOUDFRONT_URL- CloudFront base URL for imagesNEXT_PUBLIC_SITE_URL- Public site URL (used for metadata)NEXT_PUBLIC_RECAPTCHA_SITE_KEY- reCAPTCHA v3 site key (contact form)RECAPTCHA_SECRET_KEY- reCAPTCHA v3 secret key (contact form)AWS_REGION- AWS region for SES (orSES_REGION)CONTACT_FROM_EMAIL- Verified SES from address for contact formNEXT_PUBLIC_AUTH_API_BASE_URL- Auth API base URL (see Auth API)NEXT_PUBLIC_CHARACTER_API_BASE_URL- Character API base URL (see Character API)NEXT_PUBLIC_COGNITO_USER_POOL_ID- Cognito User Pool IDNEXT_PUBLIC_COGNITO_USER_POOL_CLIENT_ID- Cognito app client IDNEXT_PUBLIC_COGNITO_IDENTITY_POOL_ID- Cognito identity pool IDNEXT_PUBLIC_COGNITO_REGION- AWS region for Cognito
Used for sign-in, sign-up, and password reset. The client calls Next API routes
under /api/auth/* which proxy to the Auth API to avoid CORS issues.
Expected API shape:
POST /login->{ idToken, accessToken?, refreshToken?, expiresAt? }POST /signupPOST /reset/requestPOST /reset/confirm
Character data is loaded from an AWS API backed by a serverless database. Configure:
NEXT_PUBLIC_CHARACTER_API_BASE_URL- API Gateway base URL (ex:https://abc123.execute-api.us-east-1.amazonaws.com/prod)
Expected API shape:
GET /characters->{ "items": Character[] }PUT /characters->{ "items": Character[] }(body)
Use API Gateway + Lambda + DynamoDB (or AppSync + DynamoDB) with a Cognito
authorizer so the app can pass the Cognito id token in the Authorization
header.
The contact form posts to /api/contact, which sends via SES. Configure
RECAPTCHA_SECRET_KEY, NEXT_PUBLIC_RECAPTCHA_SITE_KEY, AWS_REGION (or
SES_REGION), and CONTACT_FROM_EMAIL/CONTACT_TO_EMAIL in .env.local.
Frontend is hosted on Vercel. backend is serverless with AWS