feat(alternatives): add Teleparty & Screen Sharing comparison pages with i18n

- Add article-style comparison pages for Teleparty and Screen Sharing
- Replace comparison tables with honest prose sections
- Add 15-language hreflang alternates and sitemap entries
- Add English locale fallback for untranslated languages
- Replace placeholder Draft copy with real English and German text
- Remove old Draft locale keys from all 13 non-EN/DE locales
- Rebuild outputs with zero TODO/Draft/noindex issues
This commit is contained in:
KoalaDev
2026-06-25 00:12:04 +02:00
parent 24cac52674
commit 06b5ffbd0b
28 changed files with 972 additions and 46 deletions
+189
View File
@@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="{{LANG_CODE}}" class="lang-{{LANG_CODE}}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ALT_INDEX_TITLE}}</title>
<link rel="preload" href="{{ASSET_PATH}}style.min.css" as="style">
<link rel="stylesheet" href="{{ASSET_PATH}}style.min.css">
<link rel="icon" type="image/webp" href="{{ASSET_PATH}}assets/NewLogoIcon_64.webp">
<link rel="canonical" href="https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives">
<link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives">
<link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives">
<link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives">
<link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives">
<link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives">
<link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives">
<link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives">
<link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives">
<link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives">
<link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives">
<link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives">
<link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives">
<link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives">
<link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives">
<link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives">
<link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives">
<meta name="description" content="{{ALT_INDEX_META_DESC}}">
<meta name="robots" content="index, follow">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives">
<meta property="og:title" content="{{ALT_INDEX_TITLE}}">
<meta property="og:description" content="{{ALT_INDEX_META_DESC}}">
<meta property="og:image" content="https://sync.koalastuff.net/assets/KoalaSearching.webp">
<!-- Twitter / X -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ALT_INDEX_TITLE}}">
<meta name="twitter:description" content="{{ALT_INDEX_META_DESC}}">
<meta name="twitter:image" content="https://sync.koalastuff.net/assets/KoalaSearching.webp">
<!-- Structured Data (Schema.org) for Breadcrumbs -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}"
},
{
"@type": "ListItem",
"position": 2,
"name": "Alternatives",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives"
}
]
}
</script>
<!-- Mobile Browser Theme Styling -->
<meta name="theme-color" content="#0f172a">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<script src="{{ASSET_PATH}}lang-init.min.js"></script>
</head>
<body>
<div class="bg-blobs">
<div class="blob blob-1"></div>
<div class="blob blob-2"></div>
<div class="blob blob-3"></div>
</div>
<nav>
<div class="container nav-content">
<a href="{{ASSET_PATH}}" class="logo-area" style="text-decoration: none;">
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo" width="40" height="40">
<span>KoalaSync</span>
</a>
<div class="nav-links">
<a href="{{ASSET_PATH}}" style="display: inline-flex; align-items: center; gap: 6px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="width: 16px; height: 16px; display: block;"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
<span>Home</span>
</a>
<a href="https://github.com/Shik3i/KoalaSync" target="_blank" rel="noopener" style="display: inline-flex; align-items: center; gap: 6px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="16" height="16" aria-hidden="true" style="display: block;"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
GitHub
</a>
</div>
<div class="nav-right">
<div class="lang-select-container">
<select class="lang-dropdown" aria-label="Select Language">
<option value="en">🇬🇧 English</option>
<option value="de">🇩🇪 Deutsch</option>
<option value="fr">🇫🇷 Français</option>
<option value="es">🇪🇸 Español</option>
<option value="pt-BR">🇧🇷 Português (Brasil)</option>
<option value="ru">🇷🇺 Русский</option>
<option value="it">🇮🇹 Italiano</option>
<option value="pl">🇵🇱 Polski</option>
<option value="tr">🇹🇷 Türkçe</option>
<option value="nl">🇳🇱 Nederlands</option>
<option value="ja">🇯🇵 日本語</option>
<option value="ko">🇰🇷 한국어</option>
<option value="pt">🇵🇹 Português (Portugal)</option>
</select>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="chevron-icon"><polyline points="6 9 12 15 18 9"/></svg>
</div>
<button class="hamburger" aria-label="Menu" aria-expanded="false"></button>
</div>
</div>
</nav>
<main class="legal-content">
<div class="legal-card" data-reveal style="padding: 2.5rem 2rem;">
<div style="display: flex; justify-content: center;">
<img src="{{ASSET_PATH}}assets/KoalaSearching.webp" alt="Koala using magnifying glass" class="legal-mascot" width="180" height="180">
</div>
<h1>
<span lang="en">Guides &amp; Comparisons</span>
<span lang="de">Vergleiche &amp; Anleitungen</span>
</h1>
<p style="text-align: center; font-size: 0.95rem; line-height: 1.6; max-width: 600px; margin: 0 auto 2rem auto; color: var(--text-muted);">
<span lang="en">How does KoalaSync stack up against other watch party tools and streaming solutions? Read our honest, technical comparisons to find the best fit for your remote movie nights.</span>
<span lang="de">Wie schlägt sich KoalaSync im Vergleich zu anderen Watch-Party-Tools und Streaming-Lösungen? Lies unsere ehrlichen, technischen Vergleiche, um die passende Lösung für deine Filmabende zu finden.</span>
</p>
<!-- Cards Grid Layout -->
<div class="guides-grid" style="display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-top: 2rem; margin-bottom: 2rem;">
<!-- Teleparty Card -->
<a href="{{ASSET_PATH}}{{LANG_PREFIX}}alternatives/teleparty" class="guide-card" style="text-decoration: none; background: rgba(255, 255, 255, 0.03); border: 1px solid var(--glass-border); border-radius: 12px; padding: 1.5rem; display: flex; flex-direction: column; justify-content: space-between;">
<div>
<h3 style="margin-top: 0; margin-bottom: 0.75rem; color: #fff; font-size: 1.25rem;">{{ALT_TELEPARTY_TITLE}}</h3>
<p style="font-size: 0.9rem; line-height: 1.5; color: var(--text-muted); margin-bottom: 1.5rem;">{{ALT_TELEPARTY_META_DESC}}</p>
</div>
<div class="btn btn-primary" style="align-self: flex-start; padding: 0.5rem 1rem; font-size: 0.85rem; border-radius: 6px;">
<span lang="en">Read Comparison &rarr;</span>
<span lang="de">Vergleich lesen &rarr;</span>
</div>
</a>
<!-- Screen Sharing Card -->
<a href="{{ASSET_PATH}}{{LANG_PREFIX}}alternatives/screen-sharing" class="guide-card" style="text-decoration: none; background: rgba(255, 255, 255, 0.03); border: 1px solid var(--glass-border); border-radius: 12px; padding: 1.5rem; display: flex; flex-direction: column; justify-content: space-between;">
<div>
<h3 style="margin-top: 0; margin-bottom: 0.75rem; color: #fff; font-size: 1.25rem;">{{ALT_SCREEN_TITLE}}</h3>
<p style="font-size: 0.9rem; line-height: 1.5; color: var(--text-muted); margin-bottom: 1.5rem;">{{ALT_SCREEN_META_DESC}}</p>
</div>
<div class="btn btn-primary" style="align-self: flex-start; padding: 0.5rem 1rem; font-size: 0.85rem; border-radius: 6px;">
<span lang="en">Read Comparison &rarr;</span>
<span lang="de">Vergleich lesen &rarr;</span>
</div>
</a>
</div>
<!-- CTA block -->
<div style="display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--glass-border);">
<a href="{{ASSET_PATH}}" class="btn btn-primary" style="margin-bottom: 1.5rem;">{{ALT_TRY_KOALASYNC}}</a>
</div>
</div>
</main>
<footer>
<div class="container">
<p>&copy; 2026 KoalaSync. {{FOOTER_MIT}}</p>
<p style="font-size: 0.8rem; margin-top: 0.5rem;">{{FOOTER_RAM}}</p>
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="{{ASSET_PATH}}{{FOOTER_LEGAL_LINK}}">{{FOOTER_LEGAL}}</a>
<a href="{{ASSET_PATH}}{{FOOTER_PRIVACY_LINK}}">{{FOOTER_PRIVACY}}</a>
<a href="{{ASSET_PATH}}{{LANG_PREFIX}}alternatives"><span><span lang="en">Guides & comparisons</span><span lang="de">Vergleiche & Anleitungen</span></span></a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
</a>
</div>
</div>
</footer>
<script src="{{ASSET_PATH}}app.min.js"></script>
</body>
</html>
+199
View File
@@ -0,0 +1,199 @@
<!DOCTYPE html>
<html lang="{{LANG_CODE}}" class="lang-{{LANG_CODE}}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ALT_SCREEN_TITLE}}</title>
<link rel="preload" href="{{ASSET_PATH}}style.min.css" as="style">
<link rel="stylesheet" href="{{ASSET_PATH}}style.min.css">
<link rel="icon" type="image/webp" href="{{ASSET_PATH}}assets/NewLogoIcon_64.webp">
<link rel="canonical" href="https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives/screen-sharing">
<link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives/screen-sharing">
<link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives/screen-sharing">
<link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives/screen-sharing">
<link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives/screen-sharing">
<link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives/screen-sharing">
<link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives/screen-sharing">
<link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives/screen-sharing">
<link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives/screen-sharing">
<link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives/screen-sharing">
<link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives/screen-sharing">
<link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives/screen-sharing">
<link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives/screen-sharing">
<link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives/screen-sharing">
<link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives/screen-sharing">
<link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives/screen-sharing">
<link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives/screen-sharing">
<meta name="description" content="{{ALT_SCREEN_META_DESC}}">
<meta name="robots" content="index, follow">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="article">
<meta property="og:url" content="https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives/screen-sharing">
<meta property="og:title" content="{{ALT_SCREEN_TITLE}}">
<meta property="og:description" content="{{ALT_SCREEN_META_DESC}}">
<meta property="og:image" content="https://sync.koalastuff.net/assets/PopcornFriends.webp">
<!-- Twitter / X -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ALT_SCREEN_TITLE}}">
<meta name="twitter:description" content="{{ALT_SCREEN_META_DESC}}">
<meta name="twitter:image" content="https://sync.koalastuff.net/assets/PopcornFriends.webp">
<!-- Structured Data (Schema.org) for Breadcrumbs -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}"
},
{
"@type": "ListItem",
"position": 2,
"name": "Alternatives",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives"
},
{
"@type": "ListItem",
"position": 3,
"name": "KoalaSync vs Screen Sharing",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives/screen-sharing"
}
]
}
</script>
<!-- Mobile Browser Theme Styling -->
<meta name="theme-color" content="#0f172a">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<script src="{{ASSET_PATH}}lang-init.min.js"></script>
</head>
<body>
<div class="bg-blobs">
<div class="blob blob-1"></div>
<div class="blob blob-2"></div>
<div class="blob blob-3"></div>
</div>
<nav>
<div class="container nav-content">
<a href="{{ASSET_PATH}}" class="logo-area" style="text-decoration: none;">
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo" width="40" height="40">
<span>KoalaSync</span>
</a>
<div class="nav-links">
<a href="{{ASSET_PATH}}" style="display: inline-flex; align-items: center; gap: 6px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="width: 16px; height: 16px; display: block;"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
<span>Home</span>
</a>
<a href="https://github.com/Shik3i/KoalaSync" target="_blank" rel="noopener" style="display: inline-flex; align-items: center; gap: 6px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="16" height="16" aria-hidden="true" style="display: block;"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
GitHub
</a>
</div>
<div class="nav-right">
<div class="lang-select-container">
<select class="lang-dropdown" aria-label="Select Language">
<option value="en">🇬🇧 English</option>
<option value="de">🇩🇪 Deutsch</option>
<option value="fr">🇫🇷 Français</option>
<option value="es">🇪🇸 Español</option>
<option value="pt-BR">🇧🇷 Português (Brasil)</option>
<option value="ru">🇷🇺 Русский</option>
<option value="it">🇮🇹 Italiano</option>
<option value="pl">🇵🇱 Polski</option>
<option value="tr">🇹🇷 Türkçe</option>
<option value="nl">🇳🇱 Nederlands</option>
<option value="ja">🇯🇵 日本語</option>
<option value="ko">🇰🇷 한국어</option>
<option value="pt">🇵🇹 Português (Portugal)</option>
</select>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="chevron-icon"><polyline points="6 9 12 15 18 9"/></svg>
</div>
<button class="hamburger" aria-label="Menu" aria-expanded="false"></button>
</div>
</div>
</nav>
<main class="legal-content">
<div class="legal-card" data-reveal style="padding: 2rem;">
<div style="display: flex; justify-content: center;">
<img src="{{ASSET_PATH}}assets/PopcornFriends.webp" alt="Koalas watching movie with popcorn" class="legal-mascot" width="180" height="180">
</div>
<h1>{{ALT_SCREEN_TITLE}}</h1>
<!-- Intro -->
<section>
<p><em>{{ALT_SCREEN_INTRO}}</em></p>
</section>
<!-- When screen sharing is enough -->
<section>
<h2>{{ALT_SCREEN_WHEN_ENOUGH_TITLE}}</h2>
<p>{{ALT_SCREEN_WHEN_ENOUGH_BODY}}</p>
</section>
<!-- Where screen sharing gets annoying -->
<section>
<h2>{{ALT_SCREEN_WHEN_ANNOYING_TITLE}}</h2>
<p>{{ALT_SCREEN_WHEN_ANNOYING_BODY}}</p>
</section>
<!-- Why KoalaSync can feel cleaner -->
<section>
<h2>{{ALT_SCREEN_WHY_CLEANER_TITLE}}</h2>
<p>{{ALT_SCREEN_WHY_CLEANER_BODY}}</p>
</section>
<!-- Honest limitations -->
<section>
<h2>{{ALT_SCREEN_LIMITS_TITLE}}</h2>
<p>{{ALT_SCREEN_LIMITS_BODY}}</p>
</section>
<!-- Summary -->
<section>
<h2>{{ALT_SCREEN_SUMMARY_TITLE}}</h2>
<p>{{ALT_SCREEN_SUMMARY_BODY}}</p>
</section>
<!-- CTA block -->
<div style="display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--glass-border);">
<a href="{{ASSET_PATH}}" class="btn btn-primary" style="margin-bottom: 1.5rem;">{{ALT_TRY_KOALASYNC}}</a>
<p style="font-size: 0.9rem; text-align: center;">
<a href="{{ASSET_PATH}}alternatives/teleparty" style="color: var(--accent); text-decoration: none;">{{ALT_TELEPARTY_TITLE}}</a>
</p>
</div>
</div>
</main>
<footer>
<div class="container">
<p>&copy; 2026 KoalaSync. {{FOOTER_MIT}}</p>
<p style="font-size: 0.8rem; margin-top: 0.5rem;">{{FOOTER_RAM}}</p>
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="{{ASSET_PATH}}{{FOOTER_LEGAL_LINK}}">{{FOOTER_LEGAL}}</a>
<a href="{{ASSET_PATH}}{{FOOTER_PRIVACY_LINK}}">{{FOOTER_PRIVACY}}</a>
<a href="{{ASSET_PATH}}{{LANG_PREFIX}}alternatives"><span><span lang="en">Guides & comparisons</span><span lang="de">Vergleiche & Anleitungen</span></span></a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
</a>
</div>
</div>
</footer>
<script src="{{ASSET_PATH}}app.min.js"></script>
</body>
</html>
+199
View File
@@ -0,0 +1,199 @@
<!DOCTYPE html>
<html lang="{{LANG_CODE}}" class="lang-{{LANG_CODE}}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ALT_TELEPARTY_TITLE}}</title>
<link rel="preload" href="{{ASSET_PATH}}style.min.css" as="style">
<link rel="stylesheet" href="{{ASSET_PATH}}style.min.css">
<link rel="icon" type="image/webp" href="{{ASSET_PATH}}assets/NewLogoIcon_64.webp">
<link rel="canonical" href="https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives/teleparty">
<link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives/teleparty">
<link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives/teleparty">
<link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives/teleparty">
<link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives/teleparty">
<link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives/teleparty">
<link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives/teleparty">
<link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives/teleparty">
<link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives/teleparty">
<link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives/teleparty">
<link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives/teleparty">
<link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives/teleparty">
<link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives/teleparty">
<link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives/teleparty">
<link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives/teleparty">
<link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives/teleparty">
<link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives/teleparty">
<meta name="description" content="{{ALT_TELEPARTY_META_DESC}}">
<meta name="robots" content="index, follow">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="article">
<meta property="og:url" content="https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives/teleparty">
<meta property="og:title" content="{{ALT_TELEPARTY_TITLE}}">
<meta property="og:description" content="{{ALT_TELEPARTY_META_DESC}}">
<meta property="og:image" content="https://sync.koalastuff.net/assets/ProContraKoala.webp">
<!-- Twitter / X -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ALT_TELEPARTY_TITLE}}">
<meta name="twitter:description" content="{{ALT_TELEPARTY_META_DESC}}">
<meta name="twitter:image" content="https://sync.koalastuff.net/assets/ProContraKoala.webp">
<!-- Structured Data (Schema.org) for Breadcrumbs -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}"
},
{
"@type": "ListItem",
"position": 2,
"name": "Alternatives",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives"
},
{
"@type": "ListItem",
"position": 3,
"name": "KoalaSync vs Teleparty",
"item": "https://sync.koalastuff.net/{{LANG_PREFIX}}alternatives/teleparty"
}
]
}
</script>
<!-- Mobile Browser Theme Styling -->
<meta name="theme-color" content="#0f172a">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<script src="{{ASSET_PATH}}lang-init.min.js"></script>
</head>
<body>
<div class="bg-blobs">
<div class="blob blob-1"></div>
<div class="blob blob-2"></div>
<div class="blob blob-3"></div>
</div>
<nav>
<div class="container nav-content">
<a href="{{ASSET_PATH}}" class="logo-area" style="text-decoration: none;">
<img src="{{ASSET_PATH}}assets/NewLogoIcon.webp" alt="KoalaSync Logo" width="40" height="40">
<span>KoalaSync</span>
</a>
<div class="nav-links">
<a href="{{ASSET_PATH}}" style="display: inline-flex; align-items: center; gap: 6px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="width: 16px; height: 16px; display: block;"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
<span>Home</span>
</a>
<a href="https://github.com/Shik3i/KoalaSync" target="_blank" rel="noopener" style="display: inline-flex; align-items: center; gap: 6px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="16" height="16" aria-hidden="true" style="display: block;"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
GitHub
</a>
</div>
<div class="nav-right">
<div class="lang-select-container">
<select class="lang-dropdown" aria-label="Select Language">
<option value="en">🇬🇧 English</option>
<option value="de">🇩🇪 Deutsch</option>
<option value="fr">🇫🇷 Français</option>
<option value="es">🇪🇸 Español</option>
<option value="pt-BR">🇧🇷 Português (Brasil)</option>
<option value="ru">🇷🇺 Русский</option>
<option value="it">🇮🇹 Italiano</option>
<option value="pl">🇵🇱 Polski</option>
<option value="tr">🇹🇷 Türkçe</option>
<option value="nl">🇳🇱 Nederlands</option>
<option value="ja">🇯🇵 日本語</option>
<option value="ko">🇰🇷 한국어</option>
<option value="pt">🇵🇹 Português (Portugal)</option>
</select>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="chevron-icon"><polyline points="6 9 12 15 18 9"/></svg>
</div>
<button class="hamburger" aria-label="Menu" aria-expanded="false"></button>
</div>
</div>
</nav>
<main class="legal-content">
<div class="legal-card" data-reveal style="padding: 2rem;">
<div style="display: flex; justify-content: center;">
<img src="{{ASSET_PATH}}assets/ProContraKoala.webp" alt="Koala weighing pros and cons" class="legal-mascot" width="180" height="180">
</div>
<h1>{{ALT_TELEPARTY_TITLE}}</h1>
<!-- Intro -->
<section>
<p><em>{{ALT_TELEPARTY_INTRO}}</em></p>
</section>
<!-- When Teleparty may still make sense -->
<section>
<h2>{{ALT_TELEPARTY_WHEN_TELE_TITLE}}</h2>
<p>{{ALT_TELEPARTY_WHEN_TELE_BODY}}</p>
</section>
<!-- When KoalaSync may fit better -->
<section>
<h2>{{ALT_TELEPARTY_WHEN_KOALA_TITLE}}</h2>
<p>{{ALT_TELEPARTY_WHEN_KOALA_BODY}}</p>
</section>
<!-- The main difference -->
<section>
<h2>{{ALT_TELEPARTY_MAIN_DIFF_TITLE}}</h2>
<p>{{ALT_TELEPARTY_MAIN_DIFF_BODY}}</p>
</section>
<!-- Honest limitations -->
<section>
<h2>{{ALT_TELEPARTY_LIMITS_TITLE}}</h2>
<p>{{ALT_TELEPARTY_LIMITS_BODY}}</p>
</section>
<!-- Summary -->
<section>
<h2>{{ALT_TELEPARTY_SUMMARY_TITLE}}</h2>
<p>{{ALT_TELEPARTY_SUMMARY_BODY}}</p>
</section>
<!-- CTA block -->
<div style="display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--glass-border);">
<a href="{{ASSET_PATH}}" class="btn btn-primary" style="margin-bottom: 1.5rem;">{{ALT_TRY_KOALASYNC}}</a>
<p style="font-size: 0.9rem; text-align: center;">
<a href="{{ASSET_PATH}}alternatives/screen-sharing" style="color: var(--accent); text-decoration: none;">{{ALT_SCREEN_TITLE}}</a>
</p>
</div>
</div>
</main>
<footer>
<div class="container">
<p>&copy; 2026 KoalaSync. {{FOOTER_MIT}}</p>
<p style="font-size: 0.8rem; margin-top: 0.5rem;">{{FOOTER_RAM}}</p>
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="{{ASSET_PATH}}{{FOOTER_LEGAL_LINK}}">{{FOOTER_LEGAL}}</a>
<a href="{{ASSET_PATH}}{{FOOTER_PRIVACY_LINK}}">{{FOOTER_PRIVACY}}</a>
<a href="{{ASSET_PATH}}{{LANG_PREFIX}}alternatives"><span><span lang="en">Guides & comparisons</span><span lang="de">Vergleiche & Anleitungen</span></span></a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
</a>
</div>
</div>
</footer>
<script src="{{ASSET_PATH}}app.min.js"></script>
</body>
</html>
+31
View File
@@ -488,6 +488,14 @@ document.addEventListener('DOMContentLoaded', () => {
homeLinks.forEach(link => {
link.href = (activeLang === 'en') ? './' : `${activeLang}/`;
});
const altLinks = document.querySelectorAll('a[href*="alternatives"]');
altLinks.forEach(link => {
const attr = link.getAttribute('href');
if (attr === 'alternatives' || attr === 'alternatives/teleparty' || attr.endsWith('/alternatives')) {
link.href = (activeLang === 'en') ? 'alternatives' : `${activeLang}/alternatives`;
}
});
}
};
@@ -529,6 +537,29 @@ document.addEventListener('DOMContentLoaded', () => {
return;
}
const pathSegments = path.split('/');
const isAlternative = pathSegments.includes('alternatives');
if (isAlternative) {
let target;
const firstSeg = pathSegments[1];
const isLangSubdir = ['de', 'fr', 'es', 'it', 'nl', 'pl', 'pt', 'pt-BR', 'tr', 'ru', 'ja', 'ko', 'zh', 'uk'].includes(firstSeg);
if (newLang === 'en') {
if (isLangSubdir) {
pathSegments.splice(1, 1);
}
} else {
if (isLangSubdir) {
pathSegments[1] = newLang;
} else {
pathSegments.splice(1, 0, newLang);
}
}
target = pathSegments.join('/');
window.location.href = target + window.location.hash;
return;
}
// Determine if we are on a static landing page versus a dynamic utility page
const isIndex = !path.includes('join');
+84 -11
View File
@@ -174,6 +174,8 @@ async function compile() {
let compiled = templateContent;
compiled = compiled.replace(/\{\{ASSET_PATH\}\}/g, assetPath);
compiled = compiled.replace(/\{\{VERSION\}\}/g, buildVersion);
const langPrefix = lang === 'en' ? '' : `${lang}/`;
compiled = compiled.replace(/\{\{LANG_PREFIX\}\}/g, langPrefix);
languages.forEach(l => {
compiled = compiled.replace(new RegExp(`\\{\\{SELECTED_${l.toUpperCase()}\\}\\}`, 'g'), l === lang ? 'selected' : '');
});
@@ -183,6 +185,44 @@ async function compile() {
return compiled;
}
// Read alternative page templates
const telepartyTemplatePath = path.join(websiteDir, 'alternatives/teleparty.html');
const screenSharingTemplatePath = path.join(websiteDir, 'alternatives/screen-sharing.html');
const overviewTemplatePath = path.join(websiteDir, 'alternatives/index.html');
const hasTelepartyTemplate = fs.existsSync(telepartyTemplatePath);
const hasScreenSharingTemplate = fs.existsSync(screenSharingTemplatePath);
const hasOverviewTemplate = fs.existsSync(overviewTemplatePath);
const telepartyTemplate = hasTelepartyTemplate ? fs.readFileSync(telepartyTemplatePath, 'utf8') : '';
const screenSharingTemplate = hasScreenSharingTemplate ? fs.readFileSync(screenSharingTemplatePath, 'utf8') : '';
const overviewTemplate = hasOverviewTemplate ? fs.readFileSync(overviewTemplatePath, 'utf8') : '';
// Preload English locale for fallback
const englishLocalePath = path.join(localesDir, 'en.json');
const englishLocale = JSON.parse(fs.readFileSync(englishLocalePath, 'utf8'));
function compileAlternativePage(templateContent, locale, lang, assetPath, langPrefix) {
let compiled = templateContent;
compiled = compiled.replace(/\{\{LANG_CODE\}\}/g, lang);
compiled = compiled.replace(/\{\{ASSET_PATH\}\}/g, assetPath);
compiled = compiled.replace(/\{\{LANG_PREFIX\}\}/g, langPrefix);
compiled = compiled.replace(/\{\{VERSION\}\}/g, buildVersion);
const indexTitle = lang === 'de' ? 'KoalaSync - Vergleiche & Anleitungen' : 'KoalaSync - Alternatives & Comparisons';
const indexDesc = lang === 'de'
? 'Entdecke ehrliche Vergleiche und detaillierte Leitfäden zwischen KoalaSync und anderen Watch-Party-Erweiterungen.'
: 'Explore honest comparisons and detailed guides comparing KoalaSync with other watch party extensions and streaming solutions.';
compiled = compiled.replace(/\{\{ALT_INDEX_TITLE\}\}/g, indexTitle);
compiled = compiled.replace(/\{\{ALT_INDEX_META_DESC\}\}/g, indexDesc);
// Merge locale with English fallback for keys not present in current locale
const mergedLocale = { ...englishLocale, ...locale };
for (const [key, value] of Object.entries(mergedLocale)) {
compiled = compiled.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
}
return compiled;
}
for (const lang of languages) {
const localePath = path.join(localesDir, `${lang}.json`);
if (!fs.existsSync(localePath)) { console.warn(`Warning: Locale ${lang} not found.`); continue; }
@@ -193,6 +233,26 @@ async function compile() {
const html = compilePage(locale, '', lang);
fs.writeFileSync(path.join(wwwDir, 'index.html'), html);
englishHtml[''] = html;
// Compile alternatives for English (assets resolved using '../' prefix)
if (hasTelepartyTemplate) {
const altDir = path.join(wwwDir, 'alternatives');
fs.mkdirSync(altDir, { recursive: true });
const tpCompiled = compileAlternativePage(telepartyTemplate, locale, lang, '../', '');
fs.writeFileSync(path.join(altDir, 'teleparty.html'), tpCompiled);
}
if (hasScreenSharingTemplate) {
const altDir = path.join(wwwDir, 'alternatives');
fs.mkdirSync(altDir, { recursive: true });
const ssCompiled = compileAlternativePage(screenSharingTemplate, locale, lang, '../', '');
fs.writeFileSync(path.join(altDir, 'screen-sharing.html'), ssCompiled);
}
if (hasOverviewTemplate) {
const altDir = path.join(wwwDir, 'alternatives');
fs.mkdirSync(altDir, { recursive: true });
const ovCompiled = compileAlternativePage(overviewTemplate, locale, lang, '../', '');
fs.writeFileSync(path.join(altDir, 'index.html'), ovCompiled);
}
} else {
console.log(`Compiling ${lang.toUpperCase()} (${lang}/index.html)...`);
const langDir = path.join(wwwDir, lang);
@@ -200,6 +260,26 @@ async function compile() {
const html = compilePage(locale, '../', lang);
fs.writeFileSync(path.join(langDir, 'index.html'), html);
englishHtml[lang] = html;
// Compile alternatives for other languages (assets resolved using '../../' prefix)
if (hasTelepartyTemplate) {
const langAltDir = path.join(langDir, 'alternatives');
fs.mkdirSync(langAltDir, { recursive: true });
const tpCompiled = compileAlternativePage(telepartyTemplate, locale, lang, '../../', lang + '/');
fs.writeFileSync(path.join(langAltDir, 'teleparty.html'), tpCompiled);
}
if (hasScreenSharingTemplate) {
const langAltDir = path.join(langDir, 'alternatives');
fs.mkdirSync(langAltDir, { recursive: true });
const ssCompiled = compileAlternativePage(screenSharingTemplate, locale, lang, '../../', lang + '/');
fs.writeFileSync(path.join(langAltDir, 'screen-sharing.html'), ssCompiled);
}
if (hasOverviewTemplate) {
const langAltDir = path.join(langDir, 'alternatives');
fs.mkdirSync(langAltDir, { recursive: true });
const ovCompiled = compileAlternativePage(overviewTemplate, locale, lang, '../../', lang + '/');
fs.writeFileSync(path.join(langAltDir, 'index.html'), ovCompiled);
}
}
}
@@ -219,6 +299,7 @@ async function compile() {
const src = path.join(websiteDir, mapping.src);
const dest = path.join(wwwDir, mapping.dest);
if (fs.existsSync(src)) {
fs.mkdirSync(path.dirname(dest), { recursive: true });
fs.copyFileSync(src, dest);
console.log(` Copied: ${mapping.src}${mapping.dest}`);
}
@@ -278,23 +359,15 @@ async function compile() {
let html = fs.readFileSync(filePath, 'utf8');
// 8a. Replace hashed asset refs
html = html.replace(/href="(?:\.\.\/)?style\.min\.css"/g, (m) => {
const prefix = m.includes('../') ? '../' : '';
html = html.replace(/href="((?:\.\.\/)*)style\.min\.css"/g, (m, prefix) => {
return `href="${prefix}${styleName}"`;
});
html = html.replace(/src="(?:\.\.\/)?app\.min\.js"/g, (m) => {
const prefix = m.includes('../') ? '../' : '';
html = html.replace(/src="((?:\.\.\/)*)app\.min\.js"/g, (m, prefix) => {
return `src="${prefix}${appName}"`;
});
html = html.replace(/src="(?:\.\.\/)?lang-init\.min\.js"/g, (m) => {
const prefix = m.includes('../') ? '../' : '';
html = html.replace(/src="((?:\.\.\/)*)lang-init\.min\.js"/g, (m, prefix) => {
return `src="${prefix}${langName}"`;
});
// Also update preload directives
html = html.replace(/href="(?:\.\.\/)?style\.min\.css"/g, (m) => {
const prefix = m.includes('../') ? '../' : '';
return `href="${prefix}${styleName}"`;
});
// 8b. Inject AVIF <picture> wrappers
html = injectAvifPictures(html);
+1
View File
@@ -160,6 +160,7 @@
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="impressum" style="color: var(--text-muted); text-decoration: none;">Impressum</a>
<a href="datenschutz" style="color: var(--text-muted); text-decoration: none;">Datenschutz</a>
<a href="alternatives/teleparty">Vergleiche & Anleitungen</a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="color: var(--text-muted); text-decoration: none; display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
+1
View File
@@ -147,6 +147,7 @@
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="impressum" style="color: var(--text-muted); text-decoration: none;">Impressum</a>
<a href="datenschutz" style="color: var(--text-muted); text-decoration: none;">Datenschutz</a>
<a href="alternatives">Vergleiche & Anleitungen</a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="color: var(--text-muted); text-decoration: none; display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
+1
View File
@@ -145,6 +145,7 @@
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="imprint" style="color: var(--text-muted); text-decoration: none;">Legal Notice</a>
<a href="privacy" style="color: var(--text-muted); text-decoration: none;">Privacy Policy</a>
<a href="alternatives">Guides & comparisons</a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="color: var(--text-muted); text-decoration: none; display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
+1
View File
@@ -119,6 +119,7 @@
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="impressum" style="color: var(--text-muted); text-decoration: none;"><span lang="en">Legal Notice</span><span lang="de">Impressum</span></a>
<a href="datenschutz" style="color: var(--text-muted); text-decoration: none;"><span lang="en">Privacy Policy</span><span lang="de">Datenschutz</span></a>
<a href="alternatives"><span lang="en">Guides & comparisons</span><span lang="de">Vergleiche & Anleitungen</span></a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="color: var(--text-muted); text-decoration: none; display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
+28 -1
View File
@@ -176,5 +176,32 @@
"FOOTER_LEGAL_LINK": "de/impressum",
"FOOTER_PRIVACY_LINK": "de/datenschutz",
"FOOTER_DISCLAIMER": "KoalaSync ist nicht mit Netflix, Disney+, Amazon, YouTube, Twitch oder anderen Streaming-Plattformen verbunden, wird von diesen nicht unterstützt oder steht in keiner Beziehung zu diesen. Alle Markenrechte liegen bei ihren jeweiligen Inhabern.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TELEPARTY_TITLE": "KoalaSync vs Teleparty: Welche Watch-Party-Lösung passt besser?",
"ALT_TELEPARTY_META_DESC": "Ein ehrlicher Vergleich von KoalaSync und Teleparty für Watch-Partys, eingebauten Chat, Mobile-Support, Browser-Video-Sync, selbst gehostete Medienserver und Open Source.",
"ALT_TELEPARTY_INTRO": "KoalaSync und Teleparty lösen beide dasselbe nervige Problem: Du willst mit anderen Leuten online etwas schauen, ohne ständig „3, 2, 1, Play“ sagen zu müssen. Beide synchronisieren Videowiedergabe, aber sie gehen ziemlich unterschiedlich an die Sache ran.<br><br>Teleparty ist sinnvoll, wenn du einen eingebauten Chat möchtest oder am Handy schauen willst. KoalaSync ist eher für Desktop-Browser-Watch-Partys gedacht, bei denen du sowieso schon mit Freunden in Discord, Teamspeak oder einem anderen Voice-Call bist und einfach nur die Wiedergabe synchron halten möchtest.<br><br>Der Hauptgrund, warum ich KoalaSync gebaut habe, war Flexibilität. Es soll mit fast jeder Website funktionieren, die einen normalen Browser-Videoplayer nutzt, nicht nur mit einer festen Liste an Plattformen. Dazu gehören auch selbst gehostete Setups wie Emby, Jellyfin und Plex, lokale oder private Domains und viele normale Videoseiten im Browser.",
"ALT_TELEPARTY_WHEN_TELE_TITLE": "Wann Teleparty trotzdem sinnvoller sein kann",
"ALT_TELEPARTY_WHEN_TELE_BODY": "Teleparty kann trotzdem die bessere Wahl sein, wenn du den Chat direkt im Watch-Party-Tool haben möchtest. KoalaSync hat aktuell keinen eingebauten Chat. Es geht eher davon aus, dass du sowieso schon woanders mit deinen Freunden redest, zum Beispiel in Discord, Teamspeak, WhatsApp, Signal oder einem normalen Anruf.<br><br>Mobile ist der zweite große Unterschied. Teleparty hat eine App, während KoalaSync aktuell nur auf Desktop-Browsern läuft. Wenn du Netflix oder andere Inhalte am Handy oder Tablet synchron schauen möchtest, ist KoalaSync im Moment nicht das richtige Tool dafür.<br><br>Wenn dir also vor allem eingebauter Chat und Mobile-Support wichtig sind, passt Teleparty wahrscheinlich besser zu deinem Setup.",
"ALT_TELEPARTY_WHEN_KOALA_TITLE": "Wann KoalaSync besser passt",
"ALT_TELEPARTY_WHEN_KOALA_BODY": "KoalaSync passt besser, wenn du ein flexibles Sync-Tool für den Desktop-Browser suchst und nicht auf eine kurze Plattformliste beschränkt sein möchtest.<br><br>Es funktioniert mit fast jeder Website, die einen normalen Browser-Videoplayer nutzt. Das ist besonders nützlich für Emby, Jellyfin, Plex, private Medienserver, lokale Domains oder kleinere Videoseiten, die klassische Watch-Party-Tools meistens gar nicht beachten.<br><br>Außerdem ist KoalaSync kostenlos, Open Source, braucht keine Accounts und kann bei Bedarf selbst gehostet werden. Ich habe es gebaut, weil ich etwas Privacy-freundliches wollte, das mit meinem eigenen Emby-Setup funktioniert, nicht noch eine geschlossene Plattform nur für ein paar große Streaming-Seiten.",
"ALT_TELEPARTY_MAIN_DIFF_TITLE": "Der wichtigste Unterschied",
"ALT_TELEPARTY_MAIN_DIFF_BODY": "Teleparty ist eher ein Watch-Party-Produkt mit Chat und Mobile-Unterstützung. KoalaSync ist eher eine flexible Sync-Schicht für Browser-Video.<br><br>Das klingt erstmal nach einem kleinen Unterschied, ändert aber den Use Case ziemlich stark. Wenn du eine Watch-Party-App mit eingebautem Chat brauchst, ergibt Teleparty Sinn. Wenn du schon einen Voice-Call hast und nur möchtest, dass Play, Pause und Seek zwischen mehreren Browsern synchron bleiben, passt KoalaSync besser.",
"ALT_TELEPARTY_LIMITS_TITLE": "Ehrliche Grenzen",
"ALT_TELEPARTY_LIMITS_BODY": "KoalaSync ist nicht magisch und versucht auch nicht, seine Grenzen zu verstecken. Es funktioniert aktuell nur auf Desktop-Browsern. Es gibt keinen eingebauten Chat und keine Mobile-App.<br><br>Die Kompatibilität hängt außerdem vom Browser und vom jeweiligen Videoplayer ab. KoalaSync sollte mit fast jedem normalen Browser-Videoplayer funktionieren, aber Websites können ihre Player, DRM-Logik oder Browser-Einschränkungen jederzeit ändern.<br><br>KoalaSync ist nicht mit Netflix, Disney+, Prime Video, YouTube, Teleparty, Emby, Jellyfin, Plex oder anderen hier genannten Marken verbunden. Die Namen werden nur verwendet, um typische Anwendungsfälle verständlich zu beschreiben.",
"ALT_TELEPARTY_SUMMARY_TITLE": "Kurz gesagt",
"ALT_TELEPARTY_SUMMARY_BODY": "Wenn du eingebauten Chat oder Mobile-Support brauchst, passt Teleparty wahrscheinlich besser. Wenn du kostenlose, Open-Source-Desktop-Browser-Synchronisierung möchtest, die mit fast jedem normalen Videoplayer funktioniert, inklusive selbst gehosteter Medienserver wie Emby, Jellyfin und Plex, ist KoalaSync wahrscheinlich die passendere Wahl.",
"ALT_SCREEN_TITLE": "KoalaSync vs Bildschirmübertragung: Wann ist Video-Sync besser?",
"ALT_SCREEN_META_DESC": "Ein ehrlicher Vergleich von KoalaSync und Bildschirmübertragung für Filmabende, Wiedergabekontrolle, Videoqualität, Privatsphäre, Untertitel und gemeinsames Schauen im Browser.",
"ALT_SCREEN_INTRO": "Bildschirmübertragung funktioniert, und manchmal reicht das auch völlig. Eine Person teilt den Bildschirm, alle anderen schauen zu, fertig.<br><br>Bei längeren Filmabenden oder Serien kann das aber schnell nervig werden. Die Qualität hängt vom Upload, der CPU, dem Browser und der Komprimierung durch Discord, Teamspeak, Zoom oder andere Call-Apps ab. Außerdem kontrolliert nur eine Person wirklich die Wiedergabe.",
"ALT_SCREEN_WHEN_ENOUGH_TITLE": "Wann Bildschirmübertragung reicht",
"ALT_SCREEN_WHEN_ENOUGH_BODY": "Screen Sharing ist sinnvoll, wenn es möglichst schnell gehen soll. Wenn nur eine Person Zugriff auf das Video hat oder alle damit okay sind, dass eine Person Play, Pause und Spulen kontrolliert, ist es wahrscheinlich die einfachste Lösung.<br><br>Es reicht auch oft, wenn die Qualität nicht so wichtig ist, niemand eigene Untertitel oder Audio-Einstellungen braucht und die Person, die teilt, kein Problem damit hat, genau dieses Fenster oder diesen Bildschirm zu zeigen.",
"ALT_SCREEN_WHEN_ANNOYING_TITLE": "Wo Bildschirmübertragung nervig wird",
"ALT_SCREEN_WHEN_ANNOYING_BODY": "Der größte Nachteil ist, dass nicht jeder im eigenen Player schaut. Eine Person streamt den Bildschirm, alle anderen sehen nur diesen Stream.<br><br>Das kann schlechtere Bildqualität, komprimierten Ton, Verzögerung und weniger Kontrolle für alle anderen bedeuten. Untertitel und Audiospur sind außerdem genau das, was die teilende Person eingestellt hat.<br><br>Dazu kommt der Privacy-Aspekt. Wenn du Fenster oder Tabs wechselst, können andere kurz deine Browser-Tabs, Mails, Reddit, Chats oder andere private Dinge sehen. Man kann das mit einem separaten Fenster umgehen, aber man muss trotzdem daran denken.",
"ALT_SCREEN_WHY_CLEANER_TITLE": "Warum KoalaSync sauberer sein kann",
"ALT_SCREEN_WHY_CLEANER_BODY": "KoalaSync überträgt nicht deinen Bildschirm. Jeder schaut das Video lokal im eigenen Browser, und KoalaSync hält nur Aktionen wie Play, Pause und Spulen zwischen allen Teilnehmern synchron.<br><br>Dadurch kann jeder lokal Vollbild nutzen, eigene Untertitel oder Audio-Einstellungen verwenden, sofern der Player das unterstützt, und der Voice-Call bleibt separat in Discord, Teamspeak oder einer anderen App.<br><br>Für Filmabende fühlt sich das oft deutlich sauberer an, als wenn eine Person den ganzen Bildschirm streamt. Besonders praktisch ist das bei browserbasierten Setups wie Emby, Jellyfin, Plex, lokalen Dateien im Browser, privaten Domains oder anderen Websites mit normalen Browser-Videoplayern.",
"ALT_SCREEN_LIMITS_TITLE": "Ehrliche Grenzen",
"ALT_SCREEN_LIMITS_BODY": "KoalaSync ersetzt keinen Voice-Call. Wenn ihr beim Schauen reden wollt, nutzt ihr weiterhin Discord, Teamspeak, Signal, WhatsApp oder was auch immer ihr normalerweise verwendet.<br><br>Außerdem braucht jede Person selbst Zugriff auf das Video oder die jeweilige Seite. KoalaSync umgeht keine Abos, Logins, DRM, regionale Einschränkungen oder Plattformregeln.<br><br>KoalaSync ist aktuell Desktop-Browser-only, hat keinen eingebauten Chat oder Voice-Chat und die Funktion hängt immer vom jeweiligen Browser und Videoplayer ab.",
"ALT_SCREEN_SUMMARY_TITLE": "Kurz gesagt",
"ALT_SCREEN_SUMMARY_BODY": "Bildschirmübertragung ist die einfachste Lösung, wenn es schnell gehen soll und Qualität, Privatsphäre oder individuelle Kontrolle nicht so wichtig sind. KoalaSync passt besser, wenn jeder lokal im eigenen Browser schauen soll und sich der Filmabend mehr wie wirklich gemeinsames Schauen anfühlen soll.",
"ALT_TRY_KOALASYNC": "KoalaSync ausprobieren"
}
+28 -1
View File
@@ -176,5 +176,32 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync is not affiliated with, endorsed by, or associated with Netflix, Disney+, Amazon, YouTube, Twitch, or any other streaming platform. All trademarks are property of their respective owners.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TELEPARTY_TITLE": "KoalaSync vs Teleparty: which watch party tool should you use?",
"ALT_TELEPARTY_META_DESC": "A practical comparison of KoalaSync and Teleparty for watch parties, built-in chat, mobile support, browser video sync, self-hosted media servers and open-source use.",
"ALT_TELEPARTY_INTRO": "KoalaSync and Teleparty both help with the same annoying problem: watching something together without doing the whole \"3, 2, 1, play\" routine. They just take a different approach.<br><br>Teleparty makes the most sense if you want a built-in chat or if you want to watch on mobile. KoalaSync is more for desktop browser watch parties where you are already talking on Discord, Teamspeak or another voice call and just want playback to stay in sync.<br><br>The main reason I built KoalaSync was flexibility. It is meant to work with almost any website that uses a normal browser video player, not just a fixed list of platforms. That includes self-hosted setups like Emby, Jellyfin and Plex, local/private domains, and a lot of normal video pages in the browser.",
"ALT_TELEPARTY_WHEN_TELE_TITLE": "When Teleparty may still make sense",
"ALT_TELEPARTY_WHEN_TELE_BODY": "Teleparty can still be the better choice if you want the chat to be part of the watch party tool itself. KoalaSync does not currently have a built-in chat. It assumes you are already talking somewhere else, like Discord, Teamspeak, WhatsApp, Signal or a normal call.<br><br>Mobile is the other big reason. Teleparty has an app, while KoalaSync currently only works on desktop browsers. If you want to sync Netflix on a phone or tablet, KoalaSync is not the right tool for that right now.<br><br>So if chat and mobile support are the things you care about most, Teleparty may simply fit your setup better.",
"ALT_TELEPARTY_WHEN_KOALA_TITLE": "When KoalaSync may fit better",
"ALT_TELEPARTY_WHEN_KOALA_BODY": "KoalaSync fits better if you want a flexible desktop browser sync tool instead of something tied to a short platform list.<br><br>It works with almost any website that uses a normal browser video player. That is especially useful for Emby, Jellyfin, Plex, private media servers, local domains, or smaller video sites that classic watch party tools usually ignore.<br><br>It is also free, open source, does not require accounts, and can be self-hosted if you want to run your own relay. I built it because I wanted something privacy-friendly that worked with my own Emby setup, not another closed platform just for a few big streaming sites.",
"ALT_TELEPARTY_MAIN_DIFF_TITLE": "The main difference",
"ALT_TELEPARTY_MAIN_DIFF_BODY": "Teleparty is more of a watch party product with chat and mobile support. KoalaSync is more of a flexible sync layer for browser video.<br><br>That sounds like a small difference, but it changes the use case a lot. If you need a full watch party app with chat inside it, Teleparty makes sense. If you already have voice chat and just want the video controls to stay synced across browsers, KoalaSync is the simpler fit.",
"ALT_TELEPARTY_LIMITS_TITLE": "Honest limitations",
"ALT_TELEPARTY_LIMITS_BODY": "KoalaSync is not magic and it is not trying to hide its limits. It currently works only on desktop browsers. It has no built-in chat and no mobile app.<br><br>Compatibility also depends on the browser and the video player. KoalaSync should work with almost any normal browser video player, but websites can change their players, DRM behavior or browser restrictions at any time.<br><br>KoalaSync is not affiliated with Netflix, Disney+, Prime Video, YouTube, Teleparty, Emby, Jellyfin, Plex or any other brand mentioned here. The names are only used to explain typical use cases.",
"ALT_TELEPARTY_SUMMARY_TITLE": "Summary",
"ALT_TELEPARTY_SUMMARY_BODY": "If you want built-in chat or mobile support, Teleparty may be the better fit. If you want free, open-source desktop browser sync that works with almost any normal video player, including self-hosted media servers like Emby, Jellyfin and Plex, KoalaSync is probably the better match.",
"ALT_SCREEN_TITLE": "KoalaSync vs screen sharing: when is video sync better?",
"ALT_SCREEN_META_DESC": "A practical comparison of KoalaSync and screen sharing for remote movie nights, playback control, video quality, privacy, subtitles and browser-based watching.",
"ALT_SCREEN_INTRO": "Screen sharing works, and sometimes it is honestly enough. One person shares their screen, everyone else watches, and you are done.<br><br>But for longer movie nights or watching episodes together, it can get annoying. The video quality depends on the sharer\u2019s upload, CPU, browser, and whatever compression Discord, Teamspeak, Zoom or another call app applies. Also, only one person really controls the playback.",
"ALT_SCREEN_WHEN_ENOUGH_TITLE": "When screen sharing is enough",
"ALT_SCREEN_WHEN_ENOUGH_BODY": "Screen sharing is fine when you want the fastest possible setup. If only one person has access to the video, or everyone is okay with one person controlling play, pause and seeking, it may be the simplest option.<br><br>It also makes sense when quality is not a big deal, when nobody needs their own subtitles or audio settings, and when the person sharing is comfortable showing that browser window or screen.",
"ALT_SCREEN_WHEN_ANNOYING_TITLE": "Where screen sharing gets annoying",
"ALT_SCREEN_WHEN_ANNOYING_BODY": "The biggest downside is that not everyone is watching in their own player. One person streams their screen, and everyone else only sees that stream.<br><br>That can mean worse video quality, compressed audio, delayed playback, and less control for everyone else. Subtitles and audio tracks are also whatever the sharer picked.<br><br>There is also the privacy side. If you switch windows or tabs, people may briefly see your browser tabs, email, Reddit, chats or other private stuff. You can work around that with a separate window, but it is still something you have to think about.",
"ALT_SCREEN_WHY_CLEANER_TITLE": "Why KoalaSync can feel cleaner",
"ALT_SCREEN_WHY_CLEANER_BODY": "KoalaSync does not stream your screen. Everyone watches the video locally in their own browser, and KoalaSync only keeps playback actions like play, pause and seeking in sync.<br><br>That means everyone can use fullscreen on their own device, use their own subtitle or audio settings if the player supports it, and keep the voice chat separate in Discord, Teamspeak or another call.<br><br>For movie nights, that can feel a lot cleaner than one person broadcasting their screen. It is especially useful for browser-based setups like Emby, Jellyfin, Plex, local files opened in the browser, private domains, or other websites with normal browser video players.",
"ALT_SCREEN_LIMITS_TITLE": "Honest limitations",
"ALT_SCREEN_LIMITS_BODY": "KoalaSync is not a replacement for a voice call. If you want to talk while watching, you still use Discord, Teamspeak, Signal, WhatsApp or whatever you normally use.<br><br>Everyone also needs access to the video or page on their own device. KoalaSync does not bypass subscriptions, logins, DRM, regional restrictions or platform rules.<br><br>It is currently desktop-browser only, has no built-in chat or voice feature, and compatibility always depends on the browser and the video player.",
"ALT_SCREEN_SUMMARY_TITLE": "Summary",
"ALT_SCREEN_SUMMARY_BODY": "Screen sharing is the simplest option when you just want something quick and do not care much about quality, privacy or individual control. KoalaSync is a better fit when everyone should watch locally in their own browser and the session should feel more like actually watching together.",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync no está afiliado, respaldado ni asociado con Netflix, Disney+, Amazon, YouTube, Twitch ni ninguna otra plataforma de streaming. Todas las marcas comerciales pertenecen a sus respectivos dueños.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync n'est pas affilié à Netflix, Disney+, Amazon, YouTube, Twitch ou toute autre plateforme de streaming. Toutes les marques déposées appartiennent à leurs détenteurs respectifs.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync non è affiliato a Netflix, YouTube o altre piattaforme. I marchi appartengono ai rispettivi proprietari.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSyncは、Netflix、Disney+、Amazon、YouTube、Twitch、またはその他のストリーミングプラットフォームと提携、承認、または関連付けられているものではありません。すべての商標はそれぞれの所有者に帰属します。",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync는 Netflix, Disney+, Amazon, YouTube, Twitch 또는 기타 스트리밍 플랫폼과 제휴, 보증 또는 연관되어 있지 않습니다. 모든 상표는 해당 소유자의 재산입니다.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync is niet verbonden aan, goedgekeurd door of geassocieerd met Netflix, Disney+, Amazon, YouTube, Twitch of enig ander streamingplatform. Alle handelsmerken zijn eigendom van hun respectieve eigenaren.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync nie jest powiązany, wspierany ani stowarzyszony z Netflix, Disney+, Amazon, YouTube, Twitch ani żadną inną platformą streamingową. Wszystkie znaki towarowe są własnością ich odpowiednich właścicieli.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync não é afiliado à Netflix, Disney+, YouTube, Twitch, etc. Todas as marcas registradas são de propriedade de seus respectivos donos.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync não é afiliado à Netflix, Disney+, YouTube, Twitch, etc. Todas as marcas são propriedade dos seus titulares.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync не связан, не спонсируется и не аффилирован с Netflix, Disney+, Amazon, YouTube, Twitch или любой другой стриминговой платформой. Все товарные знаки являются собственностью их соответствующих владельцев.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync; Netflix, Disney+, Amazon, YouTube, Twitch veya başka herhangi bir yayın platformuna bağlı değildir, bunlar tarafından desteklenmemektedir ve bunlarla ilişkili değildir. Tüm ticari markalar ilgili sahiplerinin mülkiyetindedir.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync не пов’язаний із Netflix, Disney+, Amazon, YouTube, Twitch або будь-якою іншою потоковою платформою, не схвалений і не пов’язаний з ними. Усі торгові марки є власністю відповідних власників.",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+2 -1
View File
@@ -176,5 +176,6 @@
"FOOTER_LEGAL_LINK": "imprint",
"FOOTER_PRIVACY_LINK": "privacy",
"FOOTER_DISCLAIMER": "KoalaSync 不隶属于 Netflix、Disney+、Amazon、YouTube、Twitch 或任何其他流媒体平台,也不受其认可或关联。所有商标均为其各自所有者的财产。",
"FOOTER_SUPPORT": "Support KoalaSync"
"FOOTER_SUPPORT": "Support KoalaSync",
"ALT_TRY_KOALASYNC": "Try KoalaSync"
}
+1
View File
@@ -163,6 +163,7 @@
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="imprint" style="color: var(--text-muted); text-decoration: none;">Legal Notice</a>
<a href="privacy" style="color: var(--text-muted); text-decoration: none;">Privacy Policy</a>
<a href="alternatives">Guides & comparisons</a>
<a href="https://mastodon.social/@koalastuff" rel="me noopener" target="_blank" style="color: var(--text-muted); text-decoration: none; display: inline-flex; align-items: center; gap: 4px;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="14" height="14" aria-hidden="true" style="display: block;"><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>
Mastodon
+132
View File
@@ -25,6 +25,138 @@
<changefreq>monthly</changefreq>
<priority>0.3</priority>
</url>
<url>
<loc>https://sync.koalastuff.net/alternatives</loc>
<lastmod>2026-06-24</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives"/>
<xhtml:link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives"/>
<xhtml:link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives"/>
<xhtml:link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives"/>
<xhtml:link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives"/>
<xhtml:link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives"/>
<xhtml:link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives"/>
<xhtml:link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives"/>
<xhtml:link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives"/>
<xhtml:link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives"/>
</url>
<url>
<loc>https://sync.koalastuff.net/de/alternatives</loc>
<lastmod>2026-06-24</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives"/>
<xhtml:link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives"/>
<xhtml:link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives"/>
<xhtml:link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives"/>
<xhtml:link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives"/>
<xhtml:link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives"/>
<xhtml:link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives"/>
<xhtml:link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives"/>
<xhtml:link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives"/>
<xhtml:link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives"/>
</url>
<url>
<loc>https://sync.koalastuff.net/alternatives/teleparty</loc>
<lastmod>2026-06-24</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives/teleparty"/>
</url>
<url>
<loc>https://sync.koalastuff.net/de/alternatives/teleparty</loc>
<lastmod>2026-06-24</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives/teleparty"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives/teleparty"/>
</url>
<url>
<loc>https://sync.koalastuff.net/alternatives/screen-sharing</loc>
<lastmod>2026-06-24</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives/screen-sharing"/>
</url>
<url>
<loc>https://sync.koalastuff.net/de/alternatives/screen-sharing</loc>
<lastmod>2026-06-24</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://sync.koalastuff.net/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="de" href="https://sync.koalastuff.net/de/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://sync.koalastuff.net/fr/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="es" href="https://sync.koalastuff.net/es/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="pt-br" href="https://sync.koalastuff.net/pt-BR/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://sync.koalastuff.net/ru/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="it" href="https://sync.koalastuff.net/it/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="pl" href="https://sync.koalastuff.net/pl/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="tr" href="https://sync.koalastuff.net/tr/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="nl" href="https://sync.koalastuff.net/nl/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="ja" href="https://sync.koalastuff.net/ja/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="ko" href="https://sync.koalastuff.net/ko/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="zh" href="https://sync.koalastuff.net/zh/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="uk" href="https://sync.koalastuff.net/uk/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="pt" href="https://sync.koalastuff.net/pt/alternatives/screen-sharing"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://sync.koalastuff.net/alternatives/screen-sharing"/>
</url>
<url>
<loc>https://sync.koalastuff.net/</loc>
<lastmod>2026-06-23</lastmod>
+36 -6
View File
@@ -1828,6 +1828,17 @@ footer {
color: var(--text-muted);
}
footer a {
color: var(--text-muted);
text-decoration: none;
transition: color 0.2s ease;
}
footer a:hover {
color: var(--text);
}
/* --- Animations --- */
[data-reveal] {
opacity: 0;
@@ -2564,12 +2575,9 @@ html:not(.lang-de) [lang="de"] {
opacity: 0.85;
}
.comparison-table td.check::before {
content: "KoalaSync";
}
.comparison-table td.check::before,
.comparison-table td.cross::before {
content: "Teleparty";
content: attr(data-label);
}
/* Keep the KoalaSync row subtly highlighted, like on desktop. */
@@ -2930,7 +2938,29 @@ header[id] {
.status-ring.active-pulse,
.hero-mockup-wrapper,
.cta-group .btn {
will-change: auto;
}
}
/* --- Alternatives Hub Styles --- */
.guide-card {
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.25s ease, border-color 0.25s ease !important;
}
.guide-card:hover {
transform: translateY(-4px);
background-color: rgba(255, 255, 255, 0.07) !important;
border-color: rgba(255, 255, 255, 0.22) !important;
box-shadow: 0 12px 24px -10px rgba(0, 0, 0, 0.4);
}
.guide-card .btn-primary {
transition: background-color 0.2s ease, transform 0.1s ease;
}
.guide-card .btn-primary:active {
transform: scale(0.97);
}
@media (max-width: 640px) {
.guides-grid {
grid-template-columns: 1fr !important;
gap: 1.25rem !important;
}
}
+15 -14
View File
@@ -783,8 +783,8 @@
<strong><span>{{COMP_FEAT_1_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_1_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_1_KOALA}}</span></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_1_KOALA}}</span></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_1_TELE}}</span>
<a href="https://www.teleparty.com/premium" target="_blank" rel="noopener noreferrer" class="source-link" title="See Teleparty Premium Pricing"><sup>[1]</sup></a>
</td>
@@ -794,8 +794,8 @@
<strong><span>{{COMP_FEAT_2_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_2_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_2_KOALA}}</span></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_2_KOALA}}</span></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_2_TELE}}</span>
<a href="https://www.teleparty.com/privacy" target="_blank" rel="noopener noreferrer" class="source-link" title="See Teleparty Privacy Policy"><sup>[2]</sup></a>
</td>
@@ -805,8 +805,8 @@
<strong><span>{{COMP_FEAT_3_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_3_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_3_KOALA}}</span></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_3_KOALA}}</span></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_3_TELE}}</span>
<a href="https://www.teleparty.com/privacy" target="_blank" rel="noopener noreferrer" class="source-link" title="See Teleparty Privacy Policy"><sup>[2]</sup></a>
</td>
@@ -816,8 +816,8 @@
<strong><span>{{COMP_FEAT_4_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_4_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_4_KOALA}}</span></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_4_KOALA}}</span></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_4_TELE}}</span>
<a href="https://www.teleparty.com/privacy" target="_blank" rel="noopener noreferrer" class="source-link" title="See Teleparty Privacy Policy"><sup>[2]</sup></a>
</td>
@@ -827,8 +827,8 @@
<strong><span>{{COMP_FEAT_5_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_5_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_5_KOALA}}</span><a href="#footnote-3" class="source-link" title="Technical Compatibility Details"><sup>[3]</sup></a></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_5_KOALA}}</span><a href="#footnote-3" class="source-link" title="Technical Compatibility Details"><sup>[3]</sup></a></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_5_TELE}}</span>
<a href="https://www.teleparty.com/premium" target="_blank" rel="noopener noreferrer" class="source-link" title="See Teleparty Premium Platforms"><sup>[1]</sup></a>
</td>
@@ -838,8 +838,8 @@
<strong><span>{{COMP_FEAT_6_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_6_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_6_KOALA}}</span></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_6_KOALA}}</span></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_6_TELE}}</span>
</td>
</tr>
@@ -848,8 +848,8 @@
<strong><span>{{COMP_FEAT_7_NAME}}</span></strong>
<span class="feat-desc"><span>{{COMP_FEAT_7_DESC}}</span></span>
</td>
<td class="check highlight"><span>{{COMP_FEAT_7_KOALA}}</span></td>
<td class="cross">
<td class="check highlight" data-label="KoalaSync"><span>{{COMP_FEAT_7_KOALA}}</span></td>
<td class="cross" data-label="Teleparty">
<span>{{COMP_FEAT_7_TELE}}</span>
</td>
</tr>
@@ -1265,6 +1265,7 @@
<div style="margin-top: 1.5rem; font-size: 0.8rem; display: flex; justify-content: center; align-items: center; gap: 1.5rem; flex-wrap: wrap;">
<a href="{{ASSET_PATH}}{{FOOTER_LEGAL_LINK}}" style="color: var(--text-muted); text-decoration: none;"><span>{{FOOTER_LEGAL}}</span></a>
<a href="{{ASSET_PATH}}{{FOOTER_PRIVACY_LINK}}" style="color: var(--text-muted); text-decoration: none;"><span>{{FOOTER_PRIVACY}}</span></a>
<a href="{{ASSET_PATH}}{{LANG_PREFIX}}alternatives"><span><span lang="en">Guides & comparisons</span><span lang="de">Vergleiche & Anleitungen</span></span></a>
<a href="https://support.koalastuff.net" target="_blank" rel="noopener" title="{{FOOTER_SUPPORT}}" style="color: #fff; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; background: #ff5e5b; border: 1px solid rgba(255,255,255,0.18); border-radius: 999px; padding: 3px 9px; font-size: 0.72rem; font-weight: 700; line-height: 1;">
<span aria-hidden="true"></span>
<span>{{FOOTER_SUPPORT}}</span>