@jjlmoya/utils-creative 1.26.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +2 -2
- package/src/category/i18n/en.ts +2 -2
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +2 -2
- package/src/category/i18n/id.ts +2 -2
- package/src/category/i18n/it.ts +2 -2
- package/src/category/i18n/ja.ts +2 -2
- package/src/category/i18n/ko.ts +2 -2
- package/src/category/i18n/nl.ts +2 -2
- package/src/category/i18n/pl.ts +2 -2
- package/src/category/i18n/pt.ts +2 -2
- package/src/category/i18n/ru.ts +2 -2
- package/src/category/i18n/sv.ts +2 -2
- package/src/category/i18n/tr.ts +2 -2
- package/src/category/i18n/zh.ts +2 -2
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/env.d.ts +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +75 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +17 -17
- package/src/tool/bead-pattern-generator/bibliography.astro +8 -8
- package/src/tool/bead-pattern-generator/i18n/de.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/en.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/es.ts +104 -104
- package/src/tool/bead-pattern-generator/i18n/fr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/id.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/it.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ja.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ko.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/nl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pt.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ru.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/sv.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/tr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/zh.ts +111 -111
- package/src/tool/bead-pattern-generator/seo.astro +19 -19
- package/src/tool/dice-roller/bibliography.astro +8 -8
- package/src/tool/dice-roller/i18n/de.ts +134 -134
- package/src/tool/dice-roller/i18n/en.ts +134 -134
- package/src/tool/dice-roller/i18n/es.ts +125 -125
- package/src/tool/dice-roller/i18n/fr.ts +134 -134
- package/src/tool/dice-roller/i18n/id.ts +134 -134
- package/src/tool/dice-roller/i18n/it.ts +134 -134
- package/src/tool/dice-roller/i18n/ja.ts +134 -134
- package/src/tool/dice-roller/i18n/ko.ts +134 -134
- package/src/tool/dice-roller/i18n/nl.ts +134 -134
- package/src/tool/dice-roller/i18n/pl.ts +134 -134
- package/src/tool/dice-roller/i18n/pt.ts +134 -134
- package/src/tool/dice-roller/i18n/ru.ts +134 -134
- package/src/tool/dice-roller/i18n/sv.ts +134 -134
- package/src/tool/dice-roller/i18n/tr.ts +134 -134
- package/src/tool/dice-roller/i18n/zh.ts +134 -134
- package/src/tool/dice-roller/seo.astro +15 -15
- package/src/tool/excuse-generator/bibliography.astro +8 -8
- package/src/tool/excuse-generator/i18n/de.ts +120 -120
- package/src/tool/excuse-generator/i18n/en.ts +120 -120
- package/src/tool/excuse-generator/i18n/es.ts +118 -118
- package/src/tool/excuse-generator/i18n/fr.ts +120 -120
- package/src/tool/excuse-generator/i18n/id.ts +120 -120
- package/src/tool/excuse-generator/i18n/it.ts +120 -120
- package/src/tool/excuse-generator/i18n/ja.ts +120 -120
- package/src/tool/excuse-generator/i18n/ko.ts +120 -120
- package/src/tool/excuse-generator/i18n/nl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pt.ts +120 -120
- package/src/tool/excuse-generator/i18n/ru.ts +120 -120
- package/src/tool/excuse-generator/i18n/sv.ts +120 -120
- package/src/tool/excuse-generator/i18n/tr.ts +120 -120
- package/src/tool/excuse-generator/i18n/zh.ts +120 -120
- package/src/tool/excuse-generator/seo.astro +15 -15
- package/src/tool/fortune-cookie/bibliography.astro +8 -8
- package/src/tool/fortune-cookie/i18n/de.ts +124 -124
- package/src/tool/fortune-cookie/i18n/en.ts +124 -124
- package/src/tool/fortune-cookie/i18n/es.ts +125 -125
- package/src/tool/fortune-cookie/i18n/fr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/id.ts +124 -124
- package/src/tool/fortune-cookie/i18n/it.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ja.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ko.ts +124 -124
- package/src/tool/fortune-cookie/i18n/nl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pt.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ru.ts +124 -124
- package/src/tool/fortune-cookie/i18n/sv.ts +124 -124
- package/src/tool/fortune-cookie/i18n/tr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/zh.ts +124 -124
- package/src/tool/fortune-cookie/seo.astro +15 -15
- package/src/tool/synesthesia-painter/bibliography.astro +8 -8
- package/src/tool/synesthesia-painter/i18n/de.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/en.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/es.ts +110 -110
- package/src/tool/synesthesia-painter/i18n/fr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/id.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/it.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ja.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ko.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/nl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pt.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ru.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/sv.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/tr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/zh.ts +118 -118
- package/src/tool/synesthesia-painter/seo.astro +15 -15
- package/src/tool/zalgo-generator/bibliography.astro +8 -8
- package/src/tool/zalgo-generator/i18n/de.ts +109 -109
- package/src/tool/zalgo-generator/i18n/en.ts +109 -109
- package/src/tool/zalgo-generator/i18n/es.ts +109 -109
- package/src/tool/zalgo-generator/i18n/fr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/id.ts +109 -109
- package/src/tool/zalgo-generator/i18n/it.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ja.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ko.ts +109 -109
- package/src/tool/zalgo-generator/i18n/nl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pt.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ru.ts +109 -109
- package/src/tool/zalgo-generator/i18n/sv.ts +109 -109
- package/src/tool/zalgo-generator/i18n/tr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/zh.ts +109 -109
- package/src/tool/zalgo-generator/seo.astro +15 -15
- package/src/types.ts +1 -1
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import { bibliography } from '../bibliography';
|
|
3
|
-
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
-
|
|
5
|
-
const slug = 'ausredengenerator';
|
|
6
|
-
const title = 'Ausredengenerator';
|
|
7
|
-
const description = 'Semantische Glücksmaschine, um Verpflichtungen mit Stil loszuwerden. Generieren Sie sofort surreale und unwiderlegbare Ausreden.';
|
|
8
|
-
|
|
9
|
-
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Kann dieser Generator meine Ehe retten?',
|
|
12
|
-
answer: 'Wir sind zwar keine Therapeuten, aber das Vermeiden dieses Abendessens mit den Schwiegereltern durch einen plausiblen technischen Notfall kann die Spannungen erheblich reduzieren. Mit Verantwortung verwenden.'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Warum solch surreale Phrasen?',
|
|
16
|
-
answer: 'Die Strategie basiert auf kognitiver Dissonanz. Wenn man etwas Langweiliges sagt, ist es überprüfbar. Wenn man etwas Absurdes sagt, blockiert die Überraschung die Fähigkeit zur Wut.'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
-
{ name: 'Generieren', text: 'Klicken Sie auf die Schaltfläche "Generieren", um eine neue Ausrede zu erstellen.' },
|
|
22
|
-
{ name: 'Kopieren', text: 'Klicken Sie auf die Schaltfläche "Kopieren", um die Ausrede in Ihre Zwischenablage zu kopieren.' }
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
-
'@context': 'https://schema.org',
|
|
27
|
-
'@type': 'FAQPage',
|
|
28
|
-
mainEntity: faq.map((item) => ({
|
|
29
|
-
'@type': 'Question',
|
|
30
|
-
name: item.question,
|
|
31
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
-
})),
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const howToSchema: WithContext<HowTo> = {
|
|
36
|
-
'@context': 'https://schema.org',
|
|
37
|
-
'@type': 'HowTo',
|
|
38
|
-
name: title,
|
|
39
|
-
description,
|
|
40
|
-
step: howTo.map((step) => ({
|
|
41
|
-
'@type': 'HowToStep',
|
|
42
|
-
name: step.name,
|
|
43
|
-
text: step.text,
|
|
44
|
-
})),
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
-
'@context': 'https://schema.org',
|
|
49
|
-
'@type': 'SoftwareApplication',
|
|
50
|
-
name: title,
|
|
51
|
-
description,
|
|
52
|
-
applicationCategory: 'UtilitiesApplication',
|
|
53
|
-
operatingSystem: 'Web',
|
|
54
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
-
inLanguage: 'de',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
-
slug,
|
|
60
|
-
title,
|
|
61
|
-
description,
|
|
62
|
-
faqTitle: 'Häufig gestellte Fragen',
|
|
63
|
-
ui: {
|
|
64
|
-
title: 'Surrealer Ausredengenerator',
|
|
65
|
-
description: 'Alibi-Rechner der nächsten Generation.',
|
|
66
|
-
subjectLabel: 'Subjekt',
|
|
67
|
-
actionLabel: 'Aktion',
|
|
68
|
-
victimLabel: 'Opfer',
|
|
69
|
-
generateBtn: 'AUSREDE GENERIEREN',
|
|
70
|
-
copyBtn: 'Diesen Wahnsinn kopieren',
|
|
71
|
-
copied: 'Kopiert!',
|
|
72
|
-
starts: JSON.stringify([
|
|
73
|
-
"Meine Katze", "Meine Großmutter", "Der Präsident", "Ein Alien", "Mein Nachbar aus der 5. Etage",
|
|
74
|
-
"Das WLAN", "Mein Horoskop", "Ein Zeitreisender", "Die Waschmaschine", "Mein Kühlschrank",
|
|
75
|
-
"Der Geist der Weihnacht", "Mein Schatten", "Ein Ninja", "Die vegane Polizei", "Siri",
|
|
76
|
-
"Meine fleischfressende Pflanze", "Der Amazon-Lieferant", "Mein böser Klon", "Ein Zauberer", "Godzilla"
|
|
77
|
-
]),
|
|
78
|
-
middles: JSON.stringify([
|
|
79
|
-
"hat den Krieg erklärt gegen", "hat gefressen", "hat entführt", "hat angezündet",
|
|
80
|
-
"organisiert eine Party in", "hat sich erbrochen auf", "weigert sich zu verlassen",
|
|
81
|
-
"hat gehackt", "hat gestohlen", "hat sich verliebt in", "meditiert über",
|
|
82
|
-
"hat einen Zauberspruch gewirkt auf", "protestiert gegen", "hat einen Kult gegründet in",
|
|
83
|
-
"tanzt Samba in", "hat einen Dämon beschworen in", "hat den Zugang blockiert zu",
|
|
84
|
-
"hat sich in Gold verwandelt", "versucht zu verkaufen", "hat ein Buch geschrieben über"
|
|
85
|
-
]),
|
|
86
|
-
ends: JSON.stringify([
|
|
87
|
-
"meine Hausschlüssel.", "meinen Lebenswillen.", "das Garagentor.",
|
|
88
|
-
"meine Lieblingshose.", "den Wohnzimmer-Router.", "mein einziges Paar Schuhe.",
|
|
89
|
-
"die Gesetze der Physik.", "meine Würde.", "den Aufzug des Gebäudes.",
|
|
90
|
-
"meinen Netflix-Account.", "meine Zahnbürste.", "meine Hausurkunden.",
|
|
91
|
-
"meine Pogs-Sammlung.", "die Handbremse des Autos.", "meinen Wunsch nach Sozialkontakt.",
|
|
92
|
-
"meinen Kaffeevorrat.", "den Toilettendeckel.", "die TV-Fernbedienung.",
|
|
93
|
-
"meine Glückssocken.", "die westliche Zivilisation."
|
|
94
|
-
]),
|
|
95
|
-
faqTitle: 'FAQ',
|
|
96
|
-
bibliographyTitle: 'Referenzen'
|
|
97
|
-
},
|
|
98
|
-
seo: [
|
|
99
|
-
{ type: 'title', text: 'Die wissenschaftliche Kunst der perfekten Ausrede', level: 2 },
|
|
100
|
-
{ type: 'paragraph', html: 'Wir leben im Zeitalter der Hyperkonnektivität. Ihr Telefon vibriert, Ihre Uhr benachrichtigt Sie und Ihr Terminkalender sieht aus wie ein Tetris-Spiel, das kurz vor dem Verlieren steht. Der Druck, zu allem \"Ja\" zu sagen, hat eine Epidemie der sozialen Erschöpfung ausgelöst.' },
|
|
101
|
-
{ type: 'title', text: 'Die Renaissance von JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
-
{ type: 'paragraph', html: 'Während FOMO (Fear of Missing Out) das letzte Jahrzehnt dominierte, plädieren Experten für digitales Wohlbefinden nun für <strong>JOMO: Die Freude am Verpassen</strong>. Es geht nicht um Isolation, sondern um Intentionalität.' },
|
|
103
|
-
{ type: 'tip', title: 'Die Formel für das unwiderlegbare Alibi', html: '<strong>Das dissoziierte Subjekt:</strong> Sie sind niemals der Schuldige. Es ist \"das WLAN\", \"meine Katze\", \"das Universum\". Schieben Sie die Schuld auf eine externe Instanz.<br><strong>Die hyperbolische Aktion:</strong> Die Situation muss so absurd oder technisch sein, dass niemand nach Details fragt.<br><strong>Die physische Blockade:</strong> Das Endergebnis muss binär sein: Entweder ich gehe oder ich bleibe zu Hause.' },
|
|
104
|
-
{ type: 'title', text: 'Eine kurze Geschichte der Ausrede', level: 3 },
|
|
105
|
-
{ type: 'list', items: [
|
|
106
|
-
'<strong>Mittelalter:</strong> \"Mein Pferd hat ein Hufeisen verloren\" (Ein zeitloser Klassiker).',
|
|
107
|
-
'<strong>Industrielle Revolution:</strong> \"Die Dampfmaschine ist überhitzt\".',
|
|
108
|
-
'<strong>Digitales Zeitalter:</strong> \"Mein Internet ist mitten im Update ausgefallen\".',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'proscons', items: [
|
|
111
|
-
{ pro: 'Befreit sofort von sozialem Druck', con: 'Übermäßiger Gebrauch untergräbt das Vertrauen' },
|
|
112
|
-
{ pro: 'Schützt Ihre Energie und Grenzen', con: 'Kann Schuldgefühle erzeugen, wenn es unvorsichtig benutzt wird' },
|
|
113
|
-
{ pro: 'Kreativer und humorvoller Ton entschärft Spannungen', con: 'Nicht für formelle oder professionelle Kontexte geeignet' },
|
|
114
|
-
]},
|
|
115
|
-
],
|
|
116
|
-
faq,
|
|
117
|
-
bibliography,
|
|
118
|
-
howTo,
|
|
119
|
-
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'ausredengenerator';
|
|
6
|
+
const title = 'Ausredengenerator';
|
|
7
|
+
const description = 'Semantische Glücksmaschine, um Verpflichtungen mit Stil loszuwerden. Generieren Sie sofort surreale und unwiderlegbare Ausreden.';
|
|
8
|
+
|
|
9
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Kann dieser Generator meine Ehe retten?',
|
|
12
|
+
answer: 'Wir sind zwar keine Therapeuten, aber das Vermeiden dieses Abendessens mit den Schwiegereltern durch einen plausiblen technischen Notfall kann die Spannungen erheblich reduzieren. Mit Verantwortung verwenden.'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Warum solch surreale Phrasen?',
|
|
16
|
+
answer: 'Die Strategie basiert auf kognitiver Dissonanz. Wenn man etwas Langweiliges sagt, ist es überprüfbar. Wenn man etwas Absurdes sagt, blockiert die Überraschung die Fähigkeit zur Wut.'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Generieren', text: 'Klicken Sie auf die Schaltfläche "Generieren", um eine neue Ausrede zu erstellen.' },
|
|
22
|
+
{ name: 'Kopieren', text: 'Klicken Sie auf die Schaltfläche "Kopieren", um die Ausrede in Ihre Zwischenablage zu kopieren.' }
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
+
'@context': 'https://schema.org',
|
|
27
|
+
'@type': 'FAQPage',
|
|
28
|
+
mainEntity: faq.map((item) => ({
|
|
29
|
+
'@type': 'Question',
|
|
30
|
+
name: item.question,
|
|
31
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
+
})),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const howToSchema: WithContext<HowTo> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'HowTo',
|
|
38
|
+
name: title,
|
|
39
|
+
description,
|
|
40
|
+
step: howTo.map((step) => ({
|
|
41
|
+
'@type': 'HowToStep',
|
|
42
|
+
name: step.name,
|
|
43
|
+
text: step.text,
|
|
44
|
+
})),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'SoftwareApplication',
|
|
50
|
+
name: title,
|
|
51
|
+
description,
|
|
52
|
+
applicationCategory: 'UtilitiesApplication',
|
|
53
|
+
operatingSystem: 'Web',
|
|
54
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
+
inLanguage: 'de',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
+
slug,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Surrealer Ausredengenerator',
|
|
65
|
+
description: 'Alibi-Rechner der nächsten Generation.',
|
|
66
|
+
subjectLabel: 'Subjekt',
|
|
67
|
+
actionLabel: 'Aktion',
|
|
68
|
+
victimLabel: 'Opfer',
|
|
69
|
+
generateBtn: 'AUSREDE GENERIEREN',
|
|
70
|
+
copyBtn: 'Diesen Wahnsinn kopieren',
|
|
71
|
+
copied: 'Kopiert!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"Meine Katze", "Meine Großmutter", "Der Präsident", "Ein Alien", "Mein Nachbar aus der 5. Etage",
|
|
74
|
+
"Das WLAN", "Mein Horoskop", "Ein Zeitreisender", "Die Waschmaschine", "Mein Kühlschrank",
|
|
75
|
+
"Der Geist der Weihnacht", "Mein Schatten", "Ein Ninja", "Die vegane Polizei", "Siri",
|
|
76
|
+
"Meine fleischfressende Pflanze", "Der Amazon-Lieferant", "Mein böser Klon", "Ein Zauberer", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"hat den Krieg erklärt gegen", "hat gefressen", "hat entführt", "hat angezündet",
|
|
80
|
+
"organisiert eine Party in", "hat sich erbrochen auf", "weigert sich zu verlassen",
|
|
81
|
+
"hat gehackt", "hat gestohlen", "hat sich verliebt in", "meditiert über",
|
|
82
|
+
"hat einen Zauberspruch gewirkt auf", "protestiert gegen", "hat einen Kult gegründet in",
|
|
83
|
+
"tanzt Samba in", "hat einen Dämon beschworen in", "hat den Zugang blockiert zu",
|
|
84
|
+
"hat sich in Gold verwandelt", "versucht zu verkaufen", "hat ein Buch geschrieben über"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"meine Hausschlüssel.", "meinen Lebenswillen.", "das Garagentor.",
|
|
88
|
+
"meine Lieblingshose.", "den Wohnzimmer-Router.", "mein einziges Paar Schuhe.",
|
|
89
|
+
"die Gesetze der Physik.", "meine Würde.", "den Aufzug des Gebäudes.",
|
|
90
|
+
"meinen Netflix-Account.", "meine Zahnbürste.", "meine Hausurkunden.",
|
|
91
|
+
"meine Pogs-Sammlung.", "die Handbremse des Autos.", "meinen Wunsch nach Sozialkontakt.",
|
|
92
|
+
"meinen Kaffeevorrat.", "den Toilettendeckel.", "die TV-Fernbedienung.",
|
|
93
|
+
"meine Glückssocken.", "die westliche Zivilisation."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'Referenzen'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'Die wissenschaftliche Kunst der perfekten Ausrede', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'Wir leben im Zeitalter der Hyperkonnektivität. Ihr Telefon vibriert, Ihre Uhr benachrichtigt Sie und Ihr Terminkalender sieht aus wie ein Tetris-Spiel, das kurz vor dem Verlieren steht. Der Druck, zu allem \"Ja\" zu sagen, hat eine Epidemie der sozialen Erschöpfung ausgelöst.' },
|
|
101
|
+
{ type: 'title', text: 'Die Renaissance von JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'Während FOMO (Fear of Missing Out) das letzte Jahrzehnt dominierte, plädieren Experten für digitales Wohlbefinden nun für <strong>JOMO: Die Freude am Verpassen</strong>. Es geht nicht um Isolation, sondern um Intentionalität.' },
|
|
103
|
+
{ type: 'tip', title: 'Die Formel für das unwiderlegbare Alibi', html: '<strong>Das dissoziierte Subjekt:</strong> Sie sind niemals der Schuldige. Es ist \"das WLAN\", \"meine Katze\", \"das Universum\". Schieben Sie die Schuld auf eine externe Instanz.<br><strong>Die hyperbolische Aktion:</strong> Die Situation muss so absurd oder technisch sein, dass niemand nach Details fragt.<br><strong>Die physische Blockade:</strong> Das Endergebnis muss binär sein: Entweder ich gehe oder ich bleibe zu Hause.' },
|
|
104
|
+
{ type: 'title', text: 'Eine kurze Geschichte der Ausrede', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Mittelalter:</strong> \"Mein Pferd hat ein Hufeisen verloren\" (Ein zeitloser Klassiker).',
|
|
107
|
+
'<strong>Industrielle Revolution:</strong> \"Die Dampfmaschine ist überhitzt\".',
|
|
108
|
+
'<strong>Digitales Zeitalter:</strong> \"Mein Internet ist mitten im Update ausgefallen\".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Befreit sofort von sozialem Druck', con: 'Übermäßiger Gebrauch untergräbt das Vertrauen' },
|
|
112
|
+
{ pro: 'Schützt Ihre Energie und Grenzen', con: 'Kann Schuldgefühle erzeugen, wenn es unvorsichtig benutzt wird' },
|
|
113
|
+
{ pro: 'Kreativer und humorvoller Ton entschärft Spannungen', con: 'Nicht für formelle oder professionelle Kontexte geeignet' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography,
|
|
118
|
+
howTo,
|
|
119
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
+
};
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import { bibliography } from '../bibliography';
|
|
3
|
-
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
-
|
|
5
|
-
const slug = 'excuse-generator';
|
|
6
|
-
const title = 'Excuse Generator';
|
|
7
|
-
const description = 'Semantic gambling machine to get rid of commitments with style. Generate surreal and irrefutable excuses instantly.';
|
|
8
|
-
|
|
9
|
-
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Can this generator save my marriage?',
|
|
12
|
-
answer: 'While we are not therapists, avoiding that dinner with the in-laws using a plausible technical emergency can significantly reduce tension. Use responsibly.'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Why such surreal phrases?',
|
|
16
|
-
answer: 'The strategy is based on Cognitive Dissonance. If you say something boring it is verifiable. If you say something absurd, the surprise blocks the capacity for anger.'
|
|
17
|
-
}
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
-
{ name: 'Generate', text: 'Click the generate button to create a new excuse.' },
|
|
22
|
-
{ name: 'Copy', text: 'Click the copy button to bring the excuse to your clipboard.' }
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
-
'@context': 'https://schema.org',
|
|
27
|
-
'@type': 'FAQPage',
|
|
28
|
-
mainEntity: faq.map((item) => ({
|
|
29
|
-
'@type': 'Question',
|
|
30
|
-
name: item.question,
|
|
31
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
-
})),
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const howToSchema: WithContext<HowTo> = {
|
|
36
|
-
'@context': 'https://schema.org',
|
|
37
|
-
'@type': 'HowTo',
|
|
38
|
-
name: title,
|
|
39
|
-
description,
|
|
40
|
-
step: howTo.map((step) => ({
|
|
41
|
-
'@type': 'HowToStep',
|
|
42
|
-
name: step.name,
|
|
43
|
-
text: step.text,
|
|
44
|
-
})),
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
-
'@context': 'https://schema.org',
|
|
49
|
-
'@type': 'SoftwareApplication',
|
|
50
|
-
name: title,
|
|
51
|
-
description,
|
|
52
|
-
applicationCategory: 'UtilitiesApplication',
|
|
53
|
-
operatingSystem: 'Web',
|
|
54
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
-
inLanguage: 'en',
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
-
slug,
|
|
60
|
-
title,
|
|
61
|
-
description,
|
|
62
|
-
faqTitle: 'Frequently Asked Questions',
|
|
63
|
-
ui: {
|
|
64
|
-
title: 'Surreal Excuse Generator',
|
|
65
|
-
description: 'Next-generation alibi calculator.',
|
|
66
|
-
subjectLabel: 'Subject',
|
|
67
|
-
actionLabel: 'Action',
|
|
68
|
-
victimLabel: 'Victim',
|
|
69
|
-
generateBtn: 'GENERATE EXCUSE',
|
|
70
|
-
copyBtn: 'Copy this craziness',
|
|
71
|
-
copied: 'Copied!',
|
|
72
|
-
starts: JSON.stringify([
|
|
73
|
-
"My cat", "My grandmother", "The president", "An alien", "My neighbor from the 5th floor",
|
|
74
|
-
"The wifi", "My horoscope", "A time traveler", "The washing machine", "My fridge",
|
|
75
|
-
"The spirit of Christmas", "My shadow", "A ninja", "The vegan police", "Siri",
|
|
76
|
-
"My carnivorous plant", "The Amazon delivery guy", "My evil clone", "A wizard", "Godzilla"
|
|
77
|
-
]),
|
|
78
|
-
middles: JSON.stringify([
|
|
79
|
-
"has declared war on", "has eaten", "has kidnapped", "has set fire to",
|
|
80
|
-
"is organizing a party in", "has vomited on", "refuses to leave",
|
|
81
|
-
"has hacked", "has stolen", "has fallen in love with", "is meditating on",
|
|
82
|
-
"has cast a spell on", "is protesting against", "has founded a cult in",
|
|
83
|
-
"is dancing samba in", "has summoned a demon in", "has blocked access to",
|
|
84
|
-
"has turned into gold", "is trying to sell", "has written a book about"
|
|
85
|
-
]),
|
|
86
|
-
ends: JSON.stringify([
|
|
87
|
-
"my house keys.", "my will to live.", "the garage door.",
|
|
88
|
-
"my favorite pants.", "the living room router.", "my only pair of shoes.",
|
|
89
|
-
"the laws of physics.", "my dignity.", "the building's elevator.",
|
|
90
|
-
"my Netflix account.", "my toothbrush.", "my house deeds.",
|
|
91
|
-
"my pogs collection.", "the car's handbrake.", "my desire to socialize.",
|
|
92
|
-
"my coffee supply.", "the toilet lid.", "the TV remote.",
|
|
93
|
-
"my lucky socks.", "Western civilization."
|
|
94
|
-
]),
|
|
95
|
-
faqTitle: 'FAQ',
|
|
96
|
-
bibliographyTitle: 'References'
|
|
97
|
-
},
|
|
98
|
-
seo: [
|
|
99
|
-
{ type: 'title', text: 'The Scientific Art of the Perfect Excuse', level: 2 },
|
|
100
|
-
{ type: 'paragraph', html: 'We live in the era of hyperconnectivity. Your phone vibrates, your watch notifies you, and your social agenda looks like a game of Tetris about to lose. The pressure to say "yes" to everything has created an epidemic of social exhaustion.' },
|
|
101
|
-
{ type: 'title', text: 'The Renaissance of JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
-
{ type: 'paragraph', html: 'While FOMO (Fear of Missing Out) dominated the last decade, digital wellness experts now advocate for <strong>JOMO: The Joy of Missing Out</strong>. It\'s not about isolation, but about intentionality.' },
|
|
103
|
-
{ type: 'tip', title: 'The Formula for the Irrefutable Alibi', html: '<strong>The Dissociated Subject:</strong> You are never the culprit. It is "the wifi", "my cat", "the universe". Shift the blame to an external entity.<br><strong>The Hyperbolic Action:</strong> The situation must be absurd or technical enough that nobody asks for details.<br><strong>The Physical Block:</strong> The final outcome must be binary: either I go or I stay home.' },
|
|
104
|
-
{ type: 'title', text: 'A Brief History of the Excuse', level: 3 },
|
|
105
|
-
{ type: 'list', items: [
|
|
106
|
-
'<strong>Middle Ages:</strong> "My horse has lost a horseshoe" (A timeless classic).',
|
|
107
|
-
'<strong>Industrial Revolution:</strong> "The steam engine overheated".',
|
|
108
|
-
'<strong>Digital Era:</strong> "My internet dropped right in the middle of an update".',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'proscons', items: [
|
|
111
|
-
{ pro: 'Instantly relieves social pressure', con: 'Overuse erodes trust' },
|
|
112
|
-
{ pro: 'Protects your energy and boundaries', con: 'May generate guilt if used carelessly' },
|
|
113
|
-
{ pro: 'Creative and humorous tone defuses tension', con: 'Not suitable for formal or professional contexts' },
|
|
114
|
-
]},
|
|
115
|
-
],
|
|
116
|
-
faq,
|
|
117
|
-
bibliography,
|
|
118
|
-
howTo,
|
|
119
|
-
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { ExcuseGeneratorLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'excuse-generator';
|
|
6
|
+
const title = 'Excuse Generator';
|
|
7
|
+
const description = 'Semantic gambling machine to get rid of commitments with style. Generate surreal and irrefutable excuses instantly.';
|
|
8
|
+
|
|
9
|
+
const faq: ExcuseGeneratorLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Can this generator save my marriage?',
|
|
12
|
+
answer: 'While we are not therapists, avoiding that dinner with the in-laws using a plausible technical emergency can significantly reduce tension. Use responsibly.'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Why such surreal phrases?',
|
|
16
|
+
answer: 'The strategy is based on Cognitive Dissonance. If you say something boring it is verifiable. If you say something absurd, the surprise blocks the capacity for anger.'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: ExcuseGeneratorLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Generate', text: 'Click the generate button to create a new excuse.' },
|
|
22
|
+
{ name: 'Copy', text: 'Click the copy button to bring the excuse to your clipboard.' }
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
26
|
+
'@context': 'https://schema.org',
|
|
27
|
+
'@type': 'FAQPage',
|
|
28
|
+
mainEntity: faq.map((item) => ({
|
|
29
|
+
'@type': 'Question',
|
|
30
|
+
name: item.question,
|
|
31
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
32
|
+
})),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const howToSchema: WithContext<HowTo> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'HowTo',
|
|
38
|
+
name: title,
|
|
39
|
+
description,
|
|
40
|
+
step: howTo.map((step) => ({
|
|
41
|
+
'@type': 'HowToStep',
|
|
42
|
+
name: step.name,
|
|
43
|
+
text: step.text,
|
|
44
|
+
})),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'SoftwareApplication',
|
|
50
|
+
name: title,
|
|
51
|
+
description,
|
|
52
|
+
applicationCategory: 'UtilitiesApplication',
|
|
53
|
+
operatingSystem: 'Web',
|
|
54
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
55
|
+
inLanguage: 'en',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const content: ExcuseGeneratorLocaleContent = {
|
|
59
|
+
slug,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
faqTitle: 'Frequently Asked Questions',
|
|
63
|
+
ui: {
|
|
64
|
+
title: 'Surreal Excuse Generator',
|
|
65
|
+
description: 'Next-generation alibi calculator.',
|
|
66
|
+
subjectLabel: 'Subject',
|
|
67
|
+
actionLabel: 'Action',
|
|
68
|
+
victimLabel: 'Victim',
|
|
69
|
+
generateBtn: 'GENERATE EXCUSE',
|
|
70
|
+
copyBtn: 'Copy this craziness',
|
|
71
|
+
copied: 'Copied!',
|
|
72
|
+
starts: JSON.stringify([
|
|
73
|
+
"My cat", "My grandmother", "The president", "An alien", "My neighbor from the 5th floor",
|
|
74
|
+
"The wifi", "My horoscope", "A time traveler", "The washing machine", "My fridge",
|
|
75
|
+
"The spirit of Christmas", "My shadow", "A ninja", "The vegan police", "Siri",
|
|
76
|
+
"My carnivorous plant", "The Amazon delivery guy", "My evil clone", "A wizard", "Godzilla"
|
|
77
|
+
]),
|
|
78
|
+
middles: JSON.stringify([
|
|
79
|
+
"has declared war on", "has eaten", "has kidnapped", "has set fire to",
|
|
80
|
+
"is organizing a party in", "has vomited on", "refuses to leave",
|
|
81
|
+
"has hacked", "has stolen", "has fallen in love with", "is meditating on",
|
|
82
|
+
"has cast a spell on", "is protesting against", "has founded a cult in",
|
|
83
|
+
"is dancing samba in", "has summoned a demon in", "has blocked access to",
|
|
84
|
+
"has turned into gold", "is trying to sell", "has written a book about"
|
|
85
|
+
]),
|
|
86
|
+
ends: JSON.stringify([
|
|
87
|
+
"my house keys.", "my will to live.", "the garage door.",
|
|
88
|
+
"my favorite pants.", "the living room router.", "my only pair of shoes.",
|
|
89
|
+
"the laws of physics.", "my dignity.", "the building's elevator.",
|
|
90
|
+
"my Netflix account.", "my toothbrush.", "my house deeds.",
|
|
91
|
+
"my pogs collection.", "the car's handbrake.", "my desire to socialize.",
|
|
92
|
+
"my coffee supply.", "the toilet lid.", "the TV remote.",
|
|
93
|
+
"my lucky socks.", "Western civilization."
|
|
94
|
+
]),
|
|
95
|
+
faqTitle: 'FAQ',
|
|
96
|
+
bibliographyTitle: 'References'
|
|
97
|
+
},
|
|
98
|
+
seo: [
|
|
99
|
+
{ type: 'title', text: 'The Scientific Art of the Perfect Excuse', level: 2 },
|
|
100
|
+
{ type: 'paragraph', html: 'We live in the era of hyperconnectivity. Your phone vibrates, your watch notifies you, and your social agenda looks like a game of Tetris about to lose. The pressure to say "yes" to everything has created an epidemic of social exhaustion.' },
|
|
101
|
+
{ type: 'title', text: 'The Renaissance of JOMO (Joy of Missing Out)', level: 3 },
|
|
102
|
+
{ type: 'paragraph', html: 'While FOMO (Fear of Missing Out) dominated the last decade, digital wellness experts now advocate for <strong>JOMO: The Joy of Missing Out</strong>. It\'s not about isolation, but about intentionality.' },
|
|
103
|
+
{ type: 'tip', title: 'The Formula for the Irrefutable Alibi', html: '<strong>The Dissociated Subject:</strong> You are never the culprit. It is "the wifi", "my cat", "the universe". Shift the blame to an external entity.<br><strong>The Hyperbolic Action:</strong> The situation must be absurd or technical enough that nobody asks for details.<br><strong>The Physical Block:</strong> The final outcome must be binary: either I go or I stay home.' },
|
|
104
|
+
{ type: 'title', text: 'A Brief History of the Excuse', level: 3 },
|
|
105
|
+
{ type: 'list', items: [
|
|
106
|
+
'<strong>Middle Ages:</strong> "My horse has lost a horseshoe" (A timeless classic).',
|
|
107
|
+
'<strong>Industrial Revolution:</strong> "The steam engine overheated".',
|
|
108
|
+
'<strong>Digital Era:</strong> "My internet dropped right in the middle of an update".',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'proscons', items: [
|
|
111
|
+
{ pro: 'Instantly relieves social pressure', con: 'Overuse erodes trust' },
|
|
112
|
+
{ pro: 'Protects your energy and boundaries', con: 'May generate guilt if used carelessly' },
|
|
113
|
+
{ pro: 'Creative and humorous tone defuses tension', con: 'Not suitable for formal or professional contexts' },
|
|
114
|
+
]},
|
|
115
|
+
],
|
|
116
|
+
faq,
|
|
117
|
+
bibliography,
|
|
118
|
+
howTo,
|
|
119
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
120
|
+
};
|