Live release data: version, date, file size, and download links come from the GitHub Releases API, cached with hourly ISR
anvil-website — Next.js Business Template
By kudzaiprichard
The marketing and download site for Anvil, built with the Next.js App Router, presenting the product's positioning and guiding visitors to download the macOS, Windows, and Linux versions.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Platform-aware downloads: the client detects the visitor's OS, prioritizes the matching build, and still keeps the full artifact list
Self-contained design: fonts are self-hosted via next/font, images are local or generated routes, and no third-party services are called at runtime
Security headers: strict CSP, HSTS, X-Frame-Options, and a restricted Permissions-Policy configured in next.config.ts
Accessibility and responsiveness: keyboard focus states, a prefers-reduced-motion fallback, and no horizontal overflow from 320px to large screens
Single source for SEO: metadata, OG, Twitter cards, manifest, robots, sitemap, and JSON-LD all read from lib/site.ts
Template Details
This is the official website for the Anvil project, introducing this free, offline practice tool for classic LeetCode and NeetCode problems and guiding visitors to download the installer for their platform. The site is a single-page structure covering the product introduction, an invitation to contributors, and download entry points for the latest version's binaries.
At build time, the site fetches the latest release information from the GitHub Releases API, including version number, date, file size, and download links, and caches it with hourly ISR, so publishing a new version updates the page without code changes. The visitor's operating system is detected on the client, and the matching build is prioritized while all artifacts remain listed in the manifest. Fonts are self-hosted via next/font, images are local assets or generated routes, and next.config.ts configures a strict Content-Security-Policy along with HSTS, X-Frame-Options, and a restricted Permissions-Policy. The page supports keyboard focus states, a prefers-reduced-motion fallback, and has been verified to have no horizontal overflow from 320px phones to large displays. Metadata, Open Graph, Twitter cards, web manifest, robots, sitemap, and JSON-LD are all generated from a single source in lib/site.ts.
All configuration is optional; the site builds and runs without a .env file, falling back to Anvil's canonical URL. Overridable variables include NEXT_PUBLIC_SITE_URL, NEXT_PUBLIC_ANVIL_REPO, and NEXT_PUBLIC_RELEASES_REPO, all public URLs with no secrets. If the GitHub API is unreachable (offline build or rate limiting), a fixed FALLBACK version in lib/releases.ts is used. When the naming convention of release artifacts changes, both ASSET_RULES and the fallback data must be updated.
Is it right for your project?
Use Cases
- Building a product introduction and multi-platform download page for an open-source desktop tool
- Sites that need to automatically sync version information from GitHub Releases and avoid manually updating download links
- Marketing pages that want to reduce runtime external dependencies with a strict CSP and self-hosted assets
- Presentation pages that need to cover both desktop and mobile while supporting keyboard operation and reduced-motion preferences
Suitable For
- Developers building marketing and download entry points for open-source projects
- Teams that prefer the Next.js App Router and static pre-rendering
- Maintainers of cross-platform tools who need to guide downloads based on the visitor's operating system
- Site authors who care about content security policy and accessibility details
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 20.9+ and npm; the repository includes package-lock.json, and npm ci is recommended for reproducible installs
- 2
After cloning, run git config core.hooksPath .githooks to enable the commit message hook
- 3
All configuration is optional; you can copy .env.example to .env to override NEXT_PUBLIC_SITE_URL, NEXT_PUBLIC_ANVIL_REPO, and NEXT_PUBLIC_RELEASES_REPO
- 4
On Vercel, if NEXT_PUBLIC_SITE_URL is not set, it falls back to the injected production domain
- 5
When release artifact naming changes, update ASSET_RULES and FALLBACK in lib/releases.ts accordingly
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize, and distribute the code of this version for free.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur separate charges.
- At build or revalidation time, the site calls the GitHub Releases API on the server to fetch the latest release information; if that external interface is unreachable (offline build or rate limiting), it falls back to fixed FALLBACK version data.
- Version number, date, file size, and download links depend on real-time retrieval from the GitHub Releases API and are cached with hourly ISR; after publishing a new version, you must wait for the cache to refresh, and the download manifest depends on the availability of that external service.
- When the naming convention of release artifacts changes, you must update ASSET_RULES and the fallback data in lib/releases.ts accordingly; otherwise the mapping between platforms and download links will break.
- The Anvil name and icon belong to the Anvil project; when reusing this template, note the restrictions on using brand identifiers and do not arbitrarily carry over its name and icon.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
the only network call happens at build/revalidation time, server-side, to resolve the latest release.
Original README
Version, date, file sizes, and download URLs are fetched from the GitHub Releases API and cached with hourly ISR
Original README
When release asset naming changes, update `ASSET_RULES` **and** the fallback in [`lib/releases.ts`](./lib/releases.ts).
Original README
https://github.com/kudzaiprichard/anvil-website/blob/main/LICENSEhttps://github.com/kudzaiprichard/anvil-website/blob/main/README.mdThe Anvil name and icon belong to the [Anvil project](https://github.com/kudzaiprichard/anvil).
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-13. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 80 / 100
- Technologies
- Next.js · React
- Website type
- Corporate Website
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-07-20
- Screenshot last checked
- 2026-10-13
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-13
Inspect the recorded source material
SHA-256: 623d7beee7003894e7349a59ee8d166102ab089b12b77a707b470e5b419d1806
2026-10-13T08:36:37.671Z
Source file / repository<div align="center">
<img src="./public/anvil-icon-64.png" alt="Anvil" width="72" />
# Anvil — Website
The marketing & download site for **[Anvil](https://github.com/kudzaiprichard/anvil)** — the free,
offline, honest way to master the classic LeetCode & NeetCode questions.
**Next.js 16** (App Router) · React 19 · TypeScript · zero runtime dependencies beyond React.
</div>
---
## Overview
A single-page site that introduces Anvil, makes the case for it, invites contributors, and routes
visitors to the latest release binaries for macOS, Windows, and Linux. It is statically prerendered,
ships no client-side data fetching, and calls no third-party services at runtime — the only network
call happens at build/revalidation time, server-side, to resolve the latest release.
### Key characteristics
- **Release data is live, not hardcoded.** Version, date, file sizes, and download URLs are fetched
from the GitHub Releases API and cached with hourly ISR, so publishing a release updates the site
with no code change ([`lib/releases.ts`](./lib/releases.ts)).
- **Platform-aware downloads.** The visitor's OS is detected client-side and the matching build is
surfaced first, with every artifact still listed in the manifest.
- **Self-contained by design.** Fonts are self-hosted via `next/font`; images are local or generated
routes; a strict Content-Security-Policy (`default-src 'self'`) is enforced in
[`next.config.ts`](./next.config.ts) alongside HSTS, `X-Frame-Options`, and a locked-down
`Permissions-Policy`.
- **Accessible & responsive.** Keyboard focus states, `prefers-reduced-motion` fallbacks on every
animation, and a layout verified with no horizontal overflow from 320px phones to large monitors.
- **SEO surfaces derive from one source.** Metadata, Open Graph, Twitter cards, the web manifest,
`robots`, `sitemap`, and JSON-LD all read from [`lib/site.ts`](./lib/site.ts).
## Prerequisites
- **Node.js 20.9+** (CI runs on Node 20; developed on Node 24).
- **npm** (the repo ships a `package-lock.json`; use `npm ci` for reproducible installs).
## Getting started
```bash
npm install
npm run dev # http://localhost:3000
```
Enable the commit-message hook once after cloning (see [Contributing](#contributing)):
```bash
git config core.hooksPath .githooks
```
## Scripts
| Script | Purpose |
| ------------------- | ------------------------------------------------ |
| `npm run dev` | Start the dev server with HMR. |
| `npm run typecheck` | `tsc --noEmit` — strict type checking, no build. |
| `npm run build` | Production build (static prerender). |
| `npm start` | Serve the production build. |
## Configuration
All configuration is optional — the site builds and runs with no `.env` file, falling back to the
canonical Anvil URLs. Copy [`.env.example`](./.env.example) to `.env` to override. Every value is a
public URL; there are no secrets.
| Variable | Purpose |
| --------------------------- | ------------------------------------------------------------------------------ |
| `NEXT_PUBLIC_SITE_URL` | Canonical production URL for absolute SEO links (canonical, OG, sitemap, JSON-LD). |
| `NEXT_PUBLIC_ANVIL_REPO` | `owner/name` of the source repo — drives every GitHub link. |
| `NEXT_PUBLIC_RELEASES_REPO` | `owner/name` of the releases repo — drives the download manifest. |
On Vercel, `NEXT_PUBLIC_SITE_URL` falls back to the injected production domain if unset. See
[`lib/site.ts`](./lib/site.ts) for the exact resolution order.
## Project structure
```
app/ App Router: root layout, page, metadata & generated routes
(opengraph-image, apple-icon, manifest, robots, sitemap),
and the global + component stylesheets.
components/ UI and the animated canvas backgrounds (FieldCanvas, GraphField,
TopoField, LatticeField, ForgeField, StarVoid) plus the section
components that compose the page.
lib/ releases.ts — live release data + platform/asset mapping.
site.ts — single source of truth for site identity & SEO.
anvil-mark.tsx — the brand mark as an inline SVG.
public/ Static icons.
```
### How release data flows
`getLatestRelease()` fetches `releases/latest` from the GitHub API for the configured releases repo,
revalidated hourly (ISR). `ASSET_RULES` maps each published asset's filename onto a platform slot
(macOS / Windows / Linux) with a human label. If the API is unreachable (offline build, rate limit),
a pinned `FALLBACK` release is served instead. When release asset naming changes, update `ASSET_RULES`
**and** the fallback in [`lib/releases.ts`](./lib/releases.ts).
## Contributing
Every change lands via pull request into a protected `main`, mirroring the conventions of the main
Anvil repo:
- Short-lived `feat/…`, `fix/…`, `docs/…`, `chore/…` branches off `main`.
- Conventional commits — `type(scope): summary` followed by one `- path: what changed` bullet per
file, enforced by the `commit-msg` hook in [`.githooks`](./.githooks).
- CI (`Lint & build (web)`) runs typecheck + build and must pass, and a code owner must approve,
before merge.
## License
[MIT](./LICENSE) © Kudzai P Matizirofa. The Anvil name and icon belong to the
[Anvil project](https://github.com/kudzaiprichard/anvil).
Explore similar templates
Compare previews and descriptions within the same stack and category.

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS

Next-JS-Landing-Page-Starter-Template
A free Next.js landing page starter template written in Tailwind CSS and TypeScript, featuring built-in navbar, hero, features, CTA banner, and footer sections.
Next.js · Corporate Website

next-saas-starter
A free Next.js SaaS marketing landing page template from Blazity, using static generation and styled-components with no extra UI library.
Next.js · SaaS

startup-nextjs
Startup is a free, MIT-licensed Next.js template from NextJSTemplates for SaaS startups and corporate landing pages.
Next.js · SaaS

shadcn-landing-page
A Next.js landing page template built with Shadcn, TypeScript, and Tailwind, converted from a Shadcn-Vue version. It includes sections such as Navbar, mobile Sidebar, Hero, Pricing, FAQ, and Footer, and highlights responsive design, navigation, and dark mode.
Next.js · Corporate Website

shadcn-dashboard-landing-template
An open-source admin dashboard and marketing landing page template built on shadcn/ui and Tailwind CSS, with both Vite + React and Next.js versions in one repository.
Next.js · Admin dashboard
