Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

176 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cruxcoach-pages

Source for https://cruxcoach.org — the public landing page for the CruxCoach open-source Android Kilter Board app.

Published via Codeberg Pages. Repo contents are served directly: edit index.html, push, page is live within minutes.

Layout

cruxcoach-pages/
├── index.html         single-file landing page (HTML + embedded CSS; local JS only)
├── .domains           Codeberg Pages custom-domain config
├── assets/            screenshots, logos, og-image, vendored Leaflet (/boards/ only)
├── boards/            interactive map of climbing-board locations worldwide
│   ├── index.html     map page (Leaflet + markercluster, see JS exception #2)
│   └── data/          regenerated by tools/build-boards-data.mjs
├── tools/             scripts that regenerate data committed under boards/data/
└── README.md          this file

Editing

  • English lives at the root; the maintained German mirror lives under /de/.
  • No build step. Edit index.html, commit, push.
  • Test locally: python3 -m http.server in repo root, open http://localhost:8000.

Style guidelines

  • No external dependencies (no CDN-hosted CSS/fonts/JS). System font stack only.
  • No user tracking, cookies, profiles, or third-party analytics. A local script sends only allowlisted page/click dimensions and one locally combined same-tab Zapstore→APK fallback to an immediate daily aggregate counter; Board Map map/list views share one logical page label while language remains separate. DNT/GPC is honoured. The fallback uses only a 30-minute timestamp in the tab's sessionStorage, never an identifier. Direct APK buttons use one closed first-party redirect whose server-side health cache selects Codeberg or the verified Zapstore mirror without any visitor-side availability probe.
  • Prefer plain semantic HTML over div soup.
  • Light + dark mode via prefers-color-scheme — no JS toggle.
  • Accessibility: every link has discernible text; phone-mockup is aria-hidden="true".
  • JS exception #1: 404.html runs inline JavaScript on /c/<naddr> paths to fetch climb metadata from public Nostr relays (relay.damus.io, nos.lol, relay.primal.net) and render an install/landing view. No external scripts — just WebSocket calls plus the same local aggregate counter used on every page.
  • JS exception #2: boards/index.html uses Leaflet + Leaflet.markercluster to render an interactive map of climbing-board locations. Both libraries are vendored locally under assets/vendor/leaflet/ (no CDN) and loaded via plain <script> tags. The map's tile layer fetches PNGs from tile.openstreetmap.org, disclosed on the privacy page. Dataset (boards/data/boards.geojson) is regenerated by tools/build-boards-data.mjs (see tools/README.md for the source-adapter pattern; the schema is designed to merge multiple data sources over time).

Deployment

Codeberg Pages serves the default branch of this repo at:

  • https://CruxCoach.codeberg.page/cruxcoach-pages/ (built-in URL)
  • https://cruxcoach.org/ (custom domain, configured via .domains + DNS)

DNS at Njalla:

  • A cruxcoach.org217.197.91.145
  • AAAA cruxcoach.org2a02:6ea0:c813::145
  • (TLS handled automatically by Codeberg via Let's Encrypt)

Roadmap

Done

  • Real logo (inline SVG from assets/logo.svg)
  • Real hero screenshot replacing CSS phone-mockup
  • Screenshot gallery with lazy-loading
  • Favicon + apple-touch-icon
  • OG / Twitter Card meta tags (using app icon)
  • German variant at /de/index.html with hreflang alternates
  • Dark-mode-only (color-scheme=dark in meta)
  • PNG metadata stripped (tIME, tEXt date:create/modify)
  • /imprint.html and /de/imprint.html
  • /privacy.html and /de/privacy.html
  • /support.html and /de/support.html with Lightning QR
  • /404.html with brand-consistent error page
  • /.well-known/security.txt (RFC 9116)
  • sitemap.xml (includes hreflang alternates)
  • robots.txt (sitemap reference, noindex on legal pages)
  • humans.txt (FOSS-tradition colophon)
  • JSON-LD SoftwareApplication schema in <head> (both languages)
  • Real Nostr npub link via primal.net
  • OG image SVG asset (assets/og-image.svg, 1200×630, not yet wired to og:image — needs PNG export)

Open

  • Image optimization — gallery screenshots total ~700 KB. Resize to max 800 px wide, convert to WebP. Hero is 184 KB which is OK; gallery is lazy-loaded but heavy on mobile
  • Render og-image.svg → og-image.png (1200×630) and switch og:image / twitter:image meta-tags to it. Needs a tool (Inkscape, librsvg, or online converter)
  • /press.html press kit with high-res logo, screenshots, brief & long descriptions, story angles
  • /faq.html with anticipated normy questions
  • Update Mastodon link once @cruxcoach@mastodon.social is verified
  • Once an F-Droid listing lands, add an install card for it. Needs fastlane metadata and a build flavour without the in-app APK updater. IzzyOnDroid is ruled out: its inclusion policy rejects apps "fully or in part created by generative AI tools".
  • Set Codeberg-Repo Website field (manual UI step) to https://cruxcoach.org

Image-optimization notes

For when tools are available:

# Resize + WebP (need cwebp + ImageMagick)
for f in assets/screenshots/*.png; do
  convert "$f" -resize 800x "${f%.png}.tmp.png" \
    && cwebp -q 85 "${f%.png}.tmp.png" -o "${f%.png}.webp" \
    && rm "${f%.png}.tmp.png"
done

# Or with optipng (no resize, no WebP, just lossless squeeze)
optipng -o5 assets/screenshots/*.png

License

Site content (this repo): CC-BY-4.0. Underlying CruxCoach app: GPL-3.0, separate repo at codeberg.org/CruxCoach/CruxCoach.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages