# FlexHub > Where I flex my projects, code, and stuff. A place to flex. FlexHub is the brand wrapped around the operator's self-hosted Forgejo instance. Same git host, same backing store — different paint job. - **Canonical URL:** (admin / push / clone) - **FlexHub-branded entry:** (public showcase) Both hostnames hit the same Forgejo container on `nullstone`. Repos, PATs, SSH keys, issues — all identical. Login sessions are independent (separate cookies per hostname). This repository holds the customisations that turn vanilla Forgejo into FlexHub: the homepage template, the theme CSS, the logo set, and the deploy notes that wire it all together. --- ## What's in this repo | Path | Purpose | | ------------------------------------------------ | ------------------------------------------------------------------------ | | `templates/home.tmpl` | FlexHub homepage. Wordmark + tagline + 4-card "agent grid" feature list. | | `public/assets/css/theme-flexhub.css` *(planned)* | The orange/black/white theme. `DEFAULT_THEME = flexhub` in `app.ini`. | | `public/assets/img/` *(planned)* | Logo + wordmark + favicons (`logo.svg`, `flexhub-wordmark.png`, etc). | | `docs/DEPLOY.md` | How to roll a change out to the live `nullstone` Forgejo container. | | `LICENSE` | MIT. | The repo is currently template-only; assets get checked in as the operator pulls them out of the live Forgejo `custom/` tree. The authoritative copies live on `nullstone` until then. --- ## How it's wired up Forgejo loads any file under `custom/` to override the equivalent built-in. On `nullstone` that directory is bind-mounted from the host: ``` /home/docker/forgejo/data/gitea/ → /var/lib/gitea/ (in-container) └─ custom/ ├─ conf/app.ini ├─ templates/home.tmpl ← from this repo ├─ public/assets/css/... ← from this repo └─ public/assets/img/... ← from this repo ``` The Forgejo container itself is described by the compose file at `/opt/docker/forgejo/docker-compose.yml`. Container data + customisations live under `/home/docker/forgejo/` because the root volume on nullstone is small. Key settings in `app.ini` that drive the rebrand: ```ini APP_NAME = FlexHub DEFAULT_THEME = flexhub THEMES = forgejo-auto,forgejo-light,forgejo-dark,flexhub,veilor ``` The two hostnames are split at the Traefik layer, not Forgejo: - `git.s8n.ru` — docker-provider router, gated by `no-guest@file` ACL. - `flexhub.s8n.ru` — file-provider router, **public**, no `no-guest`, rate-limited login. Service `flexhub-svc` points at `http://forgejo:3000` directly (avoids the file→docker provider race; see DEPLOY.md). --- ## Contributing Don't. This is the operator's personal git host — accounts are invite-only, registration is disabled. If you've found a real bug in Forgejo itself, file it upstream at . If you've found a typo on the homepage, open an issue here and the operator will get to it. Public read access is intentional: browse repos, clone what's MIT or AGPL, mirror what you like. That's the "flex" part. --- ## See also - **Deploy + update workflow:** [`docs/DEPLOY.md`](docs/DEPLOY.md) - **Initial Forgejo bring-up runbook (operator-internal):** `_github/infra/forgejo/DEPLOY.md` in the `ai-lab` repo. - **ARRFLIX project** references `flexhub.s8n.ru` as a mirror — that's this instance.