Social media & SEO
Last updated: 2026-09-17 Tasks: DC-08/09, SOCIAL-01–05, SEO-01–03, DEPLOY-02/03, GH-06, INT-01
---
Notifications (Discord + CI/CD)
| Task | What |
|---|---|
| DC-08 | Success card when ci-cd.yml completes — jobs, duration, markets published, changelog excerpt, release URL |
| DC-09 | Failure card — failed job/step, Actions logs link, changelog context, rollback hint |
| DC-06/07 | Lorapok-branded embed templates + Settings preview (prerequisite) |
All webhook URLs configured in Settings → Discord (not Deployments — DEPLOY-02 removes duplicate UI there).
---
Multi-platform social (SOCIAL-01)
Same template pattern as Discord, configurable per platform:
| Platform | Config in admin |
|---|---|
| Discord | Settings → Discord (existing) |
| X (Twitter) | Settings → Social |
| Settings → Social | |
| Mastodon / Bluesky | Settings → Social |
| Telegram | Settings → Social (bot token) |
INT-01 (done) — Settings → Services Integrations hub panes configure Discord, social, image AI, GitHub webhooks, mail, and cred sync; dedicated tabs remain for deep links.
---
Deploy social gallery (SOCIAL-02 / DEPLOY-03)
On each successful deploy:
- Parse
CHANGELOG.mdfor release section → caption - Generate Lorapok-themed image (SOCIAL-04 provider)
- Store in R2/KV gallery tagged by feature/version
- Admin Social Studio — preview, edit caption/hashtags, publish
SOCIAL-03 — one-click publish to all active channels with correct dimensions (feed, story, square).
SOCIAL-05 — short video (Reels/Shorts/Stories) from carousel template + optional changelog voiceover.
- Encode path: Cloudflare service binding
VIDEO_ENCODERor Settings → Social AI → HTTPS encoder URL (+ API key). - Contract: POST frames (SVG) + voiceover script →
videoBase64orvideoUrl(MP4 stored inSTATS_R2, served via gallery asset?kind=video). - Fallback: static carousel frames when no encoder is configured or encode fails.
---
AI image providers (SOCIAL-04)
- Default: free-tier providers where possible
- Optional: paid APIs (admin adds key via cred vault)
- Admin registers multiple providers; exactly one active at a time
- Used by gallery, Chrysalis assets, and marketing hero variants
---
SEO system (SEO-01–03)
| Layer | Implementation |
|---|---|
| On-page | Title/description, canonical, Open Graph, Twitter cards |
| Structured data | Organization (Lorapok Labs), SoftwareApplication, WebSite |
| Ecosystem links | All Lorapok product URLs in footer, JSON-LD sameAs, semantic nav |
| Alt / accessibility | Product names in alt, aria-label; no keyword stuffing |
| Admin hub SEO-02 | Google Search Console, Cloudflare Web Analytics, Azure, Bing — tokens in Settings |
| Policies SEO-03 | robots.txt, sitemap, noindex admin, align LEGAL-01 |
Pipeline: npm run site:seo + site:seo:validate in CI.
---
GitHub webhook (GH-06)
Repo events (push, release, workflow_run) → POST /api/webhooks/github (HMAC) → Mission Control ingest → fan-out:
| Destination | Events | Notes |
|---|---|---|
| Discord | All enabled events | Community webhook first, deployment webhook fallback |
| Social | release only | Enabled platforms in Settings → Social (avoids push/workflow spam) |
Configurable event list in Settings → GitHub.
Repo webhook setup (canonical — CLI)
Preferred: headless bootstrap from repo root (cred vault + gh; no browser console, no manual GitHub form):
npm run github:webhook:bootstrap --prefix website/admin
This saves the Mission Control webhook secret, creates or updates the repo hook (application/json, push/release/workflow_run), and runs a signed probe. Auth uses cred vault (firebase_service_account_json + admin_master_email) unless ADMIN_ID_TOKEN or ADMIN_EMAIL/ADMIN_PASSWORD is set.
Re-probe only: npm run github:webhook:probe --prefix website/admin.
Agent policy: .cursor/rules/github-webhook-bootstrap.mdc.
Manual fallback (UI only when CLI unavailable)
- Mission Control → Settings → GitHub → Save (generates webhook secret + ingest URL).
- GitHub repo → Settings → Webhooks → Add webhook — URL, secret,
application/json. - Events:
Pushes,Releases,Workflow runs. - Confirm Recent webhook events in Mission Control and Discord community card.
---
Cred sync (CRED-02)
Every Settings save that touches secrets must:
- Write cred vault (if applicable)
- Sync GitHub Actions secrets + Pages secrets
- Confirm via health badge — never silent miss
---
Live email audit (MAIL-16)
Mission Control audits product, support, and identity addresses (format, transport, domain routing). When TESTMAIL_API_KEY + TESTMAIL_NAMESPACE are on Pages, product and support addresses also get a live outbound send + testmail inbox poll.
npm run mail:probe-deliverability --prefix website/admin
Failures log to system events and post a Discord deployment/community alert embed.
Addresses covered:
[email protected][email protected]- Provisioned
@lorapok.techidentities
---