尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Singlebörse(n) Dich-mit-Stich - für tätowierte Singles
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Headless-Frontend für dich-mit-stich.de, .at und .ch. Alle Inhalte (Magazin, Seiten, Autoren, Tattoo-Singles-Stadtseiten) liegen als Dateien im Repo, WordPress wird nicht mehr abgefragt; Legacy-/ICONY-Ziele bleiben für Login und Registrierung zuständig.
Seit 2026-10-02 liest die App keine WordPress-REST-API mehr, weder zur Laufzeit noch beim Build:
| Inhalt | Ort |
|---|---|
| Beiträge (54) | content/magazin/beitraege/<slug>.md (Frontmatter + HTML; SEO-Titel/Description aus AIOSEO in seoTitle/description) |
| Seiten (67, u. a. Hubs, Motiv-Lexikon, Autorenprofile) | content/magazin/seiten/<slug>.md |
| Tattoo-Singles-Stadtseiten (36) | content/staedte/<markt>-<stadt>.md |
| Kategorien, Autoren | data/magazin-kategorien.json, data/magazin-autoren.json |
| Bilder, Audio | public/magazin/wp-content/uploads/… (Pfad wie früher in WordPress; Auslieferung vom Asset-Host) |
| WordPress-Slug-Inventar (Stand 2026-10-02) | data/wordpress-inventar.json |
Loader: lib/magazine.ts (Abfrage-API), lib/magazine-text.ts (Typen, Textwerkzeuge), lib/magazine-content.ts, lib/city-pages.ts. Die Breadcrumb-Ebene unter /magazin/piercingarten und /magazin/tattoo-lexikon ergibt sich aus der Linkliste der jeweiligen Hub-Seite in content/magazin/seiten/. Neuer Beitrag = Datei anlegen, committen, pushen. Audio-Zusammenfassungen: node --env-file=.env.local scripts/audio-summaries.mjs <texte.json> --write.
Die Einmalwerkzeuge der Ablösung stehen in scripts/export-wordpress.mjs, scripts/download-wp-uploads.mjs, scripts/import-wordpress.mjs, der Vorher/Nachher-Vergleich in scripts/crawl-routes.mjs und scripts/compare-routes.mjs; die alten WordPress-Schreibskripte liegen unter archiv/wordpress-abloesung/. Nach redaktionellen Korrekturen den Import nicht erneut laufen lassen.
ICONY (Heiko Grossmann) liest auf den Plattform-Startseiten drei Magazin-Teaser im WP-Format. Der Endpunkt wird aus den
Magazin-Beiträgen erzeugt (lib/wp-rest-compat.ts, app/cms-mag/wp-json/…, app/magazin/wp-json/…, Umleitung von ?rest_route= in proxy.ts):
https://dich-mit-stich.de/cms-mag/wp-json/wp/v2/posts?per_page=3&_embed=1 und gleichwertig /magazin/wp-json/wp/v2/posts
(außerdem /posts/<id>, /categories, /tags, /media/<id>)…/cms-mag/?rest_route=/wp/v2/posts und …/cms-mag/index.php?rest_route=/wp/v2/posts (ebenso unter /magazin/)per_page, page, _embed, _fields, orderby, order, categories, slug, search, include, after/before;
Header X-WP-Total, X-WP-TotalPages, CORS *, Cache-Control; OPTIONS/HEAD.content/magazin/beitraege). Keine Seiten (Hubs, Lexikon, Autorenprofile), keine Tattoo-Studios oder Städte,
kein /wp/v2/users (404), author nur als ID, kein _embedded.author. link ist die Live-URL https://dich-mit-stich.de/magazin/<slug>/,
Bild-URLs kommen vom Asset-Host (/app-assets/…)./cms-mag/wp-json/ und /magazin/wp-json/ (außerdem /cms-mag/ bzw. /magazin/ mit rest_route sowie …/index.php) müssen
wie die Seitenrouten an Vercel durchgereicht werden. nginx ruft Vercel mit /de/… auf; beides geht (Slash am Ende wird nicht erzwungen).data/magazin-bilder.json; nach neuen Titelbildern node scripts/build-magazine-image-sizes.mjs ausführen.| Vercel-Pfad | Öffentliche Domain | Status |
|---|---|---|
/de/... | https://dich-mit-stich.de/... | Inhalte aktiv |
/at/... | https://dich-mit-stich.at/... | Bereitschaftsseite, noindex |
/ch/... | https://dich-mit-stich.ch/... | 10 Tattoo-Stadtseiten aktiv; übrige Bereiche noindex |
proxy.ts setzt die Trennung zwischen internen Vercel-Pfaden und öffentlichen Reverse-Proxy-URLs um:
/magazin → permanenter Redirect auf /de/magazin/de/magazin → internes Rewrite auf den bestehenden DE-Contentbaum/at/... und nicht freigegebene /ch/...-Pfade → sichere Markt-Platzhalter/ch/tattoo-singles und die 10 importierten CH-Städte → eigener statischer CH-Contentbaum/_next/image und APIs bleiben unberührtÖffentliche Canonicals sind immer präfixlos auf der Landesdomain. Interne Contentlinks bleiben ebenfalls präfixlos, damit Reverse-Proxy-Besucher auf ihrer Landesdomain bleiben.
Zentrale Konfiguration: lib/markets.ts
npm install
npm run dev
Danach insbesondere prüfen:
http://localhost:3000/ → /dehttp://localhost:3000/de/magazinhttp://localhost:3000/at/magazinhttp://localhost:3000/ch/tattoo-singles/berlinhttp://localhost:3000/de/robots.txthttp://localhost:3000/ch/sitemap.xmlnpm test
npm run lint
npx tsc --noEmit
npm run build
Die Marktrouting-Verträge liegen in tests/market-routing.test.mjs. Die CH-Stadtseiten werden als geprüfter Snapshot aus ICONY importiert:
npm run import:cities:ch
Der Import erwartet exakt zehn freigegebene Städte, speichert die Bilder lokal unter public/cities/ch/ und verändert unveränderte Dateien nicht.
/tattoo-singles/contest/ (nur DE): Teilnehmende laden ein Foto zu Vercel Blob hoch, die Redaktion gibt unter
/tattoo-singles/contest/admin/ frei, Besucher stimmen einmal am Tag je Beitrag ab. Daten liegen in Neon Postgres
(Vercel-Marktplatz), Zugriff über lib/contest/*; Einrichtung der Env-Variablen (DATABASE_URL, BLOB_READ_WRITE_TOKEN,
CONTEST_SECRET, CONTEST_ADMIN_TOKEN) und Betrieb in docs/contest.md. Tabellen anlegen:
npm run contest:migrate
Ohne konfigurierte Env-Variablen zeigen Hub und Formular einen „startet in Kürze“-Hinweis; Tests laufen gegen PGlite.
In Netzen mit Fortinet oder vergleichbarer TLS-Inspection darf die Zertifikatsprüfung nicht deaktiviert werden. Die kontrolliert verifizierte öffentliche Unternehmens-/Appliance-CA wird nur lokal eingebunden:
NODE_EXTRA_CA_CERTS="/absoluter/pfad/zur/ca.pem" npm run build
CA-Dateien und lokale Diagnoseartefakte sind nicht Teil des Repositories.
Die vollständige Architektur- und Reverse-Proxy-Checkliste liegt im Obsidian-Vault:
08 Playbooks/Mehrmarkt- und Sprachlogik – ein CMS, mehrere Länder sauber ausspielen.md04 CMS + WordPress + ICONY/dich-mit-stich.de – Next.js-Vercel-Migration.md