From 3d6a5c6a0fd8045c43632ab9f28645cbf03278fa Mon Sep 17 00:00:00 2001 From: Puechberty Arthur Date: Wed, 22 Apr 2026 18:39:53 +0200 Subject: [PATCH] feat: rebrand project and improve SEO/PWA setup - Renamed project with new branding - Added new logo and favicon assets - Integrated full favicon + PWA icon setup - Enhanced Next.js layout metadata (SEO, OpenGraph, Twitter cards) - Added theme color support (light/dark mode) - Improved multilingual metadata handling with next-intl - Cleaned and structured generateMetadata for production readiness --- apps/web/app/[locale]/layout.tsx | 93 +++++++++++++++++++-- apps/web/components/Logo.tsx | 30 +------ apps/web/locales/ar.json | 10 +-- apps/web/locales/bn.json | 10 +-- apps/web/locales/de.json | 10 +-- apps/web/locales/en.json | 10 +-- apps/web/locales/es.json | 10 +-- apps/web/locales/fr.json | 10 +-- apps/web/locales/hi.json | 10 +-- apps/web/locales/id.json | 10 +-- apps/web/locales/it.json | 10 +-- apps/web/locales/ja.json | 10 +-- apps/web/locales/nl.json | 10 +-- apps/web/locales/pl.json | 10 +-- apps/web/locales/pt.json | 10 +-- apps/web/locales/ru.json | 10 +-- apps/web/locales/tr.json | 10 +-- apps/web/locales/zh.json | 10 +-- apps/web/public/android-chrome-192x192.png | Bin 0 -> 8194 bytes apps/web/public/android-chrome-512x512.png | Bin 0 -> 30348 bytes apps/web/public/apple-touch-icon.png | Bin 0 -> 7458 bytes apps/web/public/favicon-16x16.png | Bin 0 -> 507 bytes apps/web/public/favicon-32x32.png | Bin 0 -> 1073 bytes apps/web/public/favicon.ico | Bin 0 -> 1073 bytes apps/web/public/logo.svg | 90 ++++++++++++++++++++ apps/web/public/manifest.json | 19 +++++ 26 files changed, 276 insertions(+), 116 deletions(-) create mode 100644 apps/web/public/android-chrome-192x192.png create mode 100644 apps/web/public/android-chrome-512x512.png create mode 100644 apps/web/public/apple-touch-icon.png create mode 100644 apps/web/public/favicon-16x16.png create mode 100644 apps/web/public/favicon-32x32.png create mode 100644 apps/web/public/favicon.ico create mode 100644 apps/web/public/logo.svg create mode 100644 apps/web/public/manifest.json diff --git a/apps/web/app/[locale]/layout.tsx b/apps/web/app/[locale]/layout.tsx index c7fbc78..81fed1d 100644 --- a/apps/web/app/[locale]/layout.tsx +++ b/apps/web/app/[locale]/layout.tsx @@ -1,4 +1,4 @@ -import type { Metadata } from "next"; +import type { Metadata, Viewport } from "next"; import { IBM_Plex_Mono, Space_Grotesk } from "next/font/google"; import { hasLocale, NextIntlClientProvider } from "next-intl"; import { getMessages, getTranslations } from "next-intl/server"; @@ -23,35 +23,105 @@ export function generateStaticParams() { return routing.locales.map((locale) => ({ locale })); } +/** + * SEO + i18n + PWA + Social metadata + */ export async function generateMetadata({ params, }: { params: Promise<{ locale: string }>; }): Promise { const { locale: candidateLocale } = await params; + const locale = hasLocale(routing.locales, candidateLocale) ? candidateLocale : routing.defaultLocale; + const t = await getTranslations({ locale, namespace: "metadata" }); const languages = routing.locales.reduce>( - (accumulator, currentLocale) => { - accumulator[currentLocale] = `/${currentLocale}`; - return accumulator; + (acc, currentLocale) => { + acc[currentLocale] = `/${currentLocale}`; + return acc; }, {}, ); + const title = t("title"); + const description = t("description"); + return { - title: t("title"), - description: t("description"), + title, + description, + + metadataBase: new URL("https://flint.arthurp.fr"), + alternates: { canonical: `/${locale}`, languages, }, + + // Theme (mobile browser bar color) + themeColor: [ + { media: "(prefers-color-scheme: light)", color: "#ffffff" }, + { media: "(prefers-color-scheme: dark)", color: "#0a0a0a" }, + ], + + // Icons / Favicons / PWA + icons: { + icon: [ + { url: "/favicon.ico" }, + { url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" }, + { url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" }, + { url: "/android-chrome-192x192.png", sizes: "192x192" }, + { url: "/android-chrome-512x512.png", sizes: "512x512" }, + ], + apple: "/apple-touch-icon.png", + }, + + // PWA / iOS App mode + appleWebApp: { + capable: true, + title, + statusBarStyle: "default", + }, + + applicationName: title, + + // OpenGraph (Discord / WhatsApp / Twitter preview) + openGraph: { + type: "website", + locale, + url: `/${locale}`, + title, + description, + siteName: title, + }, + + // Twitter card + twitter: { + card: "summary_large_image", + title, + description, + }, + + // SEO control + robots: { + index: true, + follow: true, + }, }; } +/** + * Viewport (important mobile) + */ +export const viewport: Viewport = { + width: "device-width", + initialScale: 1, + themeColor: "#ffffff", +}; + export default async function LocaleLayout({ children, params, @@ -66,10 +136,15 @@ export default async function LocaleLayout({ } const messages = await getMessages(); - const direction = RTL_LOCALES.includes(locale as (typeof RTL_LOCALES)[number]) ? "rtl" : "ltr"; + + const direction = RTL_LOCALES.includes( + locale as (typeof RTL_LOCALES)[number], + ) + ? "rtl" + : "ltr"; return ( - + {children} @@ -77,4 +152,4 @@ export default async function LocaleLayout({ ); -} +} \ No newline at end of file diff --git a/apps/web/components/Logo.tsx b/apps/web/components/Logo.tsx index f9fb804..cb22d41 100644 --- a/apps/web/components/Logo.tsx +++ b/apps/web/components/Logo.tsx @@ -1,41 +1,17 @@ import { getT } from "../i18n/server"; import { Link } from "../i18n/navigation"; - import { cn } from "./ui/cn"; export default async function Logo({ className = "" }: { className?: string }) { const t = await getT(); return ( - - - - - - - - - - - + + Logo {t("common.brand")} ); -} +} \ No newline at end of file diff --git a/apps/web/locales/ar.json b/apps/web/locales/ar.json index 3d6784c..1862569 100644 --- a/apps/web/locales/ar.json +++ b/apps/web/locales/ar.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - استضافة بوتات Discord (ابتداءً من 2 يورو/شهريًا لكل بوت)", + "title": "Flint - استضافة بوتات Discord (ابتداءً من 2 يورو/شهريًا لكل بوت)", "description": "منصة SaaS متعددة المستخدمين لاستضافة وإدارة بوتات Discord الخاصة بك مع أوامر تلقائية، components v2، دعم متعدد اللغات ومتغيرات ديناميكية." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "الرئيسية", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "منصة SaaS لبوتات Discord", - "title": "Shadow - استضف بوتات Discord الخاصة بك (ابتداءً من 2 يورو/شهريًا لكل بوت)", + "title": "Flint - استضف بوتات Discord الخاصة بك (ابتداءً من 2 يورو/شهريًا لكل بوت)", "description": "استضف وأدر بوتاتك باستخدام أوامر تلقائية (prefix و slash)، components v2، مساعدة تلقائية، دعم متعدد اللغات ومتغيرات ديناميكية.", "ctaStart": "ابدأ - 2 يورو/شهريًا", "ctaLogin": "تسجيل الدخول", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "إضافة بوت", - "description": "قم بربط تطبيق Discord الخاص بك عبر OAuth وقم بتسجيله في Shadow." + "description": "قم بربط تطبيق Discord الخاص بك عبر OAuth وقم بتسجيله في Flint." }, "dashboard": { "title": "الإدارة من لوحة التحكم", @@ -109,7 +109,7 @@ "copyright": "حقوق النشر {year} {brand}" }, "login": { - "eyebrow": "Shadow - استضافة بوتات Discord", + "eyebrow": "Flint - استضافة بوتات Discord", "title": "قم بربط حساب Discord الخاص بك", "description": "قم بتسجيل الدخول عبر OAuth2 للوصول إلى مساحتك واستضافة بوتاتك.", "cta": "المتابعة باستخدام Discord" diff --git a/apps/web/locales/bn.json b/apps/web/locales/bn.json index 2f21735..9107fd5 100644 --- a/apps/web/locales/bn.json +++ b/apps/web/locales/bn.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - ডিসকর্ড বট হোস্টিং (প্রতি বট প্রতি মাসে ২ ইউরো থেকে)", + "title": "Flint - ডিসকর্ড বট হোস্টিং (প্রতি বট প্রতি মাসে ২ ইউরো থেকে)", "description": "আপনার ডিসকর্ড বট হোস্ট এবং পরিচালনা করার জন্য মাল্টি-টেন্যান্ট SaaS প্ল্যাটফর্ম, যেখানে স্বয়ংক্রিয় কমান্ড, components v2, বহু-ভাষা এবং ডায়নামিক ভেরিয়েবল রয়েছে।" }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "হোম", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "ডিসকর্ড বটের জন্য SaaS প্ল্যাটফর্ম", - "title": "Shadow - আপনার ডিসকর্ড বট হোস্ট করুন (প্রতি বট প্রতি মাসে ২ ইউরো থেকে)", + "title": "Flint - আপনার ডিসকর্ড বট হোস্ট করুন (প্রতি বট প্রতি মাসে ২ ইউরো থেকে)", "description": "স্বয়ংক্রিয় কমান্ড (prefix এবং slash), components v2, স্বয়ংক্রিয় সাহায্য, বহু-ভাষা সমর্থন এবং ডায়নামিক ভেরিয়েবলসহ আপনার বট হোস্ট এবং পরিচালনা করুন।", "ctaStart": "শুরু করুন - ২ ইউরো/মাস", "ctaLogin": "লগইন", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "একটি বট যোগ করুন", - "description": "OAuth এর মাধ্যমে আপনার Discord অ্যাপ সংযুক্ত করুন এবং Shadow-এ নিবন্ধন করুন।" + "description": "OAuth এর মাধ্যমে আপনার Discord অ্যাপ সংযুক্ত করুন এবং Flint-এ নিবন্ধন করুন।" }, "dashboard": { "title": "ড্যাশবোর্ড থেকে পরিচালনা করুন", @@ -109,7 +109,7 @@ "copyright": "কপিরাইট {year} {brand}" }, "login": { - "eyebrow": "Shadow - ডিসকর্ড বট হোস্টিং", + "eyebrow": "Flint - ডিসকর্ড বট হোস্টিং", "title": "আপনার Discord অ্যাকাউন্ট সংযুক্ত করুন", "description": "OAuth2 এর মাধ্যমে লগইন করে আপনার ড্যাশবোর্ডে প্রবেশ করুন এবং বট হোস্ট করুন।", "cta": "Discord দিয়ে চালিয়ে যান" diff --git a/apps/web/locales/de.json b/apps/web/locales/de.json index 674d28a..f75fe40 100644 --- a/apps/web/locales/de.json +++ b/apps/web/locales/de.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hosting von Discord-Bots (ab 2 EUR/Monat pro Bot)", + "title": "Flint - Hosting von Discord-Bots (ab 2 EUR/Monat pro Bot)", "description": "Multi-Tenant-SaaS-Plattform zum Hosten und Verwalten deiner Discord-Bots mit automatischen Befehlen, Components V2, Mehrsprachigkeit und dynamischen Variablen." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Startseite", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "SaaS-Plattform für Discord-Bots", - "title": "Shadow - Hoste deine Discord-Bots (ab 2 EUR/Monat pro Bot)", + "title": "Flint - Hoste deine Discord-Bots (ab 2 EUR/Monat pro Bot)", "description": "Hoste und verwalte deine Bots mit automatischen Befehlen (Prefix und Slash), Components V2, automatischer Hilfe, Mehrsprachigkeit und dynamischen Variablen.", "ctaStart": "Starten - 2 EUR/Monat", "ctaLogin": "Anmelden", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Bot hinzufügen", - "description": "Verbinde deine Discord-Anwendung über OAuth und registriere sie in Shadow." + "description": "Verbinde deine Discord-Anwendung über OAuth und registriere sie in Flint." }, "dashboard": { "title": "Im Dashboard verwalten", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hosting von Discord-Bots", + "eyebrow": "Flint - Hosting von Discord-Bots", "title": "Verbinde dein Discord-Konto", "description": "Authentifiziere dich über OAuth2, um auf deinen Bereich zuzugreifen und deine Bots zu hosten.", "cta": "Mit Discord fortfahren" diff --git a/apps/web/locales/en.json b/apps/web/locales/en.json index 687a1d5..bc36066 100644 --- a/apps/web/locales/en.json +++ b/apps/web/locales/en.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Discord bot hosting (from €2/month per bot)", + "title": "Flint - Discord bot hosting (from €2/month per bot)", "description": "Multi-tenant SaaS platform to host and manage your Discord bots with automatic commands, components v2, multi-language support, and dynamic variables." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Home", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "SaaS platform for Discord bots", - "title": "Shadow - Host your Discord bots (from €2/month per bot)", + "title": "Flint - Host your Discord bots (from €2/month per bot)", "description": "Host and manage your bots with automatic commands (prefix and slash), components v2, automatic help, multi-language support, and dynamic variables.", "ctaStart": "Get started - €2/month", "ctaLogin": "Log in", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Add a bot", - "description": "Connect your Discord application via OAuth and register it in Shadow." + "description": "Connect your Discord application via OAuth and register it in Flint." }, "dashboard": { "title": "Manage from the dashboard", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Discord bot hosting", + "eyebrow": "Flint - Discord bot hosting", "title": "Connect your Discord account", "description": "Authenticate via OAuth2 to access your workspace and host your bots.", "cta": "Continue with Discord" diff --git a/apps/web/locales/es.json b/apps/web/locales/es.json index be5b93b..10ba440 100644 --- a/apps/web/locales/es.json +++ b/apps/web/locales/es.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Alojamiento de bots de Discord (desde 2 EUR/mes por bot)", + "title": "Flint - Alojamiento de bots de Discord (desde 2 EUR/mes por bot)", "description": "Plataforma SaaS multi-tenant para alojar y gestionar tus bots de Discord con comandos automáticos, components v2, multi-idioma y variables dinámicas." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Inicio", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Plataforma SaaS para bots de Discord", - "title": "Shadow - Aloja tus bots de Discord (desde 2 EUR/mes por bot)", + "title": "Flint - Aloja tus bots de Discord (desde 2 EUR/mes por bot)", "description": "Aloja y gestiona tus bots con comandos automáticos (prefix y slash), components v2, ayuda automática, soporte multi-idioma y variables dinámicas.", "ctaStart": "Empezar - 2 EUR/mes", "ctaLogin": "Iniciar sesión", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Añadir un bot", - "description": "Conecta tu aplicación de Discord mediante OAuth y regístrala en Shadow." + "description": "Conecta tu aplicación de Discord mediante OAuth y regístrala en Flint." }, "dashboard": { "title": "Gestionar desde el panel", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Alojamiento de bots de Discord", + "eyebrow": "Flint - Alojamiento de bots de Discord", "title": "Conecta tu cuenta de Discord", "description": "Autentícate mediante OAuth2 para acceder a tu espacio y alojar tus bots.", "cta": "Continuar con Discord" diff --git a/apps/web/locales/fr.json b/apps/web/locales/fr.json index 98ce6ce..3cb37f4 100644 --- a/apps/web/locales/fr.json +++ b/apps/web/locales/fr.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hébergement de bots Discord (à partir de 2 € / mois par bot)", + "title": "Flint - Hébergement de bots Discord (à partir de 2 € / mois par bot)", "description": "Plateforme SaaS multi-tenant pour héberger et gérer vos bots Discord avec commandes automatiques, components v2, multi-langue et variables dynamiques." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Accueil", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Plateforme SaaS pour bots Discord", - "title": "Shadow - Hébergez vos bots Discord (à partir de 2 € / mois par bot)", + "title": "Flint - Hébergez vos bots Discord (à partir de 2 € / mois par bot)", "description": "Hébergez et gérez vos bots avec commandes automatiques (préfixe et slash), components v2, aide automatique, support multi-langue et variables dynamiques.", "ctaStart": "Commencer - 2 € / mois", "ctaLogin": "Se connecter", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Ajouter un bot", - "description": "Connectez votre application Discord via OAuth et enregistrez-la dans Shadow." + "description": "Connectez votre application Discord via OAuth et enregistrez-la dans Flint." }, "dashboard": { "title": "Gérer depuis le tableau de bord", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hébergement de bots Discord", + "eyebrow": "Flint - Hébergement de bots Discord", "title": "Connectez votre compte Discord", "description": "Authentifiez-vous via OAuth2 pour accéder à votre espace et héberger vos bots.", "cta": "Continuer avec Discord" diff --git a/apps/web/locales/hi.json b/apps/web/locales/hi.json index 9a5135d..de60e64 100644 --- a/apps/web/locales/hi.json +++ b/apps/web/locales/hi.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Discord बॉट होस्टिंग (प्रति बॉट 2 EUR/माह से शुरू)", + "title": "Flint - Discord बॉट होस्टिंग (प्रति बॉट 2 EUR/माह से शुरू)", "description": "अपने Discord बॉट्स को होस्ट और प्रबंधित करने के लिए मल्टी-टेनेंट SaaS प्लेटफ़ॉर्म, जिसमें ऑटोमैटिक कमांड्स, components v2, मल्टी-भाषा सपोर्ट और डायनामिक वेरिएबल्स शामिल हैं।" }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "मुखपृष्ठ", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Discord बॉट्स के लिए SaaS प्लेटफ़ॉर्म", - "title": "Shadow - अपने Discord बॉट्स होस्ट करें (प्रति बॉट 2 EUR/माह से शुरू)", + "title": "Flint - अपने Discord बॉट्स होस्ट करें (प्रति बॉट 2 EUR/माह से शुरू)", "description": "अपने बॉट्स को ऑटोमैटिक कमांड्स (prefix और slash), components v2, स्वचालित सहायता, मल्टी-भाषा सपोर्ट और डायनामिक वेरिएबल्स के साथ होस्ट और प्रबंधित करें।", "ctaStart": "शुरू करें - 2 EUR/माह", "ctaLogin": "लॉगिन करें", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "बॉट जोड़ें", - "description": "OAuth के माध्यम से अपना Discord एप्लिकेशन कनेक्ट करें और Shadow में जोड़ें।" + "description": "OAuth के माध्यम से अपना Discord एप्लिकेशन कनेक्ट करें और Flint में जोड़ें।" }, "dashboard": { "title": "डैशबोर्ड से प्रबंधन करें", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Discord बॉट होस्टिंग", + "eyebrow": "Flint - Discord बॉट होस्टिंग", "title": "अपने Discord खाते से लॉगिन करें", "description": "अपने बॉट्स को होस्ट और प्रबंधित करने के लिए OAuth2 के माध्यम से लॉगिन करें।", "cta": "Discord के साथ जारी रखें" diff --git a/apps/web/locales/id.json b/apps/web/locales/id.json index cd41f91..b6be653 100644 --- a/apps/web/locales/id.json +++ b/apps/web/locales/id.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hosting bot Discord (mulai dari 2 EUR/bulan per bot)", + "title": "Flint - Hosting bot Discord (mulai dari 2 EUR/bulan per bot)", "description": "Platform SaaS multi-tenant untuk meng-host dan mengelola bot Discord Anda dengan perintah otomatis, components v2, multi-bahasa, dan variabel dinamis." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Beranda", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Platform SaaS untuk bot Discord", - "title": "Shadow - Hosting bot Discord Anda (mulai dari 2 EUR/bulan per bot)", + "title": "Flint - Hosting bot Discord Anda (mulai dari 2 EUR/bulan per bot)", "description": "Hosting dan kelola bot Anda dengan perintah otomatis (prefix dan slash), components v2, bantuan otomatis, dukungan multi-bahasa, dan variabel dinamis.", "ctaStart": "Mulai - 2 EUR/bulan", "ctaLogin": "Masuk", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Tambah bot", - "description": "Hubungkan aplikasi Discord Anda melalui OAuth dan daftarkan di Shadow." + "description": "Hubungkan aplikasi Discord Anda melalui OAuth dan daftarkan di Flint." }, "dashboard": { "title": "Kelola dari dashboard", @@ -109,7 +109,7 @@ "copyright": "Hak cipta {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hosting bot Discord", + "eyebrow": "Flint - Hosting bot Discord", "title": "Hubungkan akun Discord Anda", "description": "Login melalui OAuth2 untuk mengakses dashboard dan meng-host bot Anda.", "cta": "Lanjutkan dengan Discord" diff --git a/apps/web/locales/it.json b/apps/web/locales/it.json index c6b00da..05de15c 100644 --- a/apps/web/locales/it.json +++ b/apps/web/locales/it.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hosting di bot Discord (a partire da 2 EUR/mese per bot)", + "title": "Flint - Hosting di bot Discord (a partire da 2 EUR/mese per bot)", "description": "Piattaforma SaaS multi-tenant per ospitare e gestire i tuoi bot Discord con comandi automatici, componenti v2, multi-lingua e variabili dinamiche." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Home", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Piattaforma SaaS per bot Discord", - "title": "Shadow - Ospita i tuoi bot Discord (a partire da 2 EUR/mese per bot)", + "title": "Flint - Ospita i tuoi bot Discord (a partire da 2 EUR/mese per bot)", "description": "Ospita e gestisci i tuoi bot con comandi automatici (prefix e slash), componenti v2, assistenza automatica, supporto multi-lingua e variabili dinamiche.", "ctaStart": "Inizia - 2 EUR/mese", "ctaLogin": "Accedi", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Aggiungi un bot", - "description": "Collega la tua applicazione Discord tramite OAuth e registrala in Shadow." + "description": "Collega la tua applicazione Discord tramite OAuth e registrala in Flint." }, "dashboard": { "title": "Gestisci dal dashboard", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hosting di bot Discord", + "eyebrow": "Flint - Hosting di bot Discord", "title": "Collega il tuo account Discord", "description": "Autenticati tramite OAuth2 per accedere al tuo spazio e ospitare i tuoi bot.", "cta": "Continua con Discord" diff --git a/apps/web/locales/ja.json b/apps/web/locales/ja.json index f2c727f..91de913 100644 --- a/apps/web/locales/ja.json +++ b/apps/web/locales/ja.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Discordボットホスティング(ボット1台あたり月額2EURから)", + "title": "Flint - Discordボットホスティング(ボット1台あたり月額2EURから)", "description": "Discordボットをホスティング・管理するためのマルチテナントSaaSプラットフォーム。自動コマンド、v2コンポーネント、多言語対応、動的変数をサポート。" }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "ホーム", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Discordボット向けSaaSプラットフォーム", - "title": "Shadow - Discordボットをホスティング(ボット1台あたり月額2EURから)", + "title": "Flint - Discordボットをホスティング(ボット1台あたり月額2EURから)", "description": "自動コマンド(プレフィックス・スラッシュ)、v2コンポーネント、自動ヘルプ、多言語対応、動的変数でボットをホスティング・管理できます。", "ctaStart": "開始 - 月額2EUR", "ctaLogin": "ログイン", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "ボットを追加", - "description": "DiscordアプリをOAuthで接続し、Shadowに登録します。" + "description": "DiscordアプリをOAuthで接続し、Flintに登録します。" }, "dashboard": { "title": "ダッシュボードで管理", @@ -109,7 +109,7 @@ "copyright": "著作権 {year} {brand}" }, "login": { - "eyebrow": "Shadow - Discordボットホスティング", + "eyebrow": "Flint - Discordボットホスティング", "title": "Discordアカウントに接続", "description": "OAuth2で認証してダッシュボードにアクセスし、ボットをホスティングします。", "cta": "Discordで続行" diff --git a/apps/web/locales/nl.json b/apps/web/locales/nl.json index 9f35576..ad8a8b6 100644 --- a/apps/web/locales/nl.json +++ b/apps/web/locales/nl.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hosting van Discord-bots (vanaf 2 EUR/maand per bot)", + "title": "Flint - Hosting van Discord-bots (vanaf 2 EUR/maand per bot)", "description": "Multi-tenant SaaS-platform om je Discord-bots te hosten en te beheren met automatische commando's, components v2, meertaligheid en dynamische variabelen." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Home", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "SaaS-platform voor Discord-bots", - "title": "Shadow - Host je Discord-bots (vanaf 2 EUR/maand per bot)", + "title": "Flint - Host je Discord-bots (vanaf 2 EUR/maand per bot)", "description": "Host en beheer je bots met automatische commando's (prefix en slash), components v2, automatische hulp, meertalige ondersteuning en dynamische variabelen.", "ctaStart": "Begin - 2 EUR/maand", "ctaLogin": "Inloggen", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Bot toevoegen", - "description": "Koppel je Discord-app via OAuth en registreer deze in Shadow." + "description": "Koppel je Discord-app via OAuth en registreer deze in Flint." }, "dashboard": { "title": "Beheer via dashboard", @@ -109,7 +109,7 @@ "copyright": "Copyright {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hosting van Discord-bots", + "eyebrow": "Flint - Hosting van Discord-bots", "title": "Verbind je Discord-account", "description": "Authenticeer via OAuth2 om toegang te krijgen tot je omgeving en je bots te hosten.", "cta": "Doorgaan met Discord" diff --git a/apps/web/locales/pl.json b/apps/web/locales/pl.json index ad7f637..adb30d2 100644 --- a/apps/web/locales/pl.json +++ b/apps/web/locales/pl.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hosting botów Discord (od 2 EUR/miesiąc za bota)", + "title": "Flint - Hosting botów Discord (od 2 EUR/miesiąc za bota)", "description": "Wielodostępna platforma SaaS do hostowania i zarządzania botami Discord z automatycznymi komendami, komponentami v2, wielojęzycznością i dynamicznymi zmiennymi." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Strona główna", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Platforma SaaS dla botów Discord", - "title": "Shadow - Hostuj swoje boty Discord (od 2 EUR/miesiąc za bota)", + "title": "Flint - Hostuj swoje boty Discord (od 2 EUR/miesiąc za bota)", "description": "Hostuj i zarządzaj swoimi botami z automatycznymi komendami (prefix i slash), komponentami v2, automatyczną pomocą, wsparciem wielojęzycznym i dynamicznymi zmiennymi.", "ctaStart": "Rozpocznij - 2 EUR/miesiąc", "ctaLogin": "Zaloguj się", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Dodaj bota", - "description": "Połącz swoją aplikację Discord przez OAuth i zarejestruj ją w Shadow." + "description": "Połącz swoją aplikację Discord przez OAuth i zarejestruj ją w Flint." }, "dashboard": { "title": "Zarządzaj z panelu", @@ -109,7 +109,7 @@ "copyright": "Prawa autorskie {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hosting botów Discord", + "eyebrow": "Flint - Hosting botów Discord", "title": "Połącz swoje konto Discord", "description": "Zaloguj się przez OAuth2, aby uzyskać dostęp do swojego panelu i hostować boty.", "cta": "Kontynuuj z Discordem" diff --git a/apps/web/locales/pt.json b/apps/web/locales/pt.json index a8943f4..535a5b0 100644 --- a/apps/web/locales/pt.json +++ b/apps/web/locales/pt.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Hospedagem de bots Discord (a partir de 2 EUR/mês por bot)", + "title": "Flint - Hospedagem de bots Discord (a partir de 2 EUR/mês por bot)", "description": "Plataforma SaaS multi-tenant para hospedar e gerenciar seus bots Discord com comandos automáticos, components v2, multi-idioma e variáveis dinâmicas." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Início", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Plataforma SaaS para bots Discord", - "title": "Shadow - Hospede seus bots Discord (a partir de 2 EUR/mês por bot)", + "title": "Flint - Hospede seus bots Discord (a partir de 2 EUR/mês por bot)", "description": "Hospede e gerencie seus bots com comandos automáticos (prefixo e slash), components v2, ajuda automática, suporte multi-idioma e variáveis dinâmicas.", "ctaStart": "Começar - 2 EUR/mês", "ctaLogin": "Entrar", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Adicionar um bot", - "description": "Conecte sua aplicação Discord via OAuth e registre-a no Shadow." + "description": "Conecte sua aplicação Discord via OAuth e registre-a no Flint." }, "dashboard": { "title": "Gerenciar pelo painel", @@ -109,7 +109,7 @@ "copyright": "Direitos autorais {year} {brand}" }, "login": { - "eyebrow": "Shadow - Hospedagem de bots Discord", + "eyebrow": "Flint - Hospedagem de bots Discord", "title": "Conecte sua conta Discord", "description": "Autentique-se via OAuth2 para acessar seu espaço e hospedar seus bots.", "cta": "Continuar com Discord" diff --git a/apps/web/locales/ru.json b/apps/web/locales/ru.json index c72aa8a..0737304 100644 --- a/apps/web/locales/ru.json +++ b/apps/web/locales/ru.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Хостинг Discord-ботов (от 2 EUR/месяц за бота)", + "title": "Flint - Хостинг Discord-ботов (от 2 EUR/месяц за бота)", "description": "Мультиарендная SaaS-платформа для хостинга и управления вашими Discord-ботами с автоматическими командами, компонентами v2, поддержкой нескольких языков и динамическими переменными." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Главная", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "SaaS-платформа для Discord-ботов", - "title": "Shadow - размещайте своих Discord-ботов (от 2 EUR/месяц за бота)", + "title": "Flint - размещайте своих Discord-ботов (от 2 EUR/месяц за бота)", "description": "Размещайте и управляйте ботами с автоматическими командами (prefix и slash), компонентами v2, автоматической помощью, поддержкой нескольких языков и динамическими переменными.", "ctaStart": "Начать - 2 EUR/месяц", "ctaLogin": "Войти", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Добавить бота", - "description": "Подключите Discord-приложение через OAuth и зарегистрируйте его в Shadow." + "description": "Подключите Discord-приложение через OAuth и зарегистрируйте его в Flint." }, "dashboard": { "title": "Управление через панель", @@ -109,7 +109,7 @@ "copyright": "Авторские права {year} {brand}" }, "login": { - "eyebrow": "Shadow - Хостинг Discord-ботов", + "eyebrow": "Flint - Хостинг Discord-ботов", "title": "Подключите свой аккаунт Discord", "description": "Войдите через OAuth2, чтобы получить доступ к панели и размещать ботов.", "cta": "Продолжить с Discord" diff --git a/apps/web/locales/tr.json b/apps/web/locales/tr.json index 00281e0..f5391e3 100644 --- a/apps/web/locales/tr.json +++ b/apps/web/locales/tr.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Discord bot barındırma (bot başına ayda 2 EUR’dan itibaren)", + "title": "Flint - Discord bot barındırma (bot başına ayda 2 EUR’dan itibaren)", "description": "Discord botlarınızı barındırmak ve yönetmek için çok kiracılı SaaS platformu; otomatik komutlar, v2 bileşenleri, çoklu dil ve dinamik değişkenler içerir." }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "Ana sayfa", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Discord botları için SaaS platformu", - "title": "Shadow - Discord botlarınızı barındırın (bot başına ayda 2 EUR’dan itibaren)", + "title": "Flint - Discord botlarınızı barındırın (bot başına ayda 2 EUR’dan itibaren)", "description": "Botlarınızı otomatik komutlar (prefix ve slash), v2 bileşenleri, otomatik yardım, çoklu dil desteği ve dinamik değişkenlerle barındırın ve yönetin.", "ctaStart": "Başla - 2 EUR/ay", "ctaLogin": "Giriş yap", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "Bot ekle", - "description": "Discord uygulamanızı OAuth ile bağlayın ve Shadow’a kaydedin." + "description": "Discord uygulamanızı OAuth ile bağlayın ve Flint’a kaydedin." }, "dashboard": { "title": "Panelden yönetin", @@ -109,7 +109,7 @@ "copyright": "Telif hakkı {year} {brand}" }, "login": { - "eyebrow": "Shadow - Discord bot barındırma", + "eyebrow": "Flint - Discord bot barındırma", "title": "Discord hesabınızla giriş yapın", "description": "Botlarınızı barındırmak ve panelinize erişmek için OAuth2 ile kimlik doğrulaması yapın.", "cta": "Discord ile devam et" diff --git a/apps/web/locales/zh.json b/apps/web/locales/zh.json index 2f7ee24..b95c2e9 100644 --- a/apps/web/locales/zh.json +++ b/apps/web/locales/zh.json @@ -1,10 +1,10 @@ { "metadata": { - "title": "Shadow - Discord 机器人托管(每个机器人每月 2 欧元起)", + "title": "Flint - Discord 机器人托管(每个机器人每月 2 欧元起)", "description": "多租户 SaaS 平台,用于托管和管理你的 Discord 机器人,支持自动命令、v2 组件、多语言和动态变量。" }, "common": { - "brand": "Shadow" + "brand": "Flint" }, "nav": { "home": "首页", @@ -34,7 +34,7 @@ }, "hero": { "kicker": "Discord 机器人 SaaS 平台", - "title": "Shadow - 托管你的 Discord 机器人(每个机器人每月 2 欧元起)", + "title": "Flint - 托管你的 Discord 机器人(每个机器人每月 2 欧元起)", "description": "托管并管理你的机器人,支持自动命令(前缀与斜杠)、v2 组件、自动帮助、多语言支持和动态变量。", "ctaStart": "开始使用 - 每月 2 欧元", "ctaLogin": "登录", @@ -91,7 +91,7 @@ "steps": { "addBot": { "title": "添加机器人", - "description": "通过 OAuth 连接你的 Discord 应用并注册到 Shadow。" + "description": "通过 OAuth 连接你的 Discord 应用并注册到 Flint。" }, "dashboard": { "title": "在控制面板管理", @@ -109,7 +109,7 @@ "copyright": "版权所有 {year} {brand}" }, "login": { - "eyebrow": "Shadow - Discord 机器人托管", + "eyebrow": "Flint - Discord 机器人托管", "title": "连接你的 Discord 账号", "description": "通过 OAuth2 登录以访问你的空间并托管机器人。", "cta": "使用 Discord 继续" diff --git a/apps/web/public/android-chrome-192x192.png b/apps/web/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f008a7b571ebeb4c18884008095fcf26f27fb1 GIT binary patch literal 8194 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 Q;1igIsrAv9N8GRcH}0`|`2YX_ literal 0 HcmV?d00001 diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..094b705993a8c5e956f3486c7be33e16bc988daf GIT binary patch literal 7458 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 literal 0 HcmV?d00001 diff --git a/apps/web/public/favicon-32x32.png b/apps/web/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..24649d98e8801b18ee4d375b6bf437bed12704c1 GIT binary patch literal 1073 zcmV-11kU@3P)9(E6vuz(zBj`{7w(9#aiuOyh@gUrq^4+vq{SAA7}`*!Vueb}mkLIuG!_g+sFp8l zz)&qQN`i@sk;ITlh|vg37n-OG4epF+Vhoha|4wX002LoU zeTb+H`)z=>q;N8a)QO#+{TAvZV4$`?o(MFr@=ye25Z%eDi%0k))SPB04u z_+A$3xi83_JbB*Z^Rw2^&I!9~a8oD%Hm6VS9TzZKtdB!As8^6;f&l-93Pri+kGg=m z@T+BMv|c`CiiVqzH)4Z|Lhw3%(A;RRaC$;ajc-D!TuMK{aus}t@t4I{>Ohl<|Cn36 z`bVFSyT#Yygg7of5=X?a*e3?XfY>g!UENl8$_v1=RszE5k8&GL_7Z`}Gofbh^9J{TTj`ZGg zc1{2hU6+k*ww~^i!C7`mAZ5w0)m~>~$s9!%oFAe?t^XiePcIt&05ko5?vk0m{4SQL z@B?JzDn(3>ZKh8Vle!!c|JhoG^1F=Lxa&F*(<1@r#LwcqkNKDIa=J#l9^E_n9Fs7d zt>I`A@84q{vArOg{kzOf{I-rdF-P1fW>|)Uxo%_?k>RB5X1|XQ#jv`!NA#JPIz#3V@MbQRnrP<)_4cKEm5s(F=rf$mrB7X%BIe!4(8M&ZrAJ3jD$07@^p=AWMe?SM}lv zY0?x3u&4ORmT@W_6zs8MY*6vri=4bs@rOgqjZh$|P=nzr9(E6vuz(zBj`{7w(9#aiuOyh@gUrq^4+vq{SAA7}`*!Vueb}mkLIuG!_g+sFp8l zz)&qQN`i@sk;ITlh|vg37n-OG4epF+Vhoha|4wX002LoU zeTb+H`)z=>q;N8a)QO#+{TAvZV4$`?o(MFr@=ye25Z%eDi%0k))SPB04u z_+A$3xi83_JbB*Z^Rw2^&I!9~a8oD%Hm6VS9TzZKtdB!As8^6;f&l-93Pri+kGg=m z@T+BMv|c`CiiVqzH)4Z|Lhw3%(A;RRaC$;ajc-D!TuMK{aus}t@t4I{>Ohl<|Cn36 z`bVFSyT#Yygg7of5=X?a*e3?XfY>g!UENl8$_v1=RszE5k8&GL_7Z`}Gofbh^9J{TTj`ZGg zc1{2hU6+k*ww~^i!C7`mAZ5w0)m~>~$s9!%oFAe?t^XiePcIt&05ko5?vk0m{4SQL z@B?JzDn(3>ZKh8Vle!!c|JhoG^1F=Lxa&F*(<1@r#LwcqkNKDIa=J#l9^E_n9Fs7d zt>I`A@84q{vArOg{kzOf{I-rdF-P1fW>|)Uxo%_?k>RB5X1|XQ#jv`!NA#JPIz#3V@MbQRnrP<)_4cKEm5s(F=rf$mrB7X%BIe!4(8M&ZrAJ3jD$07@^p=AWMe?SM}lv zY0?x3u&4ORmT@W_6zs8MY*6vri=4bs@rOgqjZh$|P=nzr + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/manifest.json b/apps/web/public/manifest.json new file mode 100644 index 0000000..d7d1777 --- /dev/null +++ b/apps/web/public/manifest.json @@ -0,0 +1,19 @@ +{ + "name": "Your App Name", + "short_name": "Your App", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file