Einladung wird geladen…
+Einen Moment bitte.
+Dein Code
+ + + + ++ +
+ + +Du bist eingeladen
+Die App übernimmt den Code automatisch.
+Link ungültig oder abgelaufen
+Dieser Einladungs- oder Promo-Link ist ungültig oder bereits abgelaufen.
+diff --git a/.github/workflows/dev.yaml b/.github/workflows/dev.yaml index 50fa6eb..b6baa6f 100644 --- a/.github/workflows/dev.yaml +++ b/.github/workflows/dev.yaml @@ -36,6 +36,8 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} COMMIT_MSG: ${{ github.event.head_commit.message }} + # wrangler looks for ./functions in the cwd (repo root), sibling to + # public/. That middleware injects Smart App Banner app-argument. run: | wrangler pages deploy public \ --project-name=realunit-web-dev \ diff --git a/.github/workflows/prd.yaml b/.github/workflows/prd.yaml index bf9cdae..f2706bb 100644 --- a/.github/workflows/prd.yaml +++ b/.github/workflows/prd.yaml @@ -36,6 +36,8 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} COMMIT_MSG: ${{ github.event.head_commit.message }} + # wrangler looks for ./functions in the cwd (repo root), sibling to + # public/. That middleware injects Smart App Banner app-argument. run: | wrangler pages deploy public \ --project-name=realunit-web \ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a94f6ac..ef09961 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,6 +10,30 @@ This repo is the **realunit.app** website — public, static. See the served. The dev dependencies exist **only** for the quality gates below (formatting, HTML validation, unit tests, screenshots); nothing compiles or bundles the site. +- **Invite/promo HTML rewrite is banner, canonical, and store handoff.** Safari, + Play, and share crawlers snapshot `apple-itunes-app`, `og:url`, + `rel=canonical`, `twitter:url`, `og:title`, `twitter:title`, + `og:description`, `twitter:description`, `og:image:alt`, `twitter:image:alt`, + `og:locale`, `og:site_name`, html `lang`, the Play + referrer, android-app / ios-app alternate links, Facebook App Links + (`al:ios:url` / `al:android:url` are `realunit-wallet://…`; `al:android:class` + is `swiss.realunit.app.MainActivity`; `al:web:url` + is the HTTPS landing), and Twitter App Card `twitter:app:url:iphone` / + `twitter:app:url:ipad` / `twitter:app:url:googleplay` (same custom scheme) + from the HTML bytes before + `/js/invite-banner.js` / `invite.js` run, so `functions/_middleware.js` + (repo-root `functions/`, picked up by `wrangler pages deploy public`) and + `scripts/dev-server.mjs` inject those from the request URL (www folded onto + the apex). The campaign code is in `og:title` / `twitter:title` / + `og:description` / `og:image:alt` / `twitter:image:alt`; `?lang=en` sets English title/description/alt and `og:locale`; + invitee names wait for lookup JS. The committed + `public/invite` and `public/promo` HTML stay generic (`app-id` only, og:url / + twitter:url `/invite/` or `/promo/`, `og:site_name` RealUnit, generic titles and descriptions, Play + href without referrer, no `al:*`, no `twitter:app:*`, `format-detection` + `telephone=no, date=no` so iOS does not turn the code or Aktionstext date + into a link, `x-apple-data-detectors="false"` on `#ok-code` / `#ok-body` + because Safari re-scans JS-inserted text, no inline + ` + + + + + +
+Einen Moment bitte.
+Dein Code
+ + + + ++ +
+ + +Die App übernimmt den Code automatisch.
+Dieser Einladungs- oder Promo-Link ist ungültig oder bereits abgelaufen.
+