diff --git a/docs/public/ICONS.md b/docs/public/ICONS.md new file mode 100644 index 0000000..1519701 --- /dev/null +++ b/docs/public/ICONS.md @@ -0,0 +1,101 @@ +# VidBee Documentation Icons + +This directory contains the VidBee logo in various sizes for use in the documentation site. + +## Source + +All icons are generated from the original VidBee application icon located at: +`/Users/air15/Documents/GitHub/VidBee/build/icon.png` + +## Available Sizes + +| Filename | Size | Use Case | +|----------|------|----------| +| `icon.png` | 512×512 | Default/Original icon | +| `icon-16.png` | 16×16 | Browser favicon (small) | +| `icon-32.png` | 32×32 | Browser favicon (standard) | +| `icon-48.png` | 48×48 | Browser favicon (large) | +| `icon-64.png` | 64×64 | Small UI elements | +| `icon-128.png` | 128×128 | Medium UI elements | +| `icon-192.png` | 192×192 | PWA icon (Android) | +| `icon-256.png` | 256×256 | Large UI elements | +| `icon-512.png` | 512×512 | PWA splash screen, high-res displays | +| `apple-touch-icon.png` | 180×180 | iOS/macOS home screen icon | +| `favicon.png` | 32×32 | Standard favicon | + +## Usage in Next.js + +### In `app/layout.tsx` or `app/favicon.ico`: + +```tsx +import type { Metadata } from 'next' + +export const metadata: Metadata = { + title: 'VidBee Documentation', + description: 'Official VidBee documentation', + icons: { + icon: [ + { url: '/icon-16.png', sizes: '16x16', type: 'image/png' }, + { url: '/icon-32.png', sizes: '32x32', type: 'image/png' }, + { url: '/icon-48.png', sizes: '48x48', type: 'image/png' }, + ], + apple: [ + { url: '/apple-touch-icon.png', sizes: '180x180', type: 'image/png' }, + ], + }, +} +``` + +### For PWA (Progressive Web App): + +Add to your `manifest.json` or `site.webmanifest`: + +```json +{ + "icons": [ + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} +``` + +## Regeneration + +If you need to regenerate these icons from the source: + +```bash +cd docs/public +SOURCE="/Users/air15/Documents/GitHub/VidBee/build/icon.png" + +# Copy original +cp $SOURCE icon-original.png + +# Generate sizes +sips -z 16 16 icon-original.png --out icon-16.png +sips -z 32 32 icon-original.png --out icon-32.png +sips -z 48 48 icon-original.png --out icon-48.png +sips -z 64 64 icon-original.png --out icon-64.png +sips -z 128 128 icon-original.png --out icon-128.png +sips -z 192 192 icon-original.png --out icon-192.png +sips -z 256 256 icon-original.png --out icon-256.png +sips -z 180 180 icon-original.png --out apple-touch-icon.png + +# Create standard copies +cp icon-original.png icon-512.png +cp icon-original.png icon.png +cp icon-32.png favicon.png +``` + +## Notes + +- All icons maintain the VidBee bee/honeycomb theme +- Icons use PNG format with transparency (RGBA) +- Generated using macOS `sips` tool for quality consistency diff --git a/docs/public/apple-touch-icon.png b/docs/public/apple-touch-icon.png new file mode 100644 index 0000000..696c61a Binary files /dev/null and b/docs/public/apple-touch-icon.png differ diff --git a/docs/public/favicon.png b/docs/public/favicon.png new file mode 100644 index 0000000..23bd34b Binary files /dev/null and b/docs/public/favicon.png differ diff --git a/docs/public/icon-128.png b/docs/public/icon-128.png new file mode 100644 index 0000000..452adc4 Binary files /dev/null and b/docs/public/icon-128.png differ diff --git a/docs/public/icon-16.png b/docs/public/icon-16.png new file mode 100644 index 0000000..37802eb Binary files /dev/null and b/docs/public/icon-16.png differ diff --git a/docs/public/icon-192.png b/docs/public/icon-192.png new file mode 100644 index 0000000..90050e4 Binary files /dev/null and b/docs/public/icon-192.png differ diff --git a/docs/public/icon-256.png b/docs/public/icon-256.png new file mode 100644 index 0000000..8abe458 Binary files /dev/null and b/docs/public/icon-256.png differ diff --git a/docs/public/icon-32.png b/docs/public/icon-32.png new file mode 100644 index 0000000..23bd34b Binary files /dev/null and b/docs/public/icon-32.png differ diff --git a/docs/public/icon-48.png b/docs/public/icon-48.png new file mode 100644 index 0000000..2e7ba2f Binary files /dev/null and b/docs/public/icon-48.png differ diff --git a/docs/public/icon-512.png b/docs/public/icon-512.png new file mode 100644 index 0000000..6d03b62 Binary files /dev/null and b/docs/public/icon-512.png differ diff --git a/docs/public/icon-64.png b/docs/public/icon-64.png new file mode 100644 index 0000000..43b892a Binary files /dev/null and b/docs/public/icon-64.png differ diff --git a/docs/public/icon-original.png b/docs/public/icon-original.png new file mode 100644 index 0000000..6d03b62 Binary files /dev/null and b/docs/public/icon-original.png differ diff --git a/docs/public/icon.png b/docs/public/icon.png new file mode 100644 index 0000000..6d03b62 Binary files /dev/null and b/docs/public/icon.png differ diff --git a/docs/src/app/[lang]/(docs)/[[...slug]]/page.tsx b/docs/src/app/[lang]/(docs)/[[...slug]]/page.tsx index dfb5e2e..effa7dc 100644 --- a/docs/src/app/[lang]/(docs)/[[...slug]]/page.tsx +++ b/docs/src/app/[lang]/(docs)/[[...slug]]/page.tsx @@ -57,11 +57,17 @@ export async function generateMetadata( const page = source.getPage(params.slug, params.lang); if (!page) notFound(); + const baseUrl = 'https://docs.vidbee.org'; + const canonicalUrl = `${baseUrl}${page.url}`; + return { - title: page.data.title, + title: `${page.data.title} | VidBee Docs`, description: page.data.description, openGraph: { images: getPageImage(page).url, }, + alternates: { + canonical: canonicalUrl, + }, }; } diff --git a/docs/src/app/sitemap.ts b/docs/src/app/sitemap.ts new file mode 100644 index 0000000..d5ea251 --- /dev/null +++ b/docs/src/app/sitemap.ts @@ -0,0 +1,34 @@ +import type { MetadataRoute } from 'next'; +import { i18n } from '@/lib/i18n'; +import { source } from '@/lib/source'; + +export const dynamic = 'force-static'; + +const baseUrl = 'https://docs.vidbee.org'; + +function buildPath(segments: string[]): string { + if (segments.length === 0) { + return '/'; + } + return `/${segments.join('/')}/`; +} + +export default async function sitemap(): Promise { + const params = source.generateParams(); + + return params.map(({ lang, slug }) => { + const segments: string[] = []; + + if (lang && lang !== i18n.defaultLanguage) { + segments.push(lang); + } + + if (slug && slug.length > 0) { + segments.push(...slug); + } + + return { + url: `${baseUrl}${buildPath(segments)}`, + }; + }); +} diff --git a/src/renderer/src/locales/ar.json b/src/renderer/src/locales/ar.json index 27aaba8..f1bcf3b 100644 --- a/src/renderer/src/locales/ar.json +++ b/src/renderer/src/locales/ar.json @@ -660,4 +660,4 @@ "popularSection": "المنصات الرئيسية", "viewAll": "عرض جميع المواقع المدعومة" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/de.json b/src/renderer/src/locales/de.json index c61d7df..928c6ca 100644 --- a/src/renderer/src/locales/de.json +++ b/src/renderer/src/locales/de.json @@ -660,4 +660,4 @@ "popularSection": "Hauptplattformen", "viewAll": "Alle unterstützten Websites anzeigen" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/es.json b/src/renderer/src/locales/es.json index 1e1d357..ab2e38b 100644 --- a/src/renderer/src/locales/es.json +++ b/src/renderer/src/locales/es.json @@ -660,4 +660,4 @@ "popularSection": "Plataformas principales", "viewAll": "Ver todos los sitios soportados" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/fr.json b/src/renderer/src/locales/fr.json index ba41ca2..d1eb955 100644 --- a/src/renderer/src/locales/fr.json +++ b/src/renderer/src/locales/fr.json @@ -660,4 +660,4 @@ "popularSection": "Plateformes principales", "viewAll": "Voir tous les sites supportés" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/id.json b/src/renderer/src/locales/id.json index 8c12153..94db62b 100644 --- a/src/renderer/src/locales/id.json +++ b/src/renderer/src/locales/id.json @@ -660,4 +660,4 @@ "popularSection": "Platform utama", "viewAll": "Lihat semua situs yang didukung" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/it.json b/src/renderer/src/locales/it.json index 4f972b3..2dec8be 100644 --- a/src/renderer/src/locales/it.json +++ b/src/renderer/src/locales/it.json @@ -660,4 +660,4 @@ "popularSection": "Piattaforme principali", "viewAll": "Visualizza tutti i siti supportati" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/ja.json b/src/renderer/src/locales/ja.json index e130082..1679c38 100644 --- a/src/renderer/src/locales/ja.json +++ b/src/renderer/src/locales/ja.json @@ -660,4 +660,4 @@ "popularSection": "主要プラットフォーム", "viewAll": "サポートされているすべてのサイトを表示" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/ko.json b/src/renderer/src/locales/ko.json index ca80c09..6fb1b02 100644 --- a/src/renderer/src/locales/ko.json +++ b/src/renderer/src/locales/ko.json @@ -660,4 +660,4 @@ "popularSection": "주요 플랫폼", "viewAll": "지원되는 모든 사이트 보기" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/pt.json b/src/renderer/src/locales/pt.json index 2b75b60..dd78eab 100644 --- a/src/renderer/src/locales/pt.json +++ b/src/renderer/src/locales/pt.json @@ -660,4 +660,4 @@ "popularSection": "Plataformas principais", "viewAll": "Ver todos os sites suportados" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/ru.json b/src/renderer/src/locales/ru.json index 84d27d9..b581b1e 100644 --- a/src/renderer/src/locales/ru.json +++ b/src/renderer/src/locales/ru.json @@ -660,4 +660,4 @@ "popularSection": "Основные платформы", "viewAll": "Просмотреть все поддерживаемые сайты" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/zh-TW.json b/src/renderer/src/locales/zh-TW.json index a3678cd..de90535 100644 --- a/src/renderer/src/locales/zh-TW.json +++ b/src/renderer/src/locales/zh-TW.json @@ -660,4 +660,4 @@ "popularSection": "主流平台", "viewAll": "檢視全部支援的網站" } -} \ No newline at end of file +} diff --git a/src/renderer/src/locales/zh.json b/src/renderer/src/locales/zh.json index f754381..8a81113 100644 --- a/src/renderer/src/locales/zh.json +++ b/src/renderer/src/locales/zh.json @@ -660,4 +660,4 @@ "popularSection": "主流平台", "viewAll": "查看全部支持的网站" } -} \ No newline at end of file +}