- TypeScript 39%
- Astro 35.8%
- JavaScript 20%
- CSS 4.9%
- Dockerfile 0.3%
|
Some checks failed
Deploy qluna.net to Cloudflare / deploy (push) Failing after 31m34s
Approved latest head
|
||
|---|---|---|
| .forgejo/workflows | ||
| docs | ||
| scripts | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| astro.config.mjs | ||
| CONTENT-LICENSE.md | ||
| CONTRIBUTING.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| SECURITY.md | ||
| tsconfig.json | ||
| wrangler.jsonc | ||
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 docs — Apache-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.