Homepage for Xtagger at https://xtagger.dev
  • Astro 61.3%
  • Svelte 16%
  • MDX 13.8%
  • CSS 5.6%
  • JavaScript 1.9%
  • Other 1.4%
Find a file
boat 1899eb826e
Some checks are pending
Deploy to Cloudron / build-and-deploy (push) Waiting to run
initial
2026-02-26 00:45:33 +00:00
.forgejo/workflows initial 2026-02-26 00:45:33 +00:00
public initial 2026-02-26 00:45:33 +00:00
src initial 2026-02-26 00:45:33 +00:00
.gitignore initial 2026-02-26 00:45:33 +00:00
astro.config.mjs initial 2026-02-26 00:45:33 +00:00
Caddyfile initial 2026-02-26 00:45:33 +00:00
CloudronManifest.json initial 2026-02-26 00:45:33 +00:00
Dockerfile initial 2026-02-26 00:45:33 +00:00
package.json initial 2026-02-26 00:45:33 +00:00
pnpm-lock.yaml initial 2026-02-26 00:45:33 +00:00
README.md initial 2026-02-26 00:45:33 +00:00
tailwind.config.mjs initial 2026-02-26 00:45:33 +00:00
tsconfig.json initial 2026-02-26 00:45:33 +00:00

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:

  1. Installs dependencies and builds the Astro site
  2. Builds a Docker image (Caddy serving dist/)
  3. Pushes the image to your container registry
  4. 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