diff --git a/database/seeders/PlanSeeder.php b/database/seeders/PlanSeeder.php index af779918..faff438b 100644 --- a/database/seeders/PlanSeeder.php +++ b/database/seeders/PlanSeeder.php @@ -14,9 +14,12 @@ class PlanSeeder extends Seeder { public function run(): void { + // Benefits nur mit belegbaren Leistungen (T16: „Inhaltsprüfung" statt + // „Redaktionelle Prüfung"; nicht implementierte Boost-/Mengenrabatte + // und die unklare „priorisierte Prüfung" gestrichen). $plans = [ ['slug' => 'starter', 'name' => 'Starter', 'monthly_price_cents' => 2900, 'press_release_quota' => 3, 'daily_limit' => null, 'sort_order' => 1, 'benefits' => [ - 'Redaktionelle Prüfung & Veröffentlichung inklusive', + 'Inhaltsprüfung & Veröffentlichung inklusive', 'Veröffentlichung auf presseecho und businessportal24', 'Reduzierter Extra-PM-Preis', ]], @@ -24,19 +27,16 @@ class PlanSeeder extends Seeder 'Alles aus Starter', 'Höheres Monatskontingent', 'Günstigere Extra-Pressemitteilungen', - 'Boost-Platzierung vergünstigt', ]], ['slug' => 'pro', 'name' => 'Pro', 'monthly_price_cents' => 9900, 'press_release_quota' => 25, 'daily_limit' => 3, 'sort_order' => 3, 'benefits' => [ 'Alles aus Business', 'Großes Monatskontingent', 'Beste Extra-PM-Konditionen', - 'Priorisierte redaktionelle Prüfung', ]], ['slug' => 'agency', 'name' => 'Agency', 'monthly_price_cents' => 19900, 'press_release_quota' => 60, 'daily_limit' => 5, 'sort_order' => 4, 'benefits' => [ 'Alles aus Pro', 'Maximales Monatskontingent für mehrere Marken', 'Niedrigster Extra-PM-Preis', - 'Mengenrabatte auf Add-ons', ]], ]; diff --git a/lang/de/pricing.php b/lang/de/pricing.php index e69fe375..636ccfbc 100644 --- a/lang/de/pricing.php +++ b/lang/de/pricing.php @@ -22,13 +22,15 @@ return [ 'eyebrow' => 'Tarife & Preise', 'headline' => 'Transparente Preise für jede Reichweite', - 'intro' => 'Veröffentlichen Sie regelmäßig im Abo mit monatlichem Kontingent oder einzeln ohne Bindung. Add-ons buchen Sie flexibel dazu. Alle Preise sind Nettopreise zzgl. gesetzlicher USt.', + // B2B-Erkennbarkeit (AGB v0.6 § 1 Abs. 4): Der Unternehmens-Satz gehört + // zwingend ins Intro — er stützt den Netto-Ausweis und das B2B-Gate. + 'intro' => 'Veröffentlichen Sie regelmäßig im Abo mit monatlichem Kontingent oder einzeln ohne Bindung. Add-ons buchen Sie flexibel dazu. Alle Preise sind Nettopreise zzgl. gesetzlicher USt. Unser Angebot richtet sich ausschließlich an Unternehmen, Selbstständige und Agenturen — die Veröffentlichung erfolgt stets über Ihr Firmenprofil.', // 1. Abo-Tarife (Daten: Plan::active()) 'plans' => [ 'eyebrow' => 'Abo-Tarife', 'title' => 'Abo-Tarife mit Monatskontingent', - 'subtitle' => 'Monatlich kündbar. Im Jahrestarif sind zwei Monate gratis enthalten.', + 'subtitle' => 'Monatlich kündbar. Jährliche Zahlweise: 2 Monate gratis — nach den ersten zwölf Monaten wird monatlich abgerechnet, sofern Sie nicht erneut die jährliche Zahlweise wählen.', 'per_month' => '/ Monat', 'per_year' => '/ Jahr', 'net' => 'netto zzgl. USt.', @@ -36,7 +38,7 @@ return [ 'quota' => ':count Pressemitteilungen / Monat', 'daily_limit' => 'max. :count Veröffentlichungen / Tag', 'no_daily_limit' => 'Ohne Tageslimit', - 'included' => 'Redaktionelle Prüfung & Veröffentlichung inklusive', + 'included' => 'Inhaltsprüfung & Veröffentlichung auf beiden Portalen inklusive', 'cta' => 'Tarif wählen', 'popular' => 'Beliebt', 'empty' => 'Tarife werden in Kürze veröffentlicht.', @@ -48,7 +50,7 @@ return [ 'single' => [ 'eyebrow' => 'Ohne Abo', 'title' => 'Einzel-Pressemitteilung', - 'description' => 'Genau eine Veröffentlichung inklusive redaktioneller Prüfung. Bezahlt wird erst bei Veröffentlichung – abgelehnte Mitteilungen kosten nichts.', + 'description' => 'Genau eine Veröffentlichung inklusive Inhaltsprüfung. Bezahlt wird erst bei Veröffentlichung – abgelehnte Mitteilungen kosten nichts.', 'price_suffix' => 'pro Veröffentlichung', 'net' => 'netto zzgl. USt.', 'cta' => 'Einzeln veröffentlichen', @@ -58,7 +60,9 @@ return [ 'addons' => [ 'eyebrow' => 'Add-ons', 'title' => 'Add-ons & Einzelkosten', - 'subtitle' => '1 Credit = 1 €. Add-ons buchen Sie flexibel aus Ihrem Guthaben – größere Credit-Pakete enthalten Bonus-Guthaben.', + // T9-Anker (bewusst nur hier, nicht in den AGB): Kommunikationsanker + // ohne Vertragswirkung — maßgeblich sind die Buchungspreise. + 'subtitle' => 'Soweit nicht anders angegeben, entspricht 1 Credit rechnerisch 1 € netto. Maßgeblich sind die im Buchungsvorgang angezeigten Preise. Größere Credit-Pakete enthalten Bonus-Guthaben.', 'credits_unit' => 'Credits', 'from' => 'ab', @@ -100,4 +104,25 @@ return [ ], 'vat_note' => 'Alle Preise sind Nettopreise und verstehen sich zzgl. der gesetzlichen Umsatzsteuer. Die Abrechnung erfolgt sicher über unseren Zahlungsdienstleister.', + + // Render-Pflichten aus der Leistungsbeschreibung v0.2 (Slots, Credits, + // Partnerportale) — die AGB verweisen auf diese Seite als Preisquelle. + 'notes' => [ + 'slots' => [ + 'title' => 'Slots und Kontingente', + 'text' => 'Ihr Monatskontingent (Slots) gilt für den jeweiligen Abrechnungsmonat; nicht genutzte Slots verfallen mit Monatsende. Slots sind kein Geldguthaben. Ein Slot wird nur durch eine tatsächliche Veröffentlichung verbraucht — abgelehnte Mitteilungen kosten keinen Slot; schlägt eine Veröffentlichung durch einen technischen Fehler bei uns fehl, wird der Slot automatisch zurückgebucht. Tageslimits schützen die redaktionelle Qualität der Portale; darüber hinaus eingereichte Mitteilungen können für den Folgetag eingeplant werden.', + ], + 'credits' => [ + 'title' => 'Credits', + 'text' => 'Credits sind vorausbezahlte Verrechnungseinheiten für Zusatzleistungen. Sie sind mindestens drei Jahre ab Ende des Kaufjahres gültig — wir erinnern Sie rechtzeitig vor Ablauf. Keine versteckten Abläufe: Ihr Guthaben und das Ablaufdatum sehen Sie jederzeit im Konto.', + ], + 'boost' => [ + 'title' => 'Boost — was Sie bekommen und was nicht', + 'text' => 'Geschuldet ist die Platzierung während der gebuchten Laufzeit auf Startseite und Kategorieseite. Eine bestimmte Reichweite oder Zugriffszahl versprechen wir nicht — das wäre unseriös. Buchbar nur für Mitteilungen mit Prüfergebnis Grün. Ist das Portal während eines aktiven Boosts aus von uns zu vertretenden Gründen länger als 60 Minuten am Stück nicht erreichbar, verlängert sich die Boost-Laufzeit entsprechend.', + ], + 'partners' => [ + 'title' => 'Partnerportale', + 'text' => 'Derzeit erfolgt keine Weitergabe Ihrer Mitteilungen an Partnerportale. Sollten wir künftig eine zusätzliche Verbreitung über Partner anbieten, geschieht das nur, wenn Sie diese ausdrücklich auswählen oder sie ausdrücklich Bestandteil Ihres Tarifs ist — die Partner oder Partnerkategorien werden dann an dieser Stelle konkret benannt.', + ], + ], ]; diff --git a/lang/en/pricing.php b/lang/en/pricing.php index 928109aa..84a1c273 100644 --- a/lang/en/pricing.php +++ b/lang/en/pricing.php @@ -19,13 +19,15 @@ return [ 'eyebrow' => 'Plans & Pricing', 'headline' => 'Transparent pricing for every reach', - 'intro' => 'Publish regularly on a subscription with a monthly quota, or one-off without commitment. Add-ons are booked flexibly on top. All prices are net, plus statutory VAT.', + // B2B visibility (T&C v0.6 § 1 (4)): the business-audience sentence is + // required in the intro — it supports the net pricing and the B2B gate. + 'intro' => 'Publish regularly on a subscription with a monthly quota, or one-off without commitment. Add-ons are booked flexibly on top. All prices are net, plus statutory VAT. Our offering is aimed exclusively at businesses, self-employed professionals and agencies — publication always takes place via your company profile.', // 1. Subscription plans (data: Plan::active()) 'plans' => [ 'eyebrow' => 'Subscriptions', 'title' => 'Subscriptions with a monthly quota', - 'subtitle' => 'Cancel monthly. The annual plan includes two months free.', + 'subtitle' => 'Cancel monthly. Annual payment: 2 months free — after the first twelve months, billing switches to monthly unless you actively choose annual payment again.', 'per_month' => '/ month', 'per_year' => '/ year', 'net' => 'net, plus VAT.', @@ -33,7 +35,7 @@ return [ 'quota' => ':count press releases / month', 'daily_limit' => 'max. :count publications / day', 'no_daily_limit' => 'No daily limit', - 'included' => 'Editorial review & publication included', + 'included' => 'Content review & publication on both portals included', 'cta' => 'Choose plan', 'popular' => 'Popular', 'empty' => 'Plans will be published shortly.', @@ -44,7 +46,7 @@ return [ 'single' => [ 'eyebrow' => 'No subscription', 'title' => 'Single press release', - 'description' => 'Exactly one publication including editorial review. You only pay on publication – rejected releases are free.', + 'description' => 'Exactly one publication including content review. You only pay on publication – rejected releases are free.', 'price_suffix' => 'per publication', 'net' => 'net, plus VAT.', 'cta' => 'Publish a single release', @@ -54,7 +56,8 @@ return [ 'addons' => [ 'eyebrow' => 'Add-ons', 'title' => 'Add-ons & individual costs', - 'subtitle' => '1 credit = 1 €. Add-ons are booked flexibly from your balance – larger credit packs include bonus credits.', + // T9 anchor (deliberately only here, not in the T&Cs). + 'subtitle' => 'Unless stated otherwise, 1 credit corresponds to €1 net. The prices shown during checkout are decisive. Larger credit packs include bonus credits.', 'credits_unit' => 'credits', 'from' => 'from', @@ -94,4 +97,25 @@ return [ ], 'vat_note' => 'All prices are net and exclude statutory VAT. Billing is handled securely via our payment provider.', + + // Rendering obligations from the service description (slots/credits/ + // boost/partner portals) — the T&Cs refer to this page. + 'notes' => [ + 'slots' => [ + 'title' => 'Slots and quotas', + 'text' => 'Your monthly quota (slots) applies to the respective billing month; unused slots expire at the end of the month. Slots are not a cash balance. A slot is only used by an actual publication — rejected releases do not cost a slot; if a publication fails due to a technical error on our side, the slot is credited back automatically. Daily limits protect the editorial quality of the portals; releases submitted beyond the limit can be scheduled for the next day.', + ], + 'credits' => [ + 'title' => 'Credits', + 'text' => 'Credits are prepaid units for add-on services. They remain valid for at least three years from the end of the year of purchase — we remind you in good time before expiry. No hidden expirations: you can see your balance and expiry date in your account at any time.', + ], + 'boost' => [ + 'title' => 'Boost — what you get and what you do not', + 'text' => 'What is owed is the placement during the booked period on the homepage and category page. We do not promise a specific reach or number of hits — that would be dishonest. Bookable only for releases with a green review result. If the portal is unavailable for more than 60 consecutive minutes during an active boost for reasons within our responsibility, the boost period is extended accordingly.', + ], + 'partners' => [ + 'title' => 'Partner portals', + 'text' => 'Currently, your releases are not passed on to partner portals. Should we offer additional distribution via partners in the future, this will only happen if you explicitly select it or it is explicitly part of your plan — the partners or partner categories will then be named specifically here.', + ], + ], ]; diff --git a/resources/views/web/preise.blade.php b/resources/views/web/preise.blade.php index bf0e3514..7496906d 100644 --- a/resources/views/web/preise.blade.php +++ b/resources/views/web/preise.blade.php @@ -272,6 +272,17 @@

{{ __('pricing.vat_note') }}

+ + {{-- Render-Pflichten der Leistungsbeschreibung (Slots/Credits/Boost/ + Partnerportale) — die AGB verweisen auf diese Seite. --}} +
+ @foreach (['slots', 'credits', 'boost', 'partners'] as $noteKey) +
+

{{ __('pricing.notes.'.$noteKey.'.title') }}

+

{{ __('pricing.notes.'.$noteKey.'.text') }}

+
+ @endforeach +
{{-- Abschluss mit vorhandener Editorial-Komponente. --}}