Next.jsReactBlogStarter

solidays — Next.js Blog Template

By francis1104

Solidays is a minimal showcase site built with Next.js App Router, Tailwind CSS, and Framer Motion. It includes a lyrics card homepage, a game clips gallery, a Fear and Dreams image card page, and an About page, and can be built as a Cloudflare Worker.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-14View source

What stands out

A quick read of the recorded project description.

01

The homepage provides a loopable lyrics card, a Music Dock entry, and Gallery / FNDS previews

02

Includes the `/gallery` game clips Archive and the `/fnds` Fear and Dreams image card page

03

Uses Next.js App Router, Tailwind CSS, and Framer Motion

04

The `cloudflare-worker` branch is built as a Cloudflare Worker via OpenNext for Cloudflare

05

The Worker is bound to an R2 bucket, Workers AI, D1, and message rate limiting; anonymous messages are integrated with Turnstile

06

Supports a global theme toggle, a meteor background, and an optional Music Dock

Template Details

Solidays is a minimal, showcase-oriented site. The README states that the currently retained pages include: `/` provides a loopable lyrics card, a Music Dock entry, and Gallery / FNDS previews; `/gallery` is a game clips Archive; `/fnds` is a Fear and Dreams image card page; `/about` explains why the site exists. The site also includes a global theme toggle, a meteor background, and an optional Music Dock.

Regarding the tech stack, the README states that the project uses Next.js App Router, Tailwind CSS, and Framer Motion, and that the `cloudflare-worker` branch is built as a Cloudflare Worker via OpenNext for Cloudflare. The Worker is bound to the `solidays-media` R2 bucket, Workers AI, `solidays-chat` D1, and message rate limiting; anonymous message submission is integrated with Turnstile. Production uses `solidays.win`, and the default `workers.dev` address is disabled.

The README also notes several limitations: `NEXT_PUBLIC_API_URL` is unused and only appears in `.env.example` / README; the app code does not read it. The homepage lyrics come from `data/cards.ts`, and `/api/cards` remains a future D1 boundary. `NEXT_PUBLIC_MUSIC_API_URL` is used for transitional song resolution; if a card has an `audioKey`, it prioritizes the private `/media`; if it is not set and there is no `audioKey`, the Music Dock is hidden and the card Play shows "No audio available." The chat API is currently anonymous message V1, containing three endpoints: read conversation, submit message, and close conversation.

Next.jsBlogLauncher

Is it right for your project?

Use Cases

  • Showcasing loopable lyrics cards and music-related entries
  • Browsing the game clips Archive
  • Viewing Fear and Dreams image cards
  • Submitting messages via the anonymous message API and reading the current conversation
  • Deploying the showcase site on a Cloudflare Worker

Suitable For

  • Frontend projects that need a minimal showcase site structure
  • Developers using Next.js App Router and Tailwind CSS
  • Teams planning to deploy to a Cloudflare Worker via OpenNext for Cloudflare
  • Developers who need integration examples for R2, D1, Workers AI, and Turnstile

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Local development uses the repository-pinned Yarn 3.6.1: `node .yarn/releases/yarn-3.6.1.cjs install`, copy `.env.example` to `.env.local`, then run `node .yarn/releases/yarn-3.6.1.cjs dev --hostname 127.0.0.1 --port 3001`

  2. 2

    Cloudflare Worker build and deployment commands: `worker:build`, `worker:dev`, `worker:deploy`; Worker configuration is in `wrangler.jsonc`; R2 integration steps are in `docs/cloudflare/resources-and-bindings.md`

  3. 3

    Environment variables include `NEXT_PUBLIC_SITE_URL`, `NEXT_PUBLIC_R2_PUBLIC_URL`, `NEXT_PUBLIC_MUSIC_API_URL`, `NEXT_PUBLIC_TURNSTILE_SITE_KEY`; `NEXT_PUBLIC_API_URL` is unused

  4. 4

    `TURNSTILE_SECRET_KEY` is a server-side secret: locally place it in an uncommitted `.dev.vars`; in production, write it to the Worker via `wrangler secret put TURNSTILE_SECRET_KEY`; do not commit it to Git

  5. 5

    The anonymous message API consists of `GET /api/chat/conversation`, `POST /api/chat/messages`, `POST /api/chat/conversation/close`; detailed documentation is in `docs/features/anonymous-chat/backend-implementation.md`

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version of the public repository under the MIT license; the free scope is the code of this version and does not mean external services or third-party assets are free.

Must comply with when using

  • You are allowed to use, modify, commercially use, 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; they cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
  • Deploying as a Cloudflare Worker requires binding Cloudflare resources such as an R2 bucket, Workers AI, and a D1 database, and completing integration configuration by referring to the documentation.
  • Anonymous message submission relies on Turnstile verification; Turnstile-related keys must be configured to use the message feature.
  • Production uses the solidays.win domain, and the default workers.dev address is disabled; you need to prepare and bind a custom domain yourself when deploying.
  • If NEXT_PUBLIC_MUSIC_API_URL is not set and a card has no audioKey, the Music Dock is hidden and card playback shows "No audio available," limiting music functionality.
  • TURNSTILE_SECRET_KEY is a server-side key; locally it must be placed in an uncommitted .dev.vars, and in production it must be written via wrangler secret put; it must not be committed to Git.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

