Website for the xtagger project
- Astro 53.5%
- MDX 25.7%
- Svelte 13.5%
- CSS 4.6%
- JavaScript 1.5%
- Other 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
Deploy to Cloudron / build-and-deploy (push) Has been cancelled
We rewrite the homepage intensity section to the shipped model: OKLCH chroma as intensity, the dual ring, click to intensify and shift-click to ease back, and the curve options, with the looping closeup video replacing the old border-ramp demo. We correct the palette card from 16 to 32 colours, drop the stale Coming in v0.2 markers on the intensity card and section, and change the provenance marker to Planned for a future release. The orphaned intensity demo array is removed. |
||
| .forgejo/workflows | ||
| public | ||
| src | ||
| .gitignore | ||
| astro.config.mjs | ||
| Caddyfile | ||
| CloudronManifest.json | ||
| Dockerfile | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tailwind.config.mjs | ||
| tsconfig.json | ||
xtagger-site
Marketing and documentation site for XTagger — the local-first tag layer for X.com.
Built with Astro + Svelte 5 + Tailwind CSS.
Docs follow the Diátaxis framework.
Self-hosted on Cloudron via Docker + Caddy.
Development
pnpm install
pnpm dev # http://localhost:4321
pnpm build # outputs to dist/
pnpm preview # preview the production build
Deploy
Deployment is fully automated via Forgejo Actions (.forgejo/workflows/deploy.yml).
Every push to main:
- Installs dependencies and builds the Astro site
- Builds a Docker image (Caddy serving
dist/) - Pushes the image to your container registry
- Calls the Cloudron API to hot-update the running app
Required Forgejo secrets
| Secret | Value |
|---|---|
REGISTRY_URL |
Your container registry URL, e.g. registry.example.com |
REGISTRY_USER |
Registry username |
REGISTRY_PASSWORD |
Registry password / token |
CLOUDRON_URL |
Your Cloudron base URL, e.g. https://my.cloudron.example.com |
CLOUDRON_API_TOKEN |
Cloudron → Account → API Access → Generate token |
CLOUDRON_APP_ID |
Cloudron → Apps → XTagger Site → Configure → copy the app ID from the URL |
First deployment (manual)
Before the Actions workflow can update an existing app, the app needs to exist on Cloudron:
# 1. Build and push the image manually (or let Actions do it once)
docker build -t registry.example.com/xtagger-site:latest .
docker push registry.example.com/xtagger-site:latest
# 2. In Cloudron: Apps → Install a custom app → enter image name
# Set domain to xtagger.dev
# Cloudron handles TLS via Let's Encrypt automatically
Content structure (Diátaxis)
src/content/
tutorials/ Learning-oriented — follow along to achieve something
how-to/ Task-oriented — concise goal-based recipes
reference/ Information-oriented — dry, precise, complete
explanation/ Understanding-oriented — why things work the way they do
Porkbun DNS → Cloudron
In Porkbun, add an A record for xtagger.dev pointing to your Cloudron server IP.
Cloudron will automatically provision a Let's Encrypt certificate when you assign the domain in the app settings.
xtagger.dev A <your-cloudron-server-ip>
www CNAME xtagger.dev