paroki.org Open ↗ Has Plan
49
DOM 68 PLN 79 REV 10 EAS 30
BUILD-MEMORY.md ×
CLAUDE.md ×
GEMINI-SCRAPE-TASK.md ×
SESSION-NOTES.md ×
indonesian-catholic-churches-wikimedia.json ×
package-lock.json ×
package.json ×
plan.md
PREVIEW

paroki.org — Status & Plan

CURRENT STATUS: LIVE — SEO FARM ACTIVE

DO NOT overwrite this site with a parking/for-sale page or domain-portfolio Worker route. This domain has a fully deployed website with 441 programmatic SEO pages.

Live Deployment

  • CF Pages project: paroki-org
  • CF Workers: paroki-subdomain (*.paroki.org), paroki-scrape-proxy
  • D1: paroki-org (2c65e87b-0e7a-450e-a2fe-7d7a87ee118b) — 2,224 parishes
  • Custom domains: paroki.org, www.paroki.org, *.paroki.org
  • Theme: Marian Blue (#1a4b8c) + Gold (#c89a3b)
  • Architecture: 100% Cloudflare (Pages + Functions + D1 + R2 + KV + Workers AI)

What's Built (as of 2026-04-26)

SEO Farm: 649 Pages (updated 2026-05-01)

Category Pages Target Keywords
City church listings 192 "gereja katolik di {kota}"
Mass schedule pages 180 "jadwal misa {kota}"
Christmas 2026 pages 62 "misa natal {kota} 2026"
Easter 2027 pages 62 "misa paskah {kota} 2027"
Ash Wednesday 2027 pages 62 "rabu abu {kota} 2027"
Keuskupan pages 30 "keuskupan {nama}"
Katedral pages 38 "katedral di {kota}"
Kerasulan awam org pages 11 "legio maria", "wkri", "omk", etc.
Content pages 7 "doa katolik", "sakramen", "pernikahan katolik", "nama santo santa"
Core pages 5 homepage, browse, tentang, terms, 404

SEO Infrastructure

  • 100% SEO score on all pages (FAQPage + BreadcrumbList JSON-LD, OG, canonical)
  • Dynamic OG images with church photos (/og-image endpoint)
  • Share FAB on all pages (native share + WhatsApp + copy)
  • 437 URLs in sitemap-pages.xml, submitted to GSC
  • IndexNow submitted to Bing/Yandex (all pages)
  • Homepage: 192 internal links
  • llms.txt + llms-full.txt for AI discoverability
  • Dark mode + reduced motion CSS
  • Security headers (X-Frame-Options, Permissions-Policy)
  • Rate limiting on comments/feedback APIs
  • Skip-to-content accessibility link

D1 Data Quality

  • 2,224 profiles (71 duplicates merged, 72 new added)
  • 1,856 coordinates (86%) — backfilled + 517 shared coords spread
  • 1,000 mass schedules (46%)
  • 217 junk website URLs cleaned
  • 20 verified parish websites remain
  • Regina Caeli PIK: fully enriched from parokipik.org

Research Data (not yet in D1)

  • /data/kerasulan-awam-research.json — 27 organizations, 18 parishes, 8 national offices
  • /data/kerasulan-awam-scraped-batch2.json — 125 org entries, 26 parishes, 3 diocesan registries
  • Top orgs: Legio Maria (22 parishes), WKRI (18), PDPKK (16), ME (14), KTM (10)

GSC Performance (as of 2026-04-26)

  • Homepage indexed, crawled April 22
  • Position 3 for "paroki terdekat", position 9 for "gereja paroki"
  • 21 impressions, 0 clicks (site is new, programmatic pages not yet indexed)
  • Sitemap re-submitted with 437 URLs

Backlinks

  • beasiswa.net: footer link (1,800+ page instances) + 3 contextual articles + "beasiswa-katolik" keyword page
  • Other portfolio sites: pending flio.net integration

NEXT: Phase 2 — Engagement & Data Depth

Priority 1: Daily Liturgical Readings — DONE (2026-05-01)

  • Bahtera.net widget on all subdomain beranda pages (Service Binding, 4hr KV cache)
  • Shows today's saint/feast, liturgical color background, readings, links to bahtera.net
  • Service Binding BAHTERA → bahtera-net worker (bypasses CF WAF 403 on cross-worker fetch)
  • English Bible data (34 translations) archived in bahtera R2 at bible-en/
  • Lectionary JSONs (Year A/B/C, weekday cycles, sanctorum) archived at lectionary/
  • Old liturgi/ prototype removed (was 12GB, superseded by bahtera.net)
  • Add bahtera widget to paroki.org static homepage (client-side fetch, already deployed)

Priority 2: Parish Organization Data in D1 — DONE (2026-05-01)

  • Created parish_organizations table in D1
  • Imported 232 org-parish mappings for 25 parishes (deduped from 281)
  • Enriched master CSV: images 10% → 59%, WA +8 promoted
  • Add org listings to subdomain parish profiles (UI) — grouped by category with icons
  • Fixed parish_key → subdomain_slug mismatch, flushed KV cache
  • Build per-city org pages: "Legio Maria di Jakarta", "WKRI di Surabaya"
  • Scrape remaining parishes via CF Worker cron (batch 50/day)

Priority 3: More Mass Schedule Scraping — PARTIAL (2026-05-01)

  • 43% have mass schedules — biggest data gap
  • Monthly cron job: tools/refresh_mass_schedules.sh (1st of each month, 3 AM)
  • Full pipeline: scrape jadwalmisa.id → CSV → SQL → D1 import → regenerate → deploy
  • "Misa Hari Ini" server-rendered widget on subdomain beranda
  • Parish HTML files (5 in source/parish-html/) are not parseable — JS-rendered schedules
  • Target: scrape all 20 verified parish websites monthly (needs headless browser)

Priority 4: Parish Self-Service — DONE (2026-05-01)

  • WA bot claim flow: 4-step conversation via /api/wa-chat (name → role → email → submit)
  • Admin approval/rejection via WA commands (approve/reject)
  • parish_claims + claim_flows tables in D1
  • Admin dashboard on subdomain /admin (login + content edit UI)
  • OTP authentication via WA relay (6-digit code, 5min expiry, 3 attempts max)
  • Content editing API (schedules, contacts, bank info)
  • Session management via KV (24hr TTL, HttpOnly secure cookies)
  • Admin link on kontak page ("Kelola halaman gereja ini")
  • D1 schema: added bank_name, bank_holder columns

Priority 5: Cross-Site SEO Network — DONE (2026-05-01)

  • paroki.org registered on flio.net (3,635 pages indexed, auto-crawled every 6h)
  • Editorial "Baca Juga" links on all 544 programmatic pages (build-time static injection)
  • API key: lx_kkb7n37p11qgllnfq9zxmrld4n44axdv
  • Build themed article series: "Gereja Bersejarah di Indonesia"
  • Get listed on kaj.or.id, keuskupan websites

Priority 6: Seasonal Content — DONE (2026-05-01)

  • 62 "misa natal {kota} 2026" pages
  • 62 "misa paskah {kota} 2027" pages (Easter: 28 Maret 2027)
  • 62 "rabu abu {kota} 2027" pages (Rabu Abu: 10 Februari 2027)
  • FAQPage + BreadcrumbList JSON-LD, cross-links between seasonal pages
  • Homepage promo sections for all 3 seasonal events
  • Dynamic OG images on all seasonal pages
  • IndexNow submitted for all 124 new seasonal URLs
  • Update Christmas pages with actual parish-specific schedules in Dec 2026

Important Notes

  • If a domain-portfolio or parking Worker route is added to this zone, it will override the real site
  • This site is NOT for sale — it has an active implementation
  • Static data files (profiles.json, profiles-geo.json) must be regenerated when D1 data changes significantly
  • Always purge CF zone cache after deploys
  • Updated: 2026-04-26

⚙ HARD CONSTRAINTS (enforced for all sites)

This domain MUST operate within these constraints — no exceptions:

  • 100% Cloudflare serverless — Workers + D1 + R2 + KV + Workers AI + Vectorize. NEVER PM2, NEVER VPS, NEVER Docker in production path.
  • 100% AI-automated — every customer interaction, every moderation decision, every transaction reconcile = AI. No manual queue, no live human chat support, no physical fulfillment.
  • 1-operator solo — one person can run the entire operation from a phone. No team meetings, no shared inbox, no shift rotation.
  • WhatsApp AI bot for all support (24/7, instant response, no SLA promises that need humans).
  • Mayar QRIS for all Indonesian payments (subscription auto-renew, no manual invoicing).
  • Indonesian UI primary — bahasa-first, English fallback only where unavoidable.
  • Privacy — opt-in only, delete-on-request honored within 24h (cron-driven).
  • No physical goods, no inventory — digital products + affiliate referrals only.

If the plan above describes any flow that violates these constraints, treat the plan as ASPIRATIONAL only and rework before building. The constraint trifecta wins.

AI ASSISTANT

Ask AI to research, improve, or generate content.

Try: "Research competitors for this niche"

Actions