[`docs/cloudflare/resources-and-bindings.md`](docs/cloudflare/resources-and-bindings.md)。当前 Worker 已绑定

Original README

`solidays-media` R2 桶、Workers AI、`solidays-chat` D1 和留言限流;匿名留言提交还接入了

Original README

Turnstile。生产环境使用 `solidays.win`,`workers.dev` 默认地址已关闭。

Original README

- `NEXT_PUBLIC_MUSIC_API_URL`:过渡期歌曲解析;卡片若有 `audioKey` 则优先走私有 `/media`。未设置且没有 `audioKey` 时隐藏 Music Dock,卡片 Play 显示「暂无音频」

Original README

`TURNSTILE_SECRET_KEY` 是服务端 Secret:本地开发放在未提交的 `.dev.vars`,生产通过

Original README
https://github.com/francis1104/solidays/blob/cloudflare-worker/LICENSEhttps://github.com/francis1104/solidays/blob/cloudflare-worker/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-14. 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 · 85 / 100
Technologies
Next.js · React
Website type
Blog · Starter
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-09-08
Screenshot last checked
2026-10-14

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: codex-user-requested-batch-review-20261015 · 2026-10-15

Inspect the recorded source material

SHA-256: 7197350be12378a72681bb41b4faa4f103d06c0051c0f79408784384cc76bb61

2026-10-14T12:41:14.241Z

Source file / repository
# Solidays Worker

这是 Solidays 的最小展示站点,当前保留:

- `/`:可循环歌词卡、Music Dock 入口,以及 Gallery / FNDS 预览
- `/gallery`:游戏片段 Archive
- `/fnds`:Fear and Dreams 图片卡片页
- `/about`:这个站为什么存在
- 全局主题切换、流星背景和可选音乐 Dock

项目使用 Next.js App Router、Tailwind CSS 和 Framer Motion。`cloudflare-worker` 分支通过
[OpenNext for Cloudflare](https://opennext.js.org/cloudflare) 构建为 Cloudflare Worker。

## 本地开发

```bash
node .yarn/releases/yarn-3.6.1.cjs install
cp .env.example .env.local
node .yarn/releases/yarn-3.6.1.cjs dev --hostname 127.0.0.1 --port 3001
```

打开 <http://127.0.0.1:3001>。项目固定使用仓库内的 Yarn 3.6.1,不生成 `package-lock.json`。

## Cloudflare Worker

```bash
node .yarn/releases/yarn-3.6.1.cjs worker:build
node .yarn/releases/yarn-3.6.1.cjs worker:dev
node .yarn/releases/yarn-3.6.1.cjs worker:deploy
```

Worker 配置在 `wrangler.jsonc`,R2 的接入步骤见
[`docs/cloudflare/resources-and-bindings.md`](docs/cloudflare/resources-and-bindings.md)。当前 Worker 已绑定
`solidays-media` R2 桶、Workers AI、`solidays-chat` D1 和留言限流;匿名留言提交还接入了
Turnstile。生产环境使用 `solidays.win`,`workers.dev` 默认地址已关闭。

## 环境变量

复制 `.env.example` 后按需设置:

- `NEXT_PUBLIC_SITE_URL`:站点 URL
- `NEXT_PUBLIC_R2_PUBLIC_URL`:R2 公共域名;设置后 `/fnds` 使用 R2 对象 key
- `NEXT_PUBLIC_API_URL`:**未使用**(只出现在 `.env.example` / README;app 代码不读。首页歌词走 `data/cards.ts`,`/api/cards` 仍是未来 D1 边界)
- `NEXT_PUBLIC_MUSIC_API_URL`:过渡期歌曲解析;卡片若有 `audioKey` 则优先走私有 `/media`。未设置且没有 `audioKey` 时隐藏 Music Dock,卡片 Play 显示「暂无音频」
- `NEXT_PUBLIC_TURNSTILE_SITE_KEY`:匿名留言 Widget 的公开 Site Key;生产值位于版本化的
  `.env.production`,本地开发使用 `.env.local` 中的官方 dummy key

`TURNSTILE_SECRET_KEY` 是服务端 Secret:本地开发放在未提交的 `.dev.vars`,生产通过
`wrangler secret put TURNSTILE_SECRET_KEY` 写入 Worker,不要写入 Git。

聊天接口当前是匿名留言 V1:`GET /api/chat/conversation` 读取当前会话,
`POST /api/chat/messages` 提交留言,`POST /api/chat/conversation/close` 结束当前会话。
详细说明见 [`docs/features/anonymous-chat/backend-implementation.md`](docs/features/anonymous-chat/backend-implementation.md)。
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.