The public studio brand site for Luna Maze, an independent product studio. Built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS + Framer Motion + GSAP, statically exported to dist/, and deployed to GitHub Pages from main.
The current shipping product, Axiom (a premium habit tracker for brain recovery), lives at the /axiom/ subroute and continues to ship from this same repo and build pipeline.
npm install
npm run dev # http://localhost:3000 → Luna Maze landing
# http://localhost:3000/axiom/ → Axiom landing
npm run build # static export to ./dist/| Route | What renders |
|---|---|
/ |
Luna Maze studio landing |
/axiom/ |
Axiom product marketing site (preserved as-is) |
src/
app/
layout.tsx # Shared root layout (font, lang="en")
page.tsx # Luna Maze landing
globals.css # Global styles + Luna Maze utilities
axiom/
layout.tsx # Axiom-specific metadata + bg
page.tsx # Axiom landing (relocated)
components/
lunamaze/ # Luna Maze sections (Hero, Studio, Products, ...)
*.tsx # Existing Axiom components (untouched)
content/
lunamaze.ts # Typed content: copy, products, capabilities, socials
lunamaze-contrast.ts # Brand contrast pairs (WCAG AA verified)
public/
.nojekyll # Tells GitHub Pages to skip Jekyll
.github/workflows/
deploy.yml # GitHub Actions → GitHub Pages
AWS_APPLICATION.md # Ready-to-paste AWS Activate copy
.kiro/specs/luna-maze-studio/ # Spec docs (requirements, design, tasks)
The site deploys automatically on every push to main via .github/workflows/deploy.yml using the official GitHub-maintained Pages actions (actions/configure-pages, actions/upload-pages-artifact, actions/deploy-pages).
- Push the repository to GitHub.
- Go to Settings → Pages and set the source to GitHub Actions.
- If the repo URL is a project page (e.g.,
https://<user>.github.io/<repo>/), set the repo variableNEXT_PUBLIC_BASE_PATHin Settings → Variables → Actions to the repo path (e.g.,/<repo>). Leave this variable unset for a user/org page (<user>.github.io). - Push to
main— the workflow runs, buildsdist/, and publishes.
next.config.js reads NEXT_PUBLIC_BASE_PATH from the environment and applies it to both basePath and assetPrefix. Defaults to empty string locally so npm run dev and npm run build Just Work without env vars.
Ready-to-paste copy for the AWS Activate application lives in AWS_APPLICATION.md. The "About Luna Maze" and "What we're building" paragraphs there are mirrors of aboutCopy and buildingCopy in src/content/lunamaze.ts — keep them in sync if either changes.
After the first successful deploy, replace <DEPLOYED_URL> in AWS_APPLICATION.md with the live GitHub Pages URL and submit.
- Spec workflow:
.kiro/specs/luna-maze-studio/ - Requirements:
requirements.md - Design:
design.md - Tasks:
tasks.md
- Next.js 16 (App Router, static export)
- React 19
- TypeScript (strict, no
any) - Tailwind CSS 3.4 (with
lunamaze-*and untouchedaxiom-*token namespaces) - Framer Motion (navbar scroll fade)
- GSAP +
@gsap/react(constellation hero motif)
Proprietary — © Luna Maze Studio. All rights reserved.