@jjlmoya/utils-performing-arts 1.1.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/.github/workflows/npm-publish.yml +40 -0
- package/.gitignore +6 -0
- package/.stylelintrc.json +98 -0
- package/astro.config.mjs +19 -0
- package/eslint.config.js +201 -0
- package/package.json +79 -0
- package/prompts/create_tool.md +98 -0
- package/prompts/i18n/de.md +16 -0
- package/prompts/i18n/en.md +16 -0
- package/prompts/i18n/es.md +16 -0
- package/prompts/i18n/fr.md +16 -0
- package/prompts/i18n/id.md +16 -0
- package/prompts/i18n/it.md +16 -0
- package/prompts/i18n/ja.md +16 -0
- package/prompts/i18n/ko.md +16 -0
- package/prompts/i18n/nl.md +16 -0
- package/prompts/i18n/pl.md +16 -0
- package/prompts/i18n/pt.md +16 -0
- package/prompts/i18n/ru.md +16 -0
- package/prompts/i18n/sv.md +16 -0
- package/prompts/i18n/tr.md +16 -0
- package/prompts/i18n/zh.md +16 -0
- package/prompts/seo.md +58 -0
- package/prompts/translations/french.md +33 -0
- package/scripts/postinstall.mjs +27 -0
- package/src/category/PerformingArtsCategorySEO.astro +9 -0
- package/src/category/i18n/de.ts +27 -0
- package/src/category/i18n/en.ts +27 -0
- package/src/category/i18n/es.ts +27 -0
- package/src/category/i18n/fr.ts +27 -0
- package/src/category/i18n/id.ts +27 -0
- package/src/category/i18n/it.ts +27 -0
- package/src/category/i18n/ja.ts +27 -0
- package/src/category/i18n/ko.ts +27 -0
- package/src/category/i18n/nl.ts +27 -0
- package/src/category/i18n/pl.ts +27 -0
- package/src/category/i18n/pt.ts +27 -0
- package/src/category/i18n/ru.ts +27 -0
- package/src/category/i18n/sv.ts +27 -0
- package/src/category/i18n/tr.ts +27 -0
- package/src/category/i18n/zh.ts +27 -0
- package/src/category/index.ts +10 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +10 -0
- package/src/entries.ts +3 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +20 -0
- package/src/layouts/PreviewLayout.astro +118 -0
- package/src/pages/[locale]/[slug].astro +165 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/diacritics_density.test.ts +118 -0
- package/src/tests/faq_count.test.ts +18 -0
- package/src/tests/i18n_coverage.test.ts +34 -0
- package/src/tests/inverted_punctuation.test.ts +84 -0
- package/src/tests/locale_completeness.test.ts +23 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_em_dash.test.ts +47 -0
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/pagespeed_best_practices.test.ts +198 -0
- package/src/tests/qa-test-helpers.ts +32 -0
- package/src/tests/qa_bibliography_links.test.ts +43 -0
- package/src/tests/qa_claim_evidence.test.ts +69 -0
- package/src/tests/qa_logic_reference_coverage.test.ts +46 -0
- package/src/tests/qa_runtime_i18n.test.ts +100 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/seo_parity.test.ts +60 -0
- package/src/tests/seo_translation_completeness.test.ts +69 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/slug_language_code_format.test.ts +23 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/spanish_leakage.test.ts +175 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tests/tool_validation.test.ts +16 -0
- package/src/tests/translation_copy.test.ts +115 -0
- package/src/tool/rehearsal-call-sheet-planner/bibliography.astro +6 -0
- package/src/tool/rehearsal-call-sheet-planner/bibliography.ts +12 -0
- package/src/tool/rehearsal-call-sheet-planner/component.astro +74 -0
- package/src/tool/rehearsal-call-sheet-planner/controller.ts +98 -0
- package/src/tool/rehearsal-call-sheet-planner/dom-views.ts +86 -0
- package/src/tool/rehearsal-call-sheet-planner/entry.ts +27 -0
- package/src/tool/rehearsal-call-sheet-planner/evaluator.ts +27 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/de.ts +60 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/en.ts +158 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/es.ts +60 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/fr.ts +60 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/id.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/it.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/ja.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/ko.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/nl.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/pl.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/pt.ts +47 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/ru.ts +48 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/sv.ts +48 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/tr.ts +48 -0
- package/src/tool/rehearsal-call-sheet-planner/i18n/zh.ts +48 -0
- package/src/tool/rehearsal-call-sheet-planner/index.ts +11 -0
- package/src/tool/rehearsal-call-sheet-planner/logic.test.ts +68 -0
- package/src/tool/rehearsal-call-sheet-planner/logic.ts +229 -0
- package/src/tool/rehearsal-call-sheet-planner/rehearsal-call-sheet-planner.css +593 -0
- package/src/tool/rehearsal-call-sheet-planner/seo.astro +16 -0
- package/src/tool/rehearsal-call-sheet-planner/storage.ts +33 -0
- package/src/tool/rehearsal-call-sheet-planner/types.ts +84 -0
- package/src/tool/rehearsal-call-sheet-planner/ui.ts +70 -0
- package/src/tools.ts +8 -0
- package/src/types.ts +68 -0
- package/tsconfig.json +15 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-어 (ko)
|
|
2
|
+
|
|
3
|
+
## 번역
|
|
4
|
+
|
|
5
|
+
다음 내용을 한국어로 현지화하세요.
|
|
6
|
+
|
|
7
|
+
번역하지 말고, 현지화하세요. 목표는 단어를 한 언어에서 다른 언어로 옮기는 것이 아니라, 실제 사람이 처음부터 한국어로 직접 쓴 것처럼 읽히는 텍스트를 만드는 것입니다. 잘 현지화된 텍스트에는 원본 언어의 흔적이 남지 않습니다.
|
|
8
|
+
|
|
9
|
+
인간의 목소리로 쓰세요: 친근하고, 명확하며, 전문적으로. 기계적인 표현, 어색한 문장 구조, 사용 설명서처럼 들리는 표현은 피하세요. 한국어로 자연스럽게 읽히지 않는 부분이 있다면, 자연스러워질 때까지 다시 표현하세요.
|
|
10
|
+
|
|
11
|
+
준수해야 할 지침:
|
|
12
|
+
|
|
13
|
+
- 표현, 비유, 문화적 참조를 한국어 사용 환경에서 자연스럽게 공감될 수 있도록 조정하세요.
|
|
14
|
+
- 기술 용어는 한국어권에서 가장 널리 통용되는 형태로 유지하고, 명확한 대응어가 없으면 원문 용어를 그대로 사용하세요.
|
|
15
|
+
- 원본의 형식(마크다운, 목록, 제목)을 유지하세요.
|
|
16
|
+
- 원문에서 정보를 추가하거나 생략하지 마세요.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-derlands (nl)
|
|
2
|
+
|
|
3
|
+
## Vertaling
|
|
4
|
+
|
|
5
|
+
Lokaliseer de volgende inhoud naar het Nederlands.
|
|
6
|
+
|
|
7
|
+
Vertaal niet: lokaliseer. Het doel is niet om woorden van de ene taal naar de andere over te zetten, maar om een tekst te produceren die klinkt alsof hij vanaf het begin door een echte persoon in het Nederlands is geschreven. Een goed gelokaliseerde tekst laat geen spoor van de brontaal achter.
|
|
8
|
+
|
|
9
|
+
Schrijf met een menselijke stem: warm, helder en professioneel. Vermijd machinale zinnen, geforceerde constructies en alles wat klinkt als een handleiding. Als iets niet natuurlijk stroomt in het Nederlands, herschrijf het dan totdat het dat wel doet.
|
|
10
|
+
|
|
11
|
+
Richtlijnen om te volgen:
|
|
12
|
+
|
|
13
|
+
- Pas uitdrukkingen, metaforen en culturele verwijzingen aan zodat ze natuurlijk resoneren in een Nederlandstalige context.
|
|
14
|
+
- Gebruik technische termen in hun meest gangbare vorm in de Nederlandstalige wereld; als er geen duidelijk equivalent bestaat, behoud dan de originele term.
|
|
15
|
+
- Respecteer de opmaak van het origineel (markdown, lijsten, koppen).
|
|
16
|
+
- Voeg geen informatie toe en laat geen informatie weg ten opzichte van het origineel.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-lski (pl)
|
|
2
|
+
|
|
3
|
+
## Tłumaczenie
|
|
4
|
+
|
|
5
|
+
Zlokalizuj poniższą treść na język polski.
|
|
6
|
+
|
|
7
|
+
Nie tłumacz-kalizuj. Celem nie jest przeniesienie słów z jednego języka do drugiego, lecz stworzenie tekstu, który brzmi tak, jakby od początku napisała go prawdziwa osoba po polsku. Dobrze zlokalizowany tekst nie zdradza języka źródłowego.
|
|
8
|
+
|
|
9
|
+
Pisz ludzkim głosem: bliskim, jasnym i profesjonalnym. Unikaj maszynowego języka, wymuszonych zwrotów i zdań brzmiących jak instrukcja obsługi. Jeśli coś nie brzmi naturalnie po polsku, przeredaguj to tak, żeby brzmiało.
|
|
10
|
+
|
|
11
|
+
Wytyczne do przestrzegania:
|
|
12
|
+
|
|
13
|
+
- Dostosuj wyrażenia, metafory i odniesienia kulturowe do tego, co naturalnie rezonuje w polskojęzycznym kontekście.
|
|
14
|
+
- Zachowaj terminy techniczne w ich najbardziej rozpoznawalnej formie w polskim środowisku; jeśli nie istnieje wyraźny odpowiednik, zachowaj oryginalny termin.
|
|
15
|
+
- Zachowaj formatowanie oryginału (markdown, listy, nagłówki).
|
|
16
|
+
- Nie dodawaj ani nie pomijaj żadnych informacji z oryginału.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-rtuguês (pt)
|
|
2
|
+
|
|
3
|
+
## Tradução
|
|
4
|
+
|
|
5
|
+
Localize o seguinte conteúdo para o português.
|
|
6
|
+
|
|
7
|
+
Não traduza: localize. O objetivo não é transferir palavras de um idioma para outro, mas produzir um texto que pareça ter sido escrito originalmente em português por uma pessoa real. Um texto bem localizado não traz nenhum rastro do idioma de origem.
|
|
8
|
+
|
|
9
|
+
Escreva com voz humana: próxima, clara e profissional. Evite linguagem de máquina, construções forçadas e frases que soam como manual técnico. Se algo não fluir de forma natural em português, reformule até que flua.
|
|
10
|
+
|
|
11
|
+
Critérios a respeitar:
|
|
12
|
+
|
|
13
|
+
- Adapte expressões, metáforas e referências culturais ao que ressoaria de forma natural num contexto lusófono.
|
|
14
|
+
- Mantenha os termos técnicos na forma mais reconhecida no mundo lusófono; se não existir um equivalente claro, conserve o termo original.
|
|
15
|
+
- Respeite a formatação do original (markdown, listas, cabeçalhos).
|
|
16
|
+
- Não acrescente nem omita informação em relação ao original.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-сский (ru)
|
|
2
|
+
|
|
3
|
+
## Перевод
|
|
4
|
+
|
|
5
|
+
Локализуйте следующий контент на русский язык.
|
|
6
|
+
|
|
7
|
+
Не переводите-кализуйте. Цель не в том, чтобы перенести слова из одного языка в другой, а в том, чтобы создать текст, который звучит так, словно его с самого начала написал живой человек по-русски. В хорошо локализованном тексте не остаётся следов языка оригинала.
|
|
8
|
+
|
|
9
|
+
Пишите человеческим голосом: тёплым, ясным и профессиональным. Избегайте машинного языка, вынужденных конструкций и фраз, которые звучат как инструкция по эксплуатации. Если что-то не звучит по-русски естественно, перефразируйте это так, чтобы звучало.
|
|
10
|
+
|
|
11
|
+
Принципы, которых следует придерживаться:
|
|
12
|
+
|
|
13
|
+
- Адаптируйте выражения, метафоры и культурные отсылки к тому, что естественно воспринимается в русскоязычном контексте.
|
|
14
|
+
- Используйте технические термины в их наиболее распространённой форме в русскоязычном мире; если чёткого эквивалента нет, сохраните оригинальный термин.
|
|
15
|
+
- Соблюдайте форматирование оригинала (markdown, списки, заголовки).
|
|
16
|
+
- Не добавляйте и не опускайте никакой информации по сравнению с оригиналом.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-enska (sv)
|
|
2
|
+
|
|
3
|
+
## Översättning
|
|
4
|
+
|
|
5
|
+
Lokalisera följande innehåll till svenska.
|
|
6
|
+
|
|
7
|
+
Översätt inte: lokalisera. Målet är inte att överföra ord från ett språk till ett annat, utan att producera en text som låter som om den skrevs direkt på svenska av en verklig person. En välokaliserad text lämnar inga spår av källspråket.
|
|
8
|
+
|
|
9
|
+
Skriv med en mänsklig röst: varm, tydlig och professionell. Undvik maskinspråk, krystade konstruktioner och meningar som låter som en instruktionsmanual. Om något inte flödar naturligt på svenska, skriv om det tills det gör det.
|
|
10
|
+
|
|
11
|
+
Riktlinjer att följa:
|
|
12
|
+
|
|
13
|
+
- Anpassa uttryck, metaforer och kulturella referenser till vad som skulle resonera naturligt i ett svenskspråkigt sammanhang.
|
|
14
|
+
- Använd tekniska termer i deras mest vedertagna form i den svenskspråkiga världen; om det inte finns något tydligt motsvarande, behåll den ursprungliga termen.
|
|
15
|
+
- Respektera originalets formatering (markdown, listor, rubriker).
|
|
16
|
+
- Lägg inte till eller utelämna någon information jämfört med originalet.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts-rkçe (tr)
|
|
2
|
+
|
|
3
|
+
## Çeviri
|
|
4
|
+
|
|
5
|
+
Aşağıdaki içeriği Türkçeye yerelleştirin.
|
|
6
|
+
|
|
7
|
+
Çeviri yapmayın: yerelleştirin. Amaç, kelimeleri bir dilden diğerine aktarmak değil; sanki başından beri gerçek bir kişi tarafından Türkçe yazılmış gibi okunan bir metin üretmektir. İyi yerelleştirilmiş bir metinde kaynak dilin izi kalmaz.
|
|
8
|
+
|
|
9
|
+
İnsan sesiyle yazın: sıcak, açık ve profesyonel. Makine diline, zoraki ifadelere ve kullanım kılavuzu gibi ses çıkaran cümlelere yer vermeyin. Türkçede doğal akmayan bir şey varsa, akana kadar yeniden ifade edin.
|
|
10
|
+
|
|
11
|
+
Uyulması gereken yönergeler:
|
|
12
|
+
|
|
13
|
+
- İfadeleri, metaforları ve kültürel referansları Türkçe konuşan bir bağlamda doğal yankı uyandıracak şekilde uyarlayın.
|
|
14
|
+
- Teknik terimleri Türkçe konuşan dünyada en yaygın bilinen biçimleriyle kullanın; net bir karşılık yoksa orijinal terimi koruyun.
|
|
15
|
+
- Orijinalin biçimlendirmesine (markdown, listeler, başlıklar) uyun.
|
|
16
|
+
- Orijinale göre bilgi eklemeyin veya çıkarmayın.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Prompts- (zh)
|
|
2
|
+
|
|
3
|
+
## 翻译
|
|
4
|
+
|
|
5
|
+
请将以下内容本地化为中文。
|
|
6
|
+
|
|
7
|
+
不要翻译,要本地化。目标不是将词语从一种语言转移到另一种语言,而是产出一段读起来像是由真实的人直接用中文写成的文字。本地化质量上乘的文本不会留下任何源语言的痕迹。
|
|
8
|
+
|
|
9
|
+
以人的声音书写:亲切、清晰、专业。避免机器腔、生硬的表达方式,以及任何听起来像操作手册的句子。如果某些内容用中文读起来不自然,就重新表达,直到自然为止。
|
|
10
|
+
|
|
11
|
+
请遵循以下准则:
|
|
12
|
+
|
|
13
|
+
- 将表达方式、比喻和文化参照调整为在中文语境中能够自然共鸣的内容。
|
|
14
|
+
- 技术术语请使用在中文世界最广为人知的形式;如果没有明确的对应词,保留原文术语。
|
|
15
|
+
- 保留原文的格式(markdown、列表、标题)。
|
|
16
|
+
- 不得增加或删减原文中的任何信息。
|
package/prompts/seo.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Aquí tienes la Mega-Prompt Final Evolucionada. Está diseñada para que sea un estándar universal: funciona para calculadoras, conversores, generadores o cualquier utilidad técnica.
|
|
2
|
+
|
|
3
|
+
El secreto de esta prompt es que no pide "un texto", sino una arquitectura de información que Google interpreta como contenido de alta calidad (E-E-A-T).
|
|
4
|
+
|
|
5
|
+
La Prompt: El Arquitecto de Utilidades SEO
|
|
6
|
+
Copia y pega lo siguiente:
|
|
7
|
+
|
|
8
|
+
Actúa como un Especialista SEO Senior experto en Programmatic SEO y Herramientas Online para el sector veterinario y de mascotas. Tu misión es redactar el contenido de apoyo para una página cuya función principal es una utilidad interactiva (calculadora, conversor o generador).
|
|
9
|
+
|
|
10
|
+
Objetivo: Crear un texto semántico de entre 400 y 600 palabras que aporte autoridad y contexto técnico sin distraer al usuario de la herramienta principal.
|
|
11
|
+
|
|
12
|
+
Tu "Caja de Herramientas" de componentes Astro:
|
|
13
|
+
|
|
14
|
+
SEOArticle: Contenedor raíz.
|
|
15
|
+
|
|
16
|
+
SEOTitle: Encabezados (level 2 para secciones, level 3 para subsecciones).
|
|
17
|
+
|
|
18
|
+
SEOList: Pasos de uso o beneficios.
|
|
19
|
+
|
|
20
|
+
SEOTable: Datos de referencia, rangos o comparativas.
|
|
21
|
+
|
|
22
|
+
SEOTip: El "Consejo del experto" (ideal para recomendaciones veterinarias).
|
|
23
|
+
|
|
24
|
+
SEOCard: Resaltar conceptos clave o fórmulas (ej: fórmula RER, etapas de vida).
|
|
25
|
+
|
|
26
|
+
SEOStats: Datos numéricos o estadísticas del sector (ej: % de mascotas con sobrepeso).
|
|
27
|
+
|
|
28
|
+
SEOGlossary: Definiciones técnicas rápidas (RER, DER, kcal/kg, etc.).
|
|
29
|
+
|
|
30
|
+
SEOProsCons: Ventajas y limitaciones de la herramienta.
|
|
31
|
+
|
|
32
|
+
SEOSummary: Resumen ejecutivo (TL;DR) para situar justo debajo del título.
|
|
33
|
+
|
|
34
|
+
SEODiagnostic: Checklist de validación o "Cuándo usar esta herramienta".
|
|
35
|
+
|
|
36
|
+
Reglas de Oro:
|
|
37
|
+
|
|
38
|
+
Prioriza la Escaneabilidad: El usuario quiere respuestas rápidas. Usa frases cortas y muchos componentes visuales.
|
|
39
|
+
|
|
40
|
+
Contexto Semántico: Incluye palabras clave LSI (latentes) y responde a la intención de búsqueda secundaria (el "qué pasa después" de usar la herramienta).
|
|
41
|
+
|
|
42
|
+
Autoridad Veterinaria: Cita fuentes reales (WSAVA, FEDIAF, AAHA) cuando sea relevante. El tono debe ser de experto en nutrición o medicina animal, no genérico.
|
|
43
|
+
|
|
44
|
+
Estructura Obligatoria:
|
|
45
|
+
|
|
46
|
+
Un <SEOSummary> al inicio con los puntos clave.
|
|
47
|
+
|
|
48
|
+
Una sección de "Cómo funciona" usando <SEOList> o <SEOCard>.
|
|
49
|
+
|
|
50
|
+
Una <SEOTable> con datos de referencia (ej: factores RER/DER, equivalencias de edad, valores calóricos).
|
|
51
|
+
|
|
52
|
+
Un <SEOTip> con valor añadido real (consejo del veterinario).
|
|
53
|
+
|
|
54
|
+
Un <SEODiagnostic> para ayudar al usuario a interpretar sus resultados.
|
|
55
|
+
|
|
56
|
+
Formato de Salida:
|
|
57
|
+
Devuelve exclusivamente el código para un archivo .astro. No incluyas explicaciones innecesarias fuera del código. Usa las props correctamente (ej: <SEOTitle level={2}>).
|
|
58
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Guide de Traduction Technique Élite (Français)
|
|
2
|
+
|
|
3
|
+
Tu es un expert natif français, spécialiste en médecine vétérinaire et passionné de bien-être animal. Ton objectif est de traduire les utilitaires de @jjlmoya/utils-pets avec une précision chirurgicale tout en dominant les résultats de recherche (SEO long-tail).
|
|
4
|
+
|
|
5
|
+
## Ta Mission
|
|
6
|
+
Transformer un fichier technique TypeScript (EN/ES) en une version française qui semble avoir été écrite par un vétérinaire praticien né en France. Pas de traduction littérale, mais une adaptation naturelle et fluide du domaine vétérinaire.
|
|
7
|
+
|
|
8
|
+
## Principes de Fer (Règles Strictes)
|
|
9
|
+
- **ZÉRO Commentaires**: Aucun commentaire dans le code (`//` ou `/* */`). Ton code doit être pur.
|
|
10
|
+
- **Intégrité TypeScript**: Préserve exactement la structure des objets et les types (ex: `PetAgeLocaleContent`, `PetRationLocaleContent`, imports, etc.).
|
|
11
|
+
- **SEO Long-Tail Dominant**: Les slugs doivent être riches en mots-clés stratégiques pour le marché français.
|
|
12
|
+
- Âge: `calculateur-age-chien-chat-annees-humaines`
|
|
13
|
+
- Ration: `calculateur-ration-quotidienne-chien-chat-nutrition`
|
|
14
|
+
- **Langage Naturel & Expert**: Utilise le "Vous" (formel). Emploie des termes techniques premium : *RER*, *DER*, *ration journalière*, *stade de vie*, *besoins énergétiques*, *condition corporelle*, *métabolisme basal*.
|
|
15
|
+
|
|
16
|
+
## Vocabulaire Vétérinaire de Référence
|
|
17
|
+
- RER (Resting Energy Requirement) → Besoins Énergétiques au Repos (BER)
|
|
18
|
+
- DER (Daily Energy Requirement) → Besoins Énergétiques Journaliers (BEJ)
|
|
19
|
+
- Life stage → Stade de vie
|
|
20
|
+
- Puppy / Kitten → Chiot / Chaton
|
|
21
|
+
- Senior → Senior (ou Âgé)
|
|
22
|
+
- Sterilised → Stérilisé(e)
|
|
23
|
+
- Dry food → Croquettes / Aliment sec
|
|
24
|
+
- Wet food → Pâtée / Aliment humide
|
|
25
|
+
- Body weight → Poids corporel
|
|
26
|
+
- Caloric density → Densité calorique (kcal/kg)
|
|
27
|
+
|
|
28
|
+
## Structure de la SEO
|
|
29
|
+
Dans la section `seo`, assure-toi que le contenu est riche (400-600 mots), structuré avec des balises HTML (`<strong>`, `<h3>`) et des listes qui apportent une réelle valeur ajoutée au propriétaire d'animal. Cite des sources reconnues : WSAVA, FEDIAF, AAHA.
|
|
30
|
+
|
|
31
|
+
## Fichier Source à Traduire
|
|
32
|
+
[Colle ici le contenu source]
|
|
33
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, readdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
|
|
5
|
+
const libDir = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const toolsDir = join(libDir, '../src/tool');
|
|
7
|
+
|
|
8
|
+
const inNodeModules = libDir.includes('node_modules');
|
|
9
|
+
if (!inNodeModules) process.exit(0);
|
|
10
|
+
|
|
11
|
+
const projectRoot = join(libDir, '../../../..');
|
|
12
|
+
const categoryKey = JSON.parse(readFileSync(join(libDir, '../package.json'), 'utf8')).name.replace('@jjlmoya/utils-', '');
|
|
13
|
+
const destDir = join(projectRoot, `public/styles/lib/${categoryKey}`);
|
|
14
|
+
|
|
15
|
+
mkdirSync(destDir, { recursive: true });
|
|
16
|
+
|
|
17
|
+
const tools = readdirSync(toolsDir, { withFileTypes: true }).filter(d => d.isDirectory());
|
|
18
|
+
for (const tool of tools) {
|
|
19
|
+
const toolDir = join(toolsDir, tool.name);
|
|
20
|
+
let files;
|
|
21
|
+
try { files = readdirSync(toolDir).filter(f => f.endsWith('.css')); }
|
|
22
|
+
catch { continue; }
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
writeFileSync(join(destDir, file), readFileSync(join(toolDir, file)));
|
|
25
|
+
console.log(`[@jjlmoya/utils-${categoryKey}] copied ${file}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { performingArtsCategory } from './index';
|
|
4
|
+
|
|
5
|
+
const locale: string = Astro.props.locale ?? 'es';
|
|
6
|
+
const categoryContent = await performingArtsCategory.i18n[locale as keyof typeof performingArtsCategory.i18n]?.();
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
{categoryContent && <SEORenderer content={{ locale, sections: categoryContent.seo }} />}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Werkzeuge für Probenplanung in der darstellenden Kunst';
|
|
5
|
+
const description = 'Lokale Browser-Werkzeuge für Probenplanung, Besetzungslisten, Verfügbarkeitskonflikte und übersichtliche Produktionstage.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Performing Arts Rehearsal Tools';
|
|
5
|
+
const description = 'Private browser tools for planning rehearsals, building call sheets, spotting availability conflicts, and keeping a production day readable.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Herramientas de ensayo para artes escénicas';
|
|
5
|
+
const description = 'Herramientas privadas en el navegador para planificar ensayos, crear convocatorias, detectar conflictos y ordenar cada jornada de producción.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Outils de répétition pour les arts du spectacle';
|
|
5
|
+
const description = 'Outils privés dans le navigateur pour planifier les répétitions, préparer les convocations, repérer les conflits et organiser la production.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Alat latihan seni pertunjukan';
|
|
5
|
+
const description = 'Alat privat di browser untuk merencanakan latihan, membuat lembar panggilan, menemukan konflik ketersediaan, dan menata hari produksi.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Strumenti per le prove delle arti performative';
|
|
5
|
+
const description = 'Strumenti privati nel browser per pianificare le prove, creare i fogli di convocazione, trovare conflitti e organizzare la giornata.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = '舞台芸術のリハーサルツール';
|
|
5
|
+
const description = 'リハーサル計画、出演者の連絡表、空き時間の確認、制作日の整理に使えるブラウザ上のプライベートツールです。';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = '공연 예술 리허설 도구';
|
|
5
|
+
const description = '리허설 계획, 콜시트 작성, 일정 충돌 확인, 제작일 정리를 돕는 브라우저 기반 비공개 도구입니다.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Repetitietools voor podiumkunsten';
|
|
5
|
+
const description = 'Privétools in de browser voor repetitieplanning, callsheets, beschikbaarheidsconflicten en een overzichtelijke productiedag.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Narzędzia prób dla sztuk scenicznych';
|
|
5
|
+
const description = 'Prywatne narzędzia w przeglądarce do planowania prób, kart obsady, wykrywania konfliktów i porządkowania dnia produkcji.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
const slug = 'performing-arts';
|
|
4
|
+
const title = 'Ferramentas de ensaio para artes performativas';
|
|
5
|
+
const description = 'Ferramentas privadas no navegador para planear ensaios, criar folhas de chamada, detetar conflitos e organizar o dia de produção.';
|
|
6
|
+
|
|
7
|
+
export const content: CategoryLocaleContent = {
|
|
8
|
+
slug,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
seo: [
|
|
12
|
+
{ type: 'title', text: 'Build a Rehearsal Day from Real Constraints', level: 2 },
|
|
13
|
+
{ type: 'paragraph', html: 'A rehearsal plan has to hold several truths at once: scenes need time, people need to be available, rooms need to be usable, and the day still needs breathing room. This planner reads a simple scene list and lays it onto a working day so a director or stage manager can see the shape of the call before sending it out.' },
|
|
14
|
+
{ type: 'title', text: 'Make Conflicts Visible Before the Call Goes Out', level: 2 },
|
|
15
|
+
{ type: 'paragraph', html: 'Each scene is checked against the availability windows you enter for its participants and room. The result separates clean sessions from conflicts and scenes that no longer fit the day. It is a planning aid, not a replacement for a production calendar or local working time rules.' },
|
|
16
|
+
{ type: 'title', text: 'Keep Production Notes in the Same Place', level: 2 },
|
|
17
|
+
{ type: 'paragraph', html: 'The call sheet keeps scene notes, participant calls, room calls, and the day overview together. Export the plan as JSON for your own records or print a clean call sheet for the room. Nothing leaves the browser, and the last draft is saved locally on the device.' },
|
|
18
|
+
{ type: 'title', text: 'Privacy and Practical Limits', level: 2 },
|
|
19
|
+
{ type: 'paragraph', html: 'This tool does not send names, schedules, or production notes to a server. It does not manage contracts, confirm legal compliance, or solve overlapping multi-room optimization. Treat the result as a transparent first draft and confirm the final call with the people and rules that govern your production.' },
|
|
20
|
+
{ type: 'stats', items: [
|
|
21
|
+
{ label: 'Tool', value: '1', icon: 'mdi:theater' },
|
|
22
|
+
{ label: 'Rooms', value: 'Any', icon: 'mdi:door-open' },
|
|
23
|
+
{ label: 'Format', value: 'Offline', icon: 'mdi:cloud-off-outline' },
|
|
24
|
+
{ label: 'Privacy', value: 'Local', icon: 'mdi:shield-check' },
|
|
25
|
+
] },
|
|
26
|
+
],
|
|
27
|
+
};
|