OpportunitiesEntities
Docs
    Ring Platform

    Dezentralisierte selbstbauende Zukunft

    Anmelden
    Entities
    Opportunities
    Store
    Docs
    Plattformkonzepte
    RING ÖkonomieSonoratek LLCGlobaler ImpactKI trifft Web3
    Loslegen
    SchnellstartKalkulatorRoadmap
    Datenschutz|Kontakt
    v1.104.26|Sonoratek LLC

    Documentation

    Konzepte, Nutzen und typische Clone-Szenarien — weniger Code.

    Erste Schritte
    Voraussetzungen
    Installation
    Validierung des ersten Erfolgs
    Nächste Schritte
    Funktionen
    Mitglieder-Blogs
    Anpassung
    Ringization playbook
    Deployment
    Selbst gehostetes Deployment
    Architektur
    News-Kingdom-Architektur
    Entwicklung
    OSS und Enterprise

    Schnelleinstieg (CTOs · Auditoren · Agenten)

    Willkommen — Mission & Zielgruppen
    Schnellreferenz
    Erste Schritte
    Architektur & Auth.js
    Backend-Modi & Datenbanken (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Sicherheit & Compliance
    ringdom.org — LegioX-Homebase
    Quellcode — MIT-Lizenz (GitHub)

    Documentation

    Konzepte, Nutzen und typische Clone-Szenarien — weniger Code.

    Erste Schritte
    Voraussetzungen
    Installation
    Validierung des ersten Erfolgs
    Nächste Schritte
    Funktionen
    Mitglieder-Blogs
    Anpassung
    Ringization playbook
    Deployment
    Selbst gehostetes Deployment
    Architektur
    News-Kingdom-Architektur
    Entwicklung
    OSS und Enterprise

    Schnelleinstieg (CTOs · Auditoren · Agenten)

    Willkommen — Mission & Zielgruppen
    Schnellreferenz
    Erste Schritte
    Architektur & Auth.js
    Backend-Modi & Datenbanken (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Sicherheit & Compliance
    ringdom.org — LegioX-Homebase
    Quellcode — MIT-Lizenz (GitHub)

    Documentation

    Konzepte, Nutzen und typische Clone-Szenarien — weniger Code.

    Erste Schritte
    Voraussetzungen
    Installation
    Validierung des ersten Erfolgs
    Nächste Schritte
    Funktionen
    Mitglieder-Blogs
    Anpassung
    Ringization playbook
    Deployment
    Selbst gehostetes Deployment
    Architektur
    News-Kingdom-Architektur
    Entwicklung
    OSS und Enterprise

    Schnelleinstieg (CTOs · Auditoren · Agenten)

    Willkommen — Mission & Zielgruppen
    Schnellreferenz
    Erste Schritte
    Architektur & Auth.js
    Backend-Modi & Datenbanken (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Sicherheit & Compliance
    ringdom.org — LegioX-Homebase
    Quellcode — MIT-Lizenz (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    News-Kingdom-Architektur

    Nutze die Tabs Gründer / Entwickler in der Seitenleiste der Dokumentation, um diese Seite zu filtern. Gründer sehen den Geschäftsablauf und die Stellschrauben für Betreiber. Entwickler sehen die Services, Routen, Umgebungsvariablen und einen lokalen Testlauf.

    News Kingdom ist die Promotion-Schicht über dem News-Modul von Ring. Mitglieder mit der Rolle member oder höher schreiben Artikel, die in ihrem persönlichen Bereich unter /{username}/{slug} liegen. Danach kann ein Autor einen Platz im Haupt-Feed /news beantragen. Ring bewertet den Artikel, verlangt vom Autor einen Preis, der sich nach dieser Bewertung richtet, und schickt ihn an die Plattform-Admins in Telegram, die endgültig Ja oder Nein sagen.

    Jede Promotion-Anfrage durchläuft ein einziges Feld des Artikels, mainPageStatus:

    PhaseWas passiertmainPageStatus
    EinreichenDer Autor beantragt einen Platz auf der Startseitesubmitted
    BewertenKI oder Heuristik bewertet Ethik, Spam, Duplikate und Qualitätai_scored
    Harte SperreEthik zu niedrig, Spam- oder Duplikatrisiko zu hochpublished_blog_only
    CheckoutDer Preis steht fest und ein PaymentConductor-Checkout öffnet sichpayment_pending
    BezahltDer Webhook bestätigt die Zahlung, die Admins erhalten eine Telegram-Karteawaiting_admin_approval
    FreigegebenDer Artikel erscheint seitenweit im Haupt-Feedpublished_main
    AbgelehntEin Admin lehnt ab. Der Artikel bleibt im Blog des Autorsrejected

    Warum das für deinen Klon wichtig ist

    • Mitglieder liefern die Inhalte und bezahlen für Reichweite. Du betreibst eine Zeitung, ohne eine Redaktion einzustellen. Autoren, die auf die Titelseite wollen, zahlen dafür, und die letzte redaktionelle Entscheidung bleibt bei dir.
    • Schlechtes wird zuerst aussortiert. Spam, Duplikate und Beiträge mit niedriger Ethik werden durch die Bewertung gestoppt, bevor jemand zahlt und bevor ein Admin Zeit damit verbringt.
    • Du gibst vom Smartphone aus frei. Jede bezahlte Einreichung erreicht deine Admins als Telegram-Nachricht mit den Buttons Approve, Reject, View und Counter.
    • Gute Storys zahlen sich aus. Wenn ein Admin eine von einem Mitglied geschriebene Story freigibt, stellt Ring eine Prämiengutschrift für den Autor in die Warteschlange und startet Übersetzungen in deine anderen Sprachen.

    Mitglieder-Blogs

    Wo der Artikel vor der Promotion liegt: die persönliche URL des Autors.

    News-Modul

    Der Haupt-Feed, Kategorien, Likes und der Editor, den Autoren nutzen.

    Modulübersicht (geprüft in ring/web)

    BereichPfad
    Zustandsautomat, Audit, Freigabe und Ablehnungfeatures/news/services/news-promotion-workflow.ts
    OpenRouter-Bewertung und Preisfeatures/news/services/news-scoring-service.ts
    Duplikat-Heuristikfeatures/news/services/news-duplicate-check.ts
    Checkout-Fassade (purpose: 'news_promotion')features/news/services/news-payment-service.ts
    Webhook-Handler für Zahlungenlib/payments/conductor/handlers/news-promotion.ts, news-promotion-paypal.ts
    Admin-Karte und Tastatur in Telegramfeatures/news/services/news-telegram-approval.ts
    Verarbeitung von Telegram-Callbacks (eingebunden über )

    Bekannte Lücken

    Verwandte Dokumentation

    Related documentation

    Member Blogs

    Gleicher Ablauf: wo der Artikel vor und nach einer Promotion-Anfrage liegt.

    News Module

    Voraussetzung: das News-Modul, der Editor und der Haupt-Feed, in den News Kingdom befördert.

    PaymentConductor architecture

    Abhängigkeit: wie der news_promotion-Checkout und seine Webhooks geroutet werden.

    Manage via Telegram

    Siehe auch: der Admin-Bot mit den Buttons Approve, Reject und Counter.

    1. Docs
    2. /Architektur
    3. /News-Kingdom-Architektur

    Aktualisiert 1. Okt. 20266 Min. Anhören

    News-Kingdom-Architektur

    Nutze die Tabs Gründer / Entwickler in der Seitenleiste der Dokumentation, um diese Seite zu filtern. Gründer sehen den Geschäftsablauf und die Stellschrauben für Betreiber. Entwickler sehen die Services, Routen, Umgebungsvariablen und einen lokalen Testlauf.

    News Kingdom ist die Promotion-Schicht über dem News-Modul von Ring. Mitglieder mit der Rolle member oder höher schreiben Artikel, die in ihrem persönlichen Bereich unter /{username}/{slug} liegen. Danach kann ein Autor einen Platz im Haupt-Feed /news beantragen. Ring bewertet den Artikel, verlangt vom Autor einen Preis, der sich nach dieser Bewertung richtet, und schickt ihn an die Plattform-Admins in Telegram, die endgültig Ja oder Nein sagen.

    Jede Promotion-Anfrage durchläuft ein einziges Feld des Artikels, mainPageStatus:

    PhaseWas passiertmainPageStatus
    EinreichenDer Autor beantragt einen Platz auf der Startseitesubmitted
    BewertenKI oder Heuristik bewertet Ethik, Spam, Duplikate und Qualitätai_scored
    Harte SperreEthik zu niedrig, Spam- oder Duplikatrisiko zu hochpublished_blog_only
    CheckoutDer Preis steht fest und ein PaymentConductor-Checkout öffnet sichpayment_pending
    BezahltDer Webhook bestätigt die Zahlung, die Admins erhalten eine Telegram-Karteawaiting_admin_approval
    FreigegebenDer Artikel erscheint seitenweit im Haupt-Feedpublished_main
    AbgelehntEin Admin lehnt ab. Der Artikel bleibt im Blog des Autorsrejected

    Warum das für deinen Klon wichtig ist

    • Mitglieder liefern die Inhalte und bezahlen für Reichweite. Du betreibst eine Zeitung, ohne eine Redaktion einzustellen. Autoren, die auf die Titelseite wollen, zahlen dafür, und die letzte redaktionelle Entscheidung bleibt bei dir.
    • Schlechtes wird zuerst aussortiert. Spam, Duplikate und Beiträge mit niedriger Ethik werden durch die Bewertung gestoppt, bevor jemand zahlt und bevor ein Admin Zeit damit verbringt.
    • Du gibst vom Smartphone aus frei. Jede bezahlte Einreichung erreicht deine Admins als Telegram-Nachricht mit den Buttons Approve, Reject, View und Counter.
    • Gute Storys zahlen sich aus. Wenn ein Admin eine von einem Mitglied geschriebene Story freigibt, stellt Ring eine Prämiengutschrift für den Autor in die Warteschlange und startet Übersetzungen in deine anderen Sprachen.

    Mitglieder-Blogs

    Wo der Artikel vor der Promotion liegt: die persönliche URL des Autors.

    News-Modul

    Der Haupt-Feed, Kategorien, Likes und der Editor, den Autoren nutzen.

    Modulübersicht (geprüft in ring/web)

    BereichPfad
    Zustandsautomat, Audit, Freigabe und Ablehnungfeatures/news/services/news-promotion-workflow.ts
    OpenRouter-Bewertung und Preisfeatures/news/services/news-scoring-service.ts
    Duplikat-Heuristikfeatures/news/services/news-duplicate-check.ts
    Checkout-Fassade (purpose: 'news_promotion')features/news/services/news-payment-service.ts
    Webhook-Handler für Zahlungenlib/payments/conductor/handlers/news-promotion.ts, news-promotion-paypal.ts
    Admin-Karte und Tastatur in Telegramfeatures/news/services/news-telegram-approval.ts
    Verarbeitung von Telegram-Callbacks (eingebunden über )

    Bekannte Lücken

    Verwandte Dokumentation

    Related documentation

    Member Blogs

    Gleicher Ablauf: wo der Artikel vor und nach einer Promotion-Anfrage liegt.

    News Module

    Voraussetzung: das News-Modul, der Editor und der Haupt-Feed, in den News Kingdom befördert.

    PaymentConductor architecture

    Abhängigkeit: wie der news_promotion-Checkout und seine Webhooks geroutet werden.

    Manage via Telegram

    Siehe auch: der Admin-Bot mit den Buttons Approve, Reject und Counter.

    1. Docs
    2. /Architektur
    3. /News-Kingdom-Architektur

    Aktualisiert 1. Okt. 20266 Min. Anhören

    News-Kingdom-Architektur

    Nutze die Tabs Gründer / Entwickler in der Seitenleiste der Dokumentation, um diese Seite zu filtern. Gründer sehen den Geschäftsablauf und die Stellschrauben für Betreiber. Entwickler sehen die Services, Routen, Umgebungsvariablen und einen lokalen Testlauf.

    News Kingdom ist die Promotion-Schicht über dem News-Modul von Ring. Mitglieder mit der Rolle member oder höher schreiben Artikel, die in ihrem persönlichen Bereich unter /{username}/{slug} liegen. Danach kann ein Autor einen Platz im Haupt-Feed /news beantragen. Ring bewertet den Artikel, verlangt vom Autor einen Preis, der sich nach dieser Bewertung richtet, und schickt ihn an die Plattform-Admins in Telegram, die endgültig Ja oder Nein sagen.

    Jede Promotion-Anfrage durchläuft ein einziges Feld des Artikels, mainPageStatus:

    PhaseWas passiertmainPageStatus
    EinreichenDer Autor beantragt einen Platz auf der Startseitesubmitted
    BewertenKI oder Heuristik bewertet Ethik, Spam, Duplikate und Qualitätai_scored
    Harte SperreEthik zu niedrig, Spam- oder Duplikatrisiko zu hochpublished_blog_only
    CheckoutDer Preis steht fest und ein PaymentConductor-Checkout öffnet sichpayment_pending
    BezahltDer Webhook bestätigt die Zahlung, die Admins erhalten eine Telegram-Karteawaiting_admin_approval
    FreigegebenDer Artikel erscheint seitenweit im Haupt-Feedpublished_main
    AbgelehntEin Admin lehnt ab. Der Artikel bleibt im Blog des Autorsrejected

    Warum das für deinen Klon wichtig ist

    • Mitglieder liefern die Inhalte und bezahlen für Reichweite. Du betreibst eine Zeitung, ohne eine Redaktion einzustellen. Autoren, die auf die Titelseite wollen, zahlen dafür, und die letzte redaktionelle Entscheidung bleibt bei dir.
    • Schlechtes wird zuerst aussortiert. Spam, Duplikate und Beiträge mit niedriger Ethik werden durch die Bewertung gestoppt, bevor jemand zahlt und bevor ein Admin Zeit damit verbringt.
    • Du gibst vom Smartphone aus frei. Jede bezahlte Einreichung erreicht deine Admins als Telegram-Nachricht mit den Buttons Approve, Reject, View und Counter.
    • Gute Storys zahlen sich aus. Wenn ein Admin eine von einem Mitglied geschriebene Story freigibt, stellt Ring eine Prämiengutschrift für den Autor in die Warteschlange und startet Übersetzungen in deine anderen Sprachen.

    Mitglieder-Blogs

    Wo der Artikel vor der Promotion liegt: die persönliche URL des Autors.

    News-Modul

    Der Haupt-Feed, Kategorien, Likes und der Editor, den Autoren nutzen.

    Modulübersicht (geprüft in ring/web)

    BereichPfad
    Zustandsautomat, Audit, Freigabe und Ablehnungfeatures/news/services/news-promotion-workflow.ts
    OpenRouter-Bewertung und Preisfeatures/news/services/news-scoring-service.ts
    Duplikat-Heuristikfeatures/news/services/news-duplicate-check.ts
    Checkout-Fassade (purpose: 'news_promotion')features/news/services/news-payment-service.ts
    Webhook-Handler für Zahlungenlib/payments/conductor/handlers/news-promotion.ts, news-promotion-paypal.ts
    Admin-Karte und Tastatur in Telegramfeatures/news/services/news-telegram-approval.ts
    Verarbeitung von Telegram-Callbacks (eingebunden über )

    Bekannte Lücken

    Verwandte Dokumentation

    Related documentation

    Member Blogs

    Gleicher Ablauf: wo der Artikel vor und nach einer Promotion-Anfrage liegt.

    News Module

    Voraussetzung: das News-Modul, der Editor und der Haupt-Feed, in den News Kingdom befördert.

    PaymentConductor architecture

    Abhängigkeit: wie der news_promotion-Checkout und seine Webhooks geroutet werden.

    Manage via Telegram

    Siehe auch: der Admin-Bot mit den Buttons Approve, Reject und Counter.

    1. Docs
    2. /Architektur
    3. /News-Kingdom-Architektur

    Aktualisiert 1. Okt. 20266 Min. Anhören

    PaymentConductor

    Der Checkout, der die Promotion-Gebühr über deinen konfigurierten Zahlungsanbieter abrechnet.

    Verwaltung über Telegram

    Der Admin-Bot mit den Freigabe-Buttons.

    Vom Mitglieder-Blog zur Startseite

    Typische Szenarien

    1. Lokalzeitung. Ein Stadt-Klon lässt lokale Mitglieder in ihren Blogs posten und verlangt eine kleine Gebühr für Storys auf der Titelseite. Die Admins geben die besten in Telegram frei.
    2. Expertennetzwerk. Ein Fach-Klon hält die Qualitätsmesslatte hoch: starke Artikel bekommen einen niedrigen Preis, schwache werden durch den Preis ausgeschlossen.
    3. Moderierter Kampagnen-Hub. Ein Klon einer Bewegung setzt auf die Regeln der harten Sperre, damit Spam nie die Admin-Warteschlange erreicht.

    Stellschrauben für Betreiber

    Du legst die Preise in UAH über Server-Umgebungsvariablen fest. Wenn du sie nicht setzt, gelten diese Standardwerte:

    EinstellungStandardWirkung
    Grundpreis50 UAHMindestpreis für einen Artikel mit hoher Qualität
    Skala2000 UAHWie stark der Preis steigt, wenn die Qualität sinkt
    Maximum5000 UAHPreisobergrenze
    Untergrenze für niedrige QualitätQualität unter 0.25Der Preis wird auf mindestens 4999 UAH angehoben
    Gegenangebot des Admins+25%Der Telegram-Button Counter legt einen neuen Betrag fest, den der Autor zahlen muss
    lib/telegram/admin-bot/news-callback-handler.ts
    app/api/telegram/admin-bot/webhook/route.ts
    Promotion-UI für Mitgliederfeatures/news/components/news-promotion-panel.tsx auf /my-news
    Status- und Feldtypenfeatures/news/types/index.ts (MainPageStatus, NewsContentType, NewsVisibility)
    JSONB-Zeilen-Mapperlib/news/map-news-document.ts
    Branding und absolute URLslib/site-branding.ts (localeBlogArticleUrl, absoluteSiteUrl)

    Routen

    Methode und PfadAuthentifizierungZweck
    POST /api/news/promotion/submitSession, nur der Autor des ArtikelsSetzt promoteToMainPage, bewertet, öffnet den Checkout
    PATCH /api/news/promotion/submitHeader x-news-promotion-secretDev oder Test: als bezahlt markieren und Admins benachrichtigen
    POST /api/payments/{wayforpay,stripe,paypal}/webhookSignatur des ZahlungsanbietersKanonische Zahlungsbestätigung
    POST /api/news/promotion/wayforpay-webhookPayload des ZahlungsanbietersVeraltete Weiterleitung an den kanonischen WayForPay-Webhook
    POST /api/mcp/v1/news/[id]/{score,approve,reject,publish}Service-Token (withMcpGuard)Agenten- und MCP-Operationen auf demselben Workflow

    Bewertungsregeln

    scoreNewsForMainPage() ruft OpenRouter auf, wenn OPENROUTER_API_KEY gesetzt ist. Ohne Schlüssel bleiben die heuristischen Standardwerte (ethics 0.7, spam 0.2, merit 0.5) bestehen und es wird model: 'heuristic' gespeichert.

    • Duplikatrisiko: 0.95, wenn ein anderer Artikel denselben slug oder siteWideSlug hat. 0.9, wenn ein veröffentlichter Artikel (unter den ersten 200) denselben Titel hat.
    • Harte Sperre: ethics < NEWS_ETHICS_MIN oder spamRisk > NEWS_SPAM_MAX oder duplicateRisk > NEWS_DUPLICATE_MAX. Ergebnis: published_blog_only und kein Checkout.
    • Preis: clamp(base, max, base + (1 - merit) * scale). Eine Qualität unter NEWS_MERIT_SOFT_REJECT hebt den Preis auf mindestens 4999 an. Niedrige Qualität ändert den Status nicht.

    Umgebungsvariablen

    Keiner der NEWS_*-Schlüssel steht in env.local.template. Der Code liest sie mit diesen Standardwerten.

    VariableStandardGelesen in
    NEWS_PROMO_BASE_UAH / NEWS_PROMO_SCALE_UAH / NEWS_PROMO_MAX_UAH50 / 2000 / 5000news-scoring-service.ts
    NEWS_ETHICS_MIN / NEWS_SPAM_MAX / NEWS_DUPLICATE_MAX0.35 / 0.85 / 0.9news-scoring-service.ts
    NEWS_MERIT_SOFT_REJECT0.25Bewertung und Workflow
    OPENROUTER_API_KEY, OPENROUTER_MODEL_PRIMARY, OPENROUTER_MODEL_FALLBACKnicht gesetztnews-scoring-service.ts
    PAYMENT_NEWS_PROCESSORfällt auf PAYMENT_DEFAULT_PROCESSOR zurück, dann auf wayforpaylib/payments/payment.config.ts
    NEWS_PROMOTION_WEBHOOK_SECRETnicht gesetztPATCH /api/news/promotion/submit
    ADMIN_BOT_TOKENnicht gesetztAntworten auf Telegram-Callbacks

    Daten

    Alle vier Tabellen nutzen das JSONB-Dokumentmodell (id, data jsonb, Zeitstempel) in data/schema.sql (abgeflacht, v4.1.0): news, news_categories, news_likes, news_submission_audit. Jeder Übergang hängt einen Eintrag an data.mainPageStatusHistory an und schreibt eine Zeile in news_submission_audit. data/migrations/002_news_content_schema.sql und 003_news_kingdom_upgrade.sql sind historisch. Neuinstallationen wenden nur schema.sql an.

    Nebenwirkungen der Freigabe

    approveMainPagePublication() setzt status: 'published' und visibility: 'site-wide'. Bei von Nutzern verfassten Storys stellt es anschließend enqueueRewardCreditAddEvent({ trigger: 'newsStoryApproved' }) in die Warteschlange und startet generateArticleTranslations(). Empfänger in Telegram sind Nutzer mit einer Plattform-Admin-Rolle und einer communication.telegramId.

    Lokaler Testlauf

    1. 1

      Schema anwenden und einen Mitgliederartikel anlegen

      Wende data/schema.sql an und melde dich als Nutzer mit der Rolle member oder höher an. Lege unter /news/create einen Artikel an. Er erhält blogUsername und erscheint nach der Veröffentlichung unter /{username}/{slug}.

    2. 2

      Zur Promotion einreichen

      Die Antwort enthält status, aiScore und entweder eine Weiterleitung oder Zahlungsfelder für den Checkout.

    3. 3

      Zahlung in Dev simulieren

    4. 4

      Freigeben

      Drücke Approve auf der Telegram-Karte oder rufe POST /api/mcp/v1/news/<id>/approve mit einem Service-Token auf. Prüfe, dass mainPageStatus den Wert published_main hat und eine Zeile in news_submission_audit existiert.

    PaymentConductor

    Der Checkout, der die Promotion-Gebühr über deinen konfigurierten Zahlungsanbieter abrechnet.

    Verwaltung über Telegram

    Der Admin-Bot mit den Freigabe-Buttons.

    Vom Mitglieder-Blog zur Startseite

    Typische Szenarien

    1. Lokalzeitung. Ein Stadt-Klon lässt lokale Mitglieder in ihren Blogs posten und verlangt eine kleine Gebühr für Storys auf der Titelseite. Die Admins geben die besten in Telegram frei.
    2. Expertennetzwerk. Ein Fach-Klon hält die Qualitätsmesslatte hoch: starke Artikel bekommen einen niedrigen Preis, schwache werden durch den Preis ausgeschlossen.
    3. Moderierter Kampagnen-Hub. Ein Klon einer Bewegung setzt auf die Regeln der harten Sperre, damit Spam nie die Admin-Warteschlange erreicht.

    Stellschrauben für Betreiber

    Du legst die Preise in UAH über Server-Umgebungsvariablen fest. Wenn du sie nicht setzt, gelten diese Standardwerte:

    EinstellungStandardWirkung
    Grundpreis50 UAHMindestpreis für einen Artikel mit hoher Qualität
    Skala2000 UAHWie stark der Preis steigt, wenn die Qualität sinkt
    Maximum5000 UAHPreisobergrenze
    Untergrenze für niedrige QualitätQualität unter 0.25Der Preis wird auf mindestens 4999 UAH angehoben
    Gegenangebot des Admins+25%Der Telegram-Button Counter legt einen neuen Betrag fest, den der Autor zahlen muss
    lib/telegram/admin-bot/news-callback-handler.ts
    app/api/telegram/admin-bot/webhook/route.ts
    Promotion-UI für Mitgliederfeatures/news/components/news-promotion-panel.tsx auf /my-news
    Status- und Feldtypenfeatures/news/types/index.ts (MainPageStatus, NewsContentType, NewsVisibility)
    JSONB-Zeilen-Mapperlib/news/map-news-document.ts
    Branding und absolute URLslib/site-branding.ts (localeBlogArticleUrl, absoluteSiteUrl)

    Routen

    Methode und PfadAuthentifizierungZweck
    POST /api/news/promotion/submitSession, nur der Autor des ArtikelsSetzt promoteToMainPage, bewertet, öffnet den Checkout
    PATCH /api/news/promotion/submitHeader x-news-promotion-secretDev oder Test: als bezahlt markieren und Admins benachrichtigen
    POST /api/payments/{wayforpay,stripe,paypal}/webhookSignatur des ZahlungsanbietersKanonische Zahlungsbestätigung
    POST /api/news/promotion/wayforpay-webhookPayload des ZahlungsanbietersVeraltete Weiterleitung an den kanonischen WayForPay-Webhook
    POST /api/mcp/v1/news/[id]/{score,approve,reject,publish}Service-Token (withMcpGuard)Agenten- und MCP-Operationen auf demselben Workflow

    Bewertungsregeln

    scoreNewsForMainPage() ruft OpenRouter auf, wenn OPENROUTER_API_KEY gesetzt ist. Ohne Schlüssel bleiben die heuristischen Standardwerte (ethics 0.7, spam 0.2, merit 0.5) bestehen und es wird model: 'heuristic' gespeichert.

    • Duplikatrisiko: 0.95, wenn ein anderer Artikel denselben slug oder siteWideSlug hat. 0.9, wenn ein veröffentlichter Artikel (unter den ersten 200) denselben Titel hat.
    • Harte Sperre: ethics < NEWS_ETHICS_MIN oder spamRisk > NEWS_SPAM_MAX oder duplicateRisk > NEWS_DUPLICATE_MAX. Ergebnis: published_blog_only und kein Checkout.
    • Preis: clamp(base, max, base + (1 - merit) * scale). Eine Qualität unter NEWS_MERIT_SOFT_REJECT hebt den Preis auf mindestens 4999 an. Niedrige Qualität ändert den Status nicht.

    Umgebungsvariablen

    Keiner der NEWS_*-Schlüssel steht in env.local.template. Der Code liest sie mit diesen Standardwerten.

    VariableStandardGelesen in
    NEWS_PROMO_BASE_UAH / NEWS_PROMO_SCALE_UAH / NEWS_PROMO_MAX_UAH50 / 2000 / 5000news-scoring-service.ts
    NEWS_ETHICS_MIN / NEWS_SPAM_MAX / NEWS_DUPLICATE_MAX0.35 / 0.85 / 0.9news-scoring-service.ts
    NEWS_MERIT_SOFT_REJECT0.25Bewertung und Workflow
    OPENROUTER_API_KEY, OPENROUTER_MODEL_PRIMARY, OPENROUTER_MODEL_FALLBACKnicht gesetztnews-scoring-service.ts
    PAYMENT_NEWS_PROCESSORfällt auf PAYMENT_DEFAULT_PROCESSOR zurück, dann auf wayforpaylib/payments/payment.config.ts
    NEWS_PROMOTION_WEBHOOK_SECRETnicht gesetztPATCH /api/news/promotion/submit
    ADMIN_BOT_TOKENnicht gesetztAntworten auf Telegram-Callbacks

    Daten

    Alle vier Tabellen nutzen das JSONB-Dokumentmodell (id, data jsonb, Zeitstempel) in data/schema.sql (abgeflacht, v4.1.0): news, news_categories, news_likes, news_submission_audit. Jeder Übergang hängt einen Eintrag an data.mainPageStatusHistory an und schreibt eine Zeile in news_submission_audit. data/migrations/002_news_content_schema.sql und 003_news_kingdom_upgrade.sql sind historisch. Neuinstallationen wenden nur schema.sql an.

    Nebenwirkungen der Freigabe

    approveMainPagePublication() setzt status: 'published' und visibility: 'site-wide'. Bei von Nutzern verfassten Storys stellt es anschließend enqueueRewardCreditAddEvent({ trigger: 'newsStoryApproved' }) in die Warteschlange und startet generateArticleTranslations(). Empfänger in Telegram sind Nutzer mit einer Plattform-Admin-Rolle und einer communication.telegramId.

    Lokaler Testlauf

    1. 1

      Schema anwenden und einen Mitgliederartikel anlegen

      Wende data/schema.sql an und melde dich als Nutzer mit der Rolle member oder höher an. Lege unter /news/create einen Artikel an. Er erhält blogUsername und erscheint nach der Veröffentlichung unter /{username}/{slug}.

    2. 2

      Zur Promotion einreichen

      Die Antwort enthält status, aiScore und entweder eine Weiterleitung oder Zahlungsfelder für den Checkout.

    3. 3

      Zahlung in Dev simulieren

    4. 4

      Freigeben

      Drücke Approve auf der Telegram-Karte oder rufe POST /api/mcp/v1/news/<id>/approve mit einem Service-Token auf. Prüfe, dass mainPageStatus den Wert published_main hat und eine Zeile in news_submission_audit existiert.

    PaymentConductor

    Der Checkout, der die Promotion-Gebühr über deinen konfigurierten Zahlungsanbieter abrechnet.

    Verwaltung über Telegram

    Der Admin-Bot mit den Freigabe-Buttons.

    Vom Mitglieder-Blog zur Startseite

    Typische Szenarien

    1. Lokalzeitung. Ein Stadt-Klon lässt lokale Mitglieder in ihren Blogs posten und verlangt eine kleine Gebühr für Storys auf der Titelseite. Die Admins geben die besten in Telegram frei.
    2. Expertennetzwerk. Ein Fach-Klon hält die Qualitätsmesslatte hoch: starke Artikel bekommen einen niedrigen Preis, schwache werden durch den Preis ausgeschlossen.
    3. Moderierter Kampagnen-Hub. Ein Klon einer Bewegung setzt auf die Regeln der harten Sperre, damit Spam nie die Admin-Warteschlange erreicht.

    Stellschrauben für Betreiber

    Du legst die Preise in UAH über Server-Umgebungsvariablen fest. Wenn du sie nicht setzt, gelten diese Standardwerte:

    EinstellungStandardWirkung
    Grundpreis50 UAHMindestpreis für einen Artikel mit hoher Qualität
    Skala2000 UAHWie stark der Preis steigt, wenn die Qualität sinkt
    Maximum5000 UAHPreisobergrenze
    Untergrenze für niedrige QualitätQualität unter 0.25Der Preis wird auf mindestens 4999 UAH angehoben
    Gegenangebot des Admins+25%Der Telegram-Button Counter legt einen neuen Betrag fest, den der Autor zahlen muss
    lib/telegram/admin-bot/news-callback-handler.ts
    app/api/telegram/admin-bot/webhook/route.ts
    Promotion-UI für Mitgliederfeatures/news/components/news-promotion-panel.tsx auf /my-news
    Status- und Feldtypenfeatures/news/types/index.ts (MainPageStatus, NewsContentType, NewsVisibility)
    JSONB-Zeilen-Mapperlib/news/map-news-document.ts
    Branding und absolute URLslib/site-branding.ts (localeBlogArticleUrl, absoluteSiteUrl)

    Routen

    Methode und PfadAuthentifizierungZweck
    POST /api/news/promotion/submitSession, nur der Autor des ArtikelsSetzt promoteToMainPage, bewertet, öffnet den Checkout
    PATCH /api/news/promotion/submitHeader x-news-promotion-secretDev oder Test: als bezahlt markieren und Admins benachrichtigen
    POST /api/payments/{wayforpay,stripe,paypal}/webhookSignatur des ZahlungsanbietersKanonische Zahlungsbestätigung
    POST /api/news/promotion/wayforpay-webhookPayload des ZahlungsanbietersVeraltete Weiterleitung an den kanonischen WayForPay-Webhook
    POST /api/mcp/v1/news/[id]/{score,approve,reject,publish}Service-Token (withMcpGuard)Agenten- und MCP-Operationen auf demselben Workflow

    Bewertungsregeln

    scoreNewsForMainPage() ruft OpenRouter auf, wenn OPENROUTER_API_KEY gesetzt ist. Ohne Schlüssel bleiben die heuristischen Standardwerte (ethics 0.7, spam 0.2, merit 0.5) bestehen und es wird model: 'heuristic' gespeichert.

    • Duplikatrisiko: 0.95, wenn ein anderer Artikel denselben slug oder siteWideSlug hat. 0.9, wenn ein veröffentlichter Artikel (unter den ersten 200) denselben Titel hat.
    • Harte Sperre: ethics < NEWS_ETHICS_MIN oder spamRisk > NEWS_SPAM_MAX oder duplicateRisk > NEWS_DUPLICATE_MAX. Ergebnis: published_blog_only und kein Checkout.
    • Preis: clamp(base, max, base + (1 - merit) * scale). Eine Qualität unter NEWS_MERIT_SOFT_REJECT hebt den Preis auf mindestens 4999 an. Niedrige Qualität ändert den Status nicht.

    Umgebungsvariablen

    Keiner der NEWS_*-Schlüssel steht in env.local.template. Der Code liest sie mit diesen Standardwerten.

    VariableStandardGelesen in
    NEWS_PROMO_BASE_UAH / NEWS_PROMO_SCALE_UAH / NEWS_PROMO_MAX_UAH50 / 2000 / 5000news-scoring-service.ts
    NEWS_ETHICS_MIN / NEWS_SPAM_MAX / NEWS_DUPLICATE_MAX0.35 / 0.85 / 0.9news-scoring-service.ts
    NEWS_MERIT_SOFT_REJECT0.25Bewertung und Workflow
    OPENROUTER_API_KEY, OPENROUTER_MODEL_PRIMARY, OPENROUTER_MODEL_FALLBACKnicht gesetztnews-scoring-service.ts
    PAYMENT_NEWS_PROCESSORfällt auf PAYMENT_DEFAULT_PROCESSOR zurück, dann auf wayforpaylib/payments/payment.config.ts
    NEWS_PROMOTION_WEBHOOK_SECRETnicht gesetztPATCH /api/news/promotion/submit
    ADMIN_BOT_TOKENnicht gesetztAntworten auf Telegram-Callbacks

    Daten

    Alle vier Tabellen nutzen das JSONB-Dokumentmodell (id, data jsonb, Zeitstempel) in data/schema.sql (abgeflacht, v4.1.0): news, news_categories, news_likes, news_submission_audit. Jeder Übergang hängt einen Eintrag an data.mainPageStatusHistory an und schreibt eine Zeile in news_submission_audit. data/migrations/002_news_content_schema.sql und 003_news_kingdom_upgrade.sql sind historisch. Neuinstallationen wenden nur schema.sql an.

    Nebenwirkungen der Freigabe

    approveMainPagePublication() setzt status: 'published' und visibility: 'site-wide'. Bei von Nutzern verfassten Storys stellt es anschließend enqueueRewardCreditAddEvent({ trigger: 'newsStoryApproved' }) in die Warteschlange und startet generateArticleTranslations(). Empfänger in Telegram sind Nutzer mit einer Plattform-Admin-Rolle und einer communication.telegramId.

    Lokaler Testlauf

    1. 1

      Schema anwenden und einen Mitgliederartikel anlegen

      Wende data/schema.sql an und melde dich als Nutzer mit der Rolle member oder höher an. Lege unter /news/create einen Artikel an. Er erhält blogUsername und erscheint nach der Veröffentlichung unter /{username}/{slug}.

    2. 2

      Zur Promotion einreichen

      Die Antwort enthält status, aiScore und entweder eine Weiterleitung oder Zahlungsfelder für den Checkout.

    3. 3

      Zahlung in Dev simulieren

    4. 4

      Freigeben

      Drücke Approve auf der Telegram-Karte oder rufe POST /api/mcp/v1/news/<id>/approve mit einem Service-Token auf. Prüfe, dass mainPageStatus den Wert published_main hat und eine Zeile in news_submission_audit existiert.