ColorArchive is a polished static color project built with Next.js, TypeScript, Tailwind CSS, and the App Router. It includes a primary archive page, a dedicated dense All Colors page, curated Collections, a local Favorites shelf, a Spectrum Explorer, a Surprise discovery page, a dedicated search page with multi-dimensional filters, individual color detail pages with relationship recommendations, a Support route for monetization direction, a Packs route for sellable palette products, a Product Examples route for public product proof, and a lightweight Word → Color generator route, and it is configured for static export and GitHub Pages deployment.
- Next.js with App Router
- TypeScript
- Tailwind CSS
- Static local dataset
- GitHub Pages via GitHub Actions
app/contains the exported routes, metadata, and global styles.src/data/colors.tsgenerates a local dataset of 2016 colors with name, hex, rgb, hsl, hue, saturation, lightness, and family.src/components/contains reusable UI building blocks for the hero, filters, grid, and cards.app/all-colors/page.tsxrenders the full 2016-color archive in a denser single-page layout.app/collections/page.tsxrenders reusable curated palette sets for shareable editorial content.app/collections/[slug]/page.tsxrenders editorial collection detail pages with collection-specific framing and export context.app/about/page.tsxexplains the project’s purpose, static constraints, and route structure.app/updates/page.tsxexposes a static changelog for major archive and product-layer changes.app/favorites/page.tsxrenders a local-only saved color shelf backed by browser storage.app/recent/page.tsxrenders a local-only recently viewed trail backed by browser storage.app/packs/page.tsxrenders productized palette pack offers that can later point to off-site checkout.app/packs/[slug]/page.tsxrenders individual pack detail pages with source collections, FAQ, and sample files.app/product-examples/page.tsxrenders public-facing pack examples that can be shared with payment providers or early customers.app/free-pack/page.tsxrenders a static free sample pack landing page built from existing preview assets.app/spectrum/page.tsxrenders a hue-by-lightness spectrum matrix view of the archive.app/surprise/page.tsxadds a random discovery route for exploratory browsing.app/search/page.tsxadds a dedicated static search route for fast color lookup.app/support/page.tsxcaptures the project’s practical monetization paths without adding backend complexity.app/waitlist/page.tsxadds a static pre-launch interest route for upcoming packs.app/thanks/page.tsxadds a static post-checkout return page for Lemon Squeezy or Stripe redirects.app/cancel/page.tsxadds a static checkout-cancelled return page for off-site commerce flows.app/colors/[slug]/page.tsxstatically exports individual color detail pages.app/word-to-color/page.tsxadds a second static route that deterministically maps any word or phrase to a color.src/lib/color-utils.tscontains pure utility functions for color conversion, sorting, filtering, and recommendation matching.src/lib/word-color.tscontains the local deterministic word-to-color generator.src/lib/checkout-config.tscentralizes off-site checkout provider, status, note, and URL placeholders.src/lib/checkout-config.tsalso centralizes waitlist settings plus success/cancel return paths..github/workflows/deploy-pages.ymlbuilds and deploys the staticout/directory to GitHub Pages.public/CNAMEensures GitHub Pages serves the site oncolorarchive.me.
.
├── .github/workflows/deploy-pages.yml
├── app/
│ ├── globals.css
│ ├── icon.svg
│ ├── layout.tsx
│ ├── page.tsx
│ ├── robots.ts
│ └── sitemap.ts
├── public/
│ ├── .nojekyll
│ └── CNAME
├── src/
│ ├── components/
│ │ ├── color-archive-page.tsx
│ │ ├── color-card.tsx
│ │ ├── color-grid.tsx
│ │ ├── filter-toolbar.tsx
│ │ └── hero-section.tsx
│ ├── data/colors.ts
│ ├── lib/color-utils.ts
│ └── types/color.ts
├── next.config.ts
├── package.json
├── postcss.config.mjs
└── tsconfig.json
Install dependencies:
npm installStart the development server:
npm run devCreate the production static export:
npm run buildThe static site is emitted to:
out/This repo is already configured for GitHub Pages:
next.config.tsusesoutput: "export".github/workflows/deploy-pages.ymlbuilds and deploys on every push tomainpublic/.nojekyllprevents Jekyll from ignoring Next.js asset pathspublic/CNAMEsets the custom domain tocolorarchive.me
git add .
git commit -m "Initial ColorArchive site"
git branch -M main
git remote add origin git@github.com:YOUR_USERNAME/ColorArchive.git
git push -u origin mainIn your GitHub repository:
- Open Settings → Pages
- Under Build and deployment, set Source to GitHub Actions
- Under Custom domain, set
colorarchive.me - Enable Enforce HTTPS after the domain resolves
At your DNS provider, point the domain to GitHub Pages:
- For the apex domain, add GitHub Pages A/AAAA records
- Or point
www.colorarchive.metoYOUR_USERNAME.github.iowith a CNAME and redirect the apex domain towww
GitHub documents the current records here:
- The site uses only local data and no backend services.
- The page is fully static-export compatible and deployable on GitHub Pages.
- The
All Colorsroute supports shareable search, family, sort, and density state for dense archive browsing. - The
Collectionsroute packages the archive into reusable thematic sets with copyable palette exports. - Collection detail routes turn each set into a standalone editorial reference rather than a single aggregate list item.
- The
Aboutroute gives the project a clearer trust layer by explaining why it is static and how the route groups fit together. - The
Updatesroute gives the site a visible shipping history rather than hiding all changes inside git alone. - The
Favoritesroute stores saved colors inlocalStorageand now exports a saved palette or CSS variables without backend state. - The home archive now surfaces a local Recent / Favorites hub so users can continue browsing without digging through navigation.
- The
Recentroute stores recently viewed colors inlocalStorage, making it easier to resume browsing without an account. - Both
FavoritesandRecentnow support JSON export in addition to text-based palette export. - The
Packsroute turns the archive into product-ready offers and exposes placeholder checkout slots for future Lemon Squeezy or Stripe links. - The
Free Sample Packroute gives the site a concrete free-to-paid bridge while Lemon approval is still pending. - The free sample route now includes claim guidance plus a free-versus-paid comparison block so the upgrade path is explicit.
src/lib/checkout-config.tsis now the only file you need to edit when real checkout URLs become available.- Individual pack detail routes deepen the product layer without introducing a backend or checkout dependency.
- The
Waitlistroute gives the project a static pre-launch conversion page before email tooling is wired. - The
Thanksroute is ready to use as a post-purchase return URL from off-site checkout. - The
Cancelroute gives Lemon Squeezy or Stripe a branded cancellation return page instead of a dead end. - The
Product Examplesroute provides concrete pack deliverables, collection previews, and export examples that can be shared during payment-provider onboarding. public/downloads/now contains sample CSS, JSON, and TXT assets so each pack has something concrete to preview before checkout is wired.- The search route supports shareable query parameters for keyword, family, hue band, tone, saturation range, lightness range, and exact hex.
- Individual color pages expose nearby, tonal, analogous, and complementary recommendations, and can copy a full palette or CSS variable set.
- The
Word → Colorroute now exports palette text and CSS variables in addition to the generated swatches. app/sitemap.tsnow includes top-level routes and all statically exported color detail pages.- If you temporarily deploy without the custom domain and need a repository subpath, add a
basePathandassetPrefixthat match the repository name before building.