Files
hidden11/deploy/n8n-plays-counter.json
claude-code 0de85cbc51
Build and push image / build (push) Failing after 15m20s
Localize the archive, add reminders, named challenges and a funnel
Archive and answer pages now exist in all six languages and are prerendered
instead of rendered per request, and each answer page carries a sentence of
real context per player (club, league, nationality, former clubs, honours)
plus Article and BreadcrumbList JSON-LD. The sitemap grows from 121 to 691
URLs, every one with hreflang alternates.

Adds an optional display name to shared results, so a challenge link reads
"<name> challenges you" in the page, the OG image and the head-to-head
verdict; the name is sanitised both when written and when parsed back.

Adds an opt-in daily reminder (Web Push without payload, so no content
encryption) and a PWA install prompt shown once the day is finished, plus
first-party event ingestion at /api/events that mirrors GA4 so the funnel
survives ad blockers.

Wires the missing N8N_PLAYS_WEBHOOK_URL into the deployment along with the
new events, push and search-verification secrets, and ships the n8n
workflows, the Postgres schema with funnel/retention views, and an IndexNow
submitter.

Refs #2 #3 #5 #6 #7 #8 #9 #10

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvQ1ErZNRUcWgCEkJ9uyrn
2026-08-26 12:41:28 +00:00

82 lines
2.0 KiB
JSON

{
"name": "hidden11 — plays counter",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "hidden11-plays",
"responseMode": "responseNode",
"options": {}
},
"id": "plays-webhook",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
0,
0
],
"webhookId": "hidden11-plays"
},
{
"parameters": {
"operation": "executeQuery",
"query": "WITH upsert AS (\n INSERT INTO hidden11_plays (play_date, count)\n SELECT $1::date, 1\n WHERE $2 = 'increment'\n ON CONFLICT (play_date) DO UPDATE SET count = hidden11_plays.count + 1\n RETURNING count\n)\nSELECT coalesce(\n (SELECT count FROM upsert),\n (SELECT count FROM hidden11_plays WHERE play_date = $1::date),\n 0\n) AS count;",
"options": {
"queryReplacement": "={{ $json.body.date }},={{ $json.body.action }}"
}
},
"id": "plays-pg",
"name": "Count",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.4,
"position": [
220,
0
],
"notes": "Credential: shared Postgres (LXC 121). Schema in deploy/sql/hidden11-events.sql"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ count: $json.count }) }}",
"options": {}
},
"id": "plays-respond",
"name": "Respond",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
440,
0
]
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Count",
"type": "main",
"index": 0
}
]
]
},
"Count": {
"main": [
[
{
"node": "Respond",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
}
}