Q. Luna / 青月 — long-form extensions to short-form media, documenting ideas, arguments, and their evolution.
  • TypeScript 39%
  • Astro 35.8%
  • JavaScript 20%
  • CSS 4.9%
  • Dockerfile 0.3%
Find a file
ChatGPT 7168b4cab4
Some checks failed
Deploy qluna.net to Cloudflare / deploy (push) Failing after 31m34s
content: publish Xtrape and AI briefing for 2026-07-30 (#17)
Approved latest head 2b43b66 after review and passing npm run build.
2026-07-31 07:20:14 +00:00
.forgejo/workflows chore: drop stale pages naming from workflow and README (#6) 2026-07-15 21:55:49 +00:00
docs fix: address round-1 review — factual accuracy, locale integrity, SEO, archive bounds 2026-07-27 11:47:58 +03:00
scripts content: verify the 2026-07-28 briefing against primary sources 2026-07-28 22:07:30 +03:00
src content: publish Xtrape and AI briefing for 2026-07-30 (#17) 2026-07-31 07:20:14 +00:00
.env.example feat: add initial Q. Luna site 2026-07-14 19:01:28 +00:00
.gitignore chore: drop stale pages naming from workflow and README (#6) 2026-07-15 21:55:49 +00:00
astro.config.mjs feat: show build version and commit in the footer (#11) 2026-07-16 19:08:35 +00:00
CONTENT-LICENSE.md fix: address round-1 review — factual accuracy, locale integrity, SEO, archive bounds 2026-07-27 11:47:58 +03:00
CONTRIBUTING.md feat: open-source readiness — licensing boundary, governance docs, disclosure audit 2026-07-27 10:53:50 +03:00
docker-compose.yml feat: add initial Q. Luna site 2026-07-14 19:01:28 +00:00
Dockerfile feat: add initial Q. Luna site 2026-07-14 19:01:28 +00:00
LICENSE feat: open-source readiness — licensing boundary, governance docs, disclosure audit 2026-07-27 10:53:50 +03:00
nginx.conf feat: add initial Q. Luna site 2026-07-14 19:01:28 +00:00
package-lock.json ci: target the shared instance runner via ubuntu-latest (#2) 2026-07-15 12:55:07 +00:00
package.json feat: add Briefings as a distinct validated content type 2026-07-27 11:00:28 +03:00
README.md feat: open-source readiness — licensing boundary, governance docs, disclosure audit 2026-07-27 10:53:50 +03:00
SECURITY.md feat: open-source readiness — licensing boundary, governance docs, disclosure audit 2026-07-27 10:53:50 +03:00
tsconfig.json feat: add initial Q. Luna site 2026-07-14 19:01:28 +00:00
wrangler.jsonc fix: deploy as Cloudflare Worker static assets (#5) 2026-07-15 17:59:22 +00:00

qluna-site

Official site for Q. Luna / 青月 at qluna.net.

Q. Luna is the long-form companion to short-form media: each topic is developed here through structured argument, evidence, revisions, and a visible history of how the idea changed.

Stack

  • Astro
  • TypeScript
  • Markdown / MDX
  • Static output
  • Cloudflare Worker (static assets) for production hosting
  • Forgejo Actions for build and deployment
  • Docker + Nginx as an optional self-hosted fallback
  • Forgejo as the source repository

Local development

npm install
npm run dev

Build

npm run build
npm run preview

Automatic deployment

A push to main triggers .forgejo/workflows/deploy-cloudflare.yml:

Forgejo → shared instance runner → Astro build → wrangler deploy → Cloudflare Worker (static assets)

Required Forgejo secret:

CLOUDFLARE_API_TOKEN

Required Forgejo variable (vars. context):

CLOUDFLARE_ACCOUNT_ID

The Worker name and assets directory live in wrangler.jsonc.

See docs/deployment-cloudflare.md for the Cloudflare Worker, token, runner, and domain configuration.

Optional self-hosted container

docker build -t qluna-site .
docker run --rm -p 8080:80 qluna-site

Content model

Content lives in src/content/ and is versioned in Git. Notes record not only conclusions, but also status, revision history, related videos, and related projects.

Public comments are intentionally not implemented as a conventional comment system. The site uses a controlled Share Your Thoughts submission boundary. Public visitors do not need accounts. Private submissions will later be sent to a small replaceable backend or email workflow; selected responses are published back into Git as curated content.

See docs/architecture.md and docs/content-model.md.

Briefings

Alongside revisable Notes, the site publishes Briefings — dated, source-backed information snapshots (currently the Chinese-language series Xtrape 与 AI 每日简报 at /briefings/xtrape-ai/). Briefings are a separate validated content collection with explicit correction/withdrawal semantics and an RSS feed. Every edition lands through a reviewed pull request; nothing is auto-published to production. See docs/editorial-workflow.md and docs/content-model.md.

Public repository boundary

This public repository is the source of qluna.net. Production secrets (the Cloudflare API token and account configuration) live in Forgejo/Cloudflare settings, never in this repository. Private material — full private briefing editions, unreleased roadmaps, internal architecture decisions, personal correspondence — must never be committed here; see docs/open-source-readiness.md.

External contributions are accepted selectively (see CONTRIBUTING.md); editorial control over published content remains with Q. Luna. Security reports: see SECURITY.md.

Licensing

Dual-licensed by path:

  • Code, configuration, scripts, and technical docsApache-2.0.
  • Authored content (src/content/ — notes, page copy, briefing editorial text, brand) — copyright Q. Luna, all rights reserved.

Public visibility does not grant permission to republish authored content. The exact boundary is defined in CONTENT-LICENSE.md.