diff --git a/app/layout.tsx b/app/layout.tsx index 963f792..0ddae53 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,24 +2,21 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; import "./globals.css"; import { Providers } from "./providers"; -import { GoogleAnalytics } from "@/components/GoogleAnalytics"; -import { - GoogleTagManager, - GoogleTagManagerNoscript, -} from "@/components/GoogleTagManager"; import { JsonLd } from "@/components/JsonLd"; import { Matomo } from "@/components/Matomo"; -import { MicrosoftClarity } from "@/components/MicrosoftClarity"; const inter = Inter({ subsets: ["latin"] }); const SITE_URL = "https://songs2vid.com"; const SITE_NAME = "Songs2VID"; const DEFAULT_TITLE = - "Songs2VID - Automated Audio to Video Pipeline for Content Creators"; + "Songs2VID - Fast Audio to Video Converter for YouTube | TunesToTube Alternative"; const DEFAULT_DESCRIPTION = - "Convert MP3/WAV tracks and cover art into YouTube-ready videos instantly. Automated, Docker-ready, and lightweight pipeline."; -const OG_IMAGE = "https://songs2vid.com/og-image.png"; + "Convert MP3, WAV, and audio files into YouTube videos instantly. The fastest, privacy-focused online tool to upload music, beats, and podcasts directly to YouTube."; +const OG_TITLE = "Songs2VID - Fast Audio to Video Converter for YouTube"; +const OG_DESCRIPTION = + "Convert MP3 & audio files into YouTube videos instantly without heavy editing."; +const TWITTER_DESCRIPTION = "Convert MP3 & audio files into YouTube videos instantly."; export const metadata: Metadata = { metadataBase: new URL(SITE_URL), @@ -29,16 +26,7 @@ export const metadata: Metadata = { }, description: DEFAULT_DESCRIPTION, keywords: [ - "upload mp3 to youtube", - "upload flac to youtube", - "upload wav to youtube", - "mp3 to youtube hd", - "jpg to video", "mp3 to youtube", - "mp3 to youtube converter", - "upload mp3", - "mp3 uploader", - "youtube upload", "audio to video converter", "upload audio to youtube", "tunestotube alternative", @@ -54,26 +42,26 @@ export const metadata: Metadata = { canonical: SITE_URL, }, openGraph: { - title: DEFAULT_TITLE, - description: DEFAULT_DESCRIPTION, + title: OG_TITLE, + description: OG_DESCRIPTION, url: SITE_URL, siteName: SITE_NAME, type: "website", locale: "en_US", images: [ { - url: OG_IMAGE, - width: 1200, - height: 630, + url: "/logo.png", + width: 512, + height: 512, alt: SITE_NAME, }, ], }, twitter: { card: "summary_large_image", - title: DEFAULT_TITLE, - description: DEFAULT_DESCRIPTION, - images: [OG_IMAGE], + title: OG_TITLE, + description: TWITTER_DESCRIPTION, + images: ["/logo.png"], }, robots: { index: true, @@ -95,15 +83,9 @@ export default function RootLayout({ }>) { return ( - - - - - - {children} diff --git a/app/privacy/page.tsx b/app/privacy/page.tsx index e74669b..c3b6377 100644 --- a/app/privacy/page.tsx +++ b/app/privacy/page.tsx @@ -64,71 +64,45 @@ export default function PrivacyPage() { uploaded MP3 files to help prefill fields
  • Playlist titles and IDs when you create or attach YouTube playlists through the Service
  • -
  • - Optional job callback URLs (webhookUrl) you provide for automation (for - example n8n or Make) - see section 3.5 -
  • 3.3 Usage, API, and technical data

    • - Plan type (Bedroom Producer / Independent Producer / Developer & Automation / - Enterprise), monthly credit allocation, credits used, purchased extra credits, quota reset + Plan type, monthly credit allocation, credits used, purchased extra credits, quota reset dates, lifetime successful video render count (used for Free-tier watermark policy), and job processing status
    • - Quota reset / extension request history for paid plans, and API rate-limit extension - request history for Developer & Automation / Enterprise when you submit a request + Quota reset / extension and API rate-limit extension request history (Pro) when you submit + a request
    • - API key material for Developer & Automation and Enterprise users: we store a - cryptographic hash and a short non-secret prefix; the full key is shown once at creation - and is not stored in plaintext + API key material for Pro users: we store a cryptographic hash and a short non-secret + prefix; the full key is shown once at creation and is not stored in plaintext
    • IP address, browser type, device information, and request logs
    • Error reports and operational diagnostics
    • Website and product analytics events collected via Matomo (self-hosted at - analytics.atakanozban.com), Google Analytics (GA4 measurement IDs G-9XCHRS7LJR and G-2V3FSMMPQX), - Google Tag Manager (container GTM-PZL4HXBR), Microsoft Clarity (project y4hxg6t7s6), and - Google Search Console search-performance reports to understand traffic and improve the - Service - see section 10 + analytics.atakanozban.com) to understand traffic and improve the Service — see section + 10

    3.4 Payment data

    - If you purchase an Independent Producer subscription, a Developer & Automation - subscription, an Enterprise arrangement, or Free-plan extra credits, payment processing is - handled by Stripe. We do not store full payment card details on our servers. We may receive - and store billing status, Stripe customer and subscription identifiers, Checkout session or - payment references, plan identifiers, purchase amounts, and credit pack size for fulfilled - top-ups. -

    - -

    3.5 Job webhooks and automation callbacks

    -

    - On Developer & Automation and Enterprise plans (and self-hosted deployments where - enabled), you may supply an absolute HTTP(S) callback URL when creating a render job. We - store that URL with the job record and, when encoding or upload reaches a terminal state, - may POST a JSON payload to it. Typical fields include event type, job and item identifiers, - status, optional YouTube video ID, error message, and completion timestamp. -

    -

    - You choose the destination (for example your n8n webhook, Make scenario, or your own - server). We do not control how that endpoint stores or shares the payload. Only set URLs you - own or are authorized to use. Delivery is best-effort; we do not guarantee receipt or - retention by the receiving system. + If you purchase a Pro subscription or Free-plan extra credits, payment processing is handled + by Stripe. We do not store full payment card details on our servers. We may receive and store + billing status, Stripe customer and subscription identifiers, Checkout session or payment + references, purchase amounts, and credit pack size for fulfilled top-ups.

    4. Why we process your data

    • Contract performance: to provide video encoding, metadata handling, - playlist actions, API access, webhook notifications, and YouTube upload features you - request + playlist actions, API access, and YouTube upload features you request
    • Legitimate interests: to secure our service, prevent abuse, improve @@ -171,73 +145,18 @@ export default function PrivacyPage() { storage
    • - Stripe: Independent Producer and Developer & Automation - subscriptions, Free-plan credit top-ups, and related billing webhooks ( + Stripe: Pro subscriptions, Free-plan credit top-ups, and related billing + webhooks ( Stripe Privacy Policy )
    • -
    • - Your webhook endpoints: if you configure a job webhookUrl, - we send job status JSON to that URL as described in section 3.5 -
    • Matomo (self-hosted analytics): privacy-friendly analytics we operate at analytics.atakanozban.com to measure visits and improve Songs2VID. Analytics data stays on infrastructure we control; we do not sell it to advertising networks.
    • -
    • - Google Analytics: Google LLC processes aggregated usage analytics for our - sites under Google's terms when the GA4 tags (G-9XCHRS7LJR and G-2V3FSMMPQX) load. See{" "} - - Google's Privacy Policy - - . -
    • -
    • - Google Tag Manager: Google LLC loads our tag container{" "} - GTM-PZL4HXBR, which may deploy Google Analytics and other measurement tags we - configure. See{" "} - - Google's Privacy Policy - - . -
    • -
    • - Google Search Console: Google LLC provides search indexing and - performance reports (queries, impressions, clicks, coverage) for songs2vid.com and related - properties we verify. Search Console is a webmaster tool, not a visitor-facing tracker on - every page. See{" "} - - Google's Privacy Policy - - . -
    • -
    • - Microsoft Clarity: Microsoft Corporation processes usage analytics and - anonymized session recordings and heatmaps (project y4hxg6t7s6). See{" "} - - Microsoft's Privacy Statement - - . -

    These providers process data only as necessary to deliver their services and under @@ -267,9 +186,8 @@ export default function PrivacyPage() {

    We do not sell, share, transfer, or disclose Google user data obtained via Google OAuth / YouTube APIs to third parties, except as needed to operate the Service infrastructure under - our control, when required by law, or when you explicitly configure a job webhook that may - include a YouTube video ID you caused to be published. Google / YouTube themselves process - data when we call their APIs on your behalf to perform actions you initiate. + our control or when required by law. Google / YouTube themselves process data when we call + their APIs on your behalf to perform actions you initiate.

    You can revoke Songs2VID's access to your Google account at any time in{" "} @@ -278,7 +196,7 @@ export default function PrivacyPage() { target="_blank" rel="noopener noreferrer" > - Google Account - Security - Third-party access + Google Account → Security → Third-party access . After revocation (or when tokens can no longer be refreshed), we will stop using those credentials and delete or invalidate stored YouTube OAuth tokens and related connection data @@ -290,24 +208,18 @@ export default function PrivacyPage() {

    • Uploaded source files and generated outputs are retained only as long as needed to complete - your jobs (typically removed after successful YouTube upload or when no longer required for - retries) -
    • -
    • - Job metadata (status, titles, YouTube IDs, errors, optional webhookUrl) is - kept while your account remains active and may be purged on account deletion, subject to - short-term backups and troubleshooting logs + your jobs (typically removed after successful processing/upload or when no longer required)
    • Account data is kept while your account remains active
    • Billing records may be retained as required by law
    • Logs are retained for a limited period for security and troubleshooting
    • - API key hashes are removed when you revoke the key, leave Developer & Automation / - Enterprise (where applicable), or delete your account + API key hashes are removed when you revoke the key, downgrade from Pro (where applicable), + or delete your account

    - You may delete your account from Dashboard - Settings (account deletion + You may delete your account from Dashboard → Settings (account deletion control) or by emailing{" "} {LEGAL_OPERATOR.email}. Deletion removes account and connection data from active systems subject to legal retention obligations @@ -333,7 +245,7 @@ export default function PrivacyPage() {

  • Withdraw consent where processing is consent-based
  • Lodge a complaint with a supervisory authority (in Hungary, the Nemzeti Adatvédelmi és - Információszabadság Hatóság - NAIH) + Információszabadság Hatóság — NAIH)
  • @@ -350,43 +262,11 @@ export default function PrivacyPage() {

    We also use Matomo, a self-hosted analytics tool on{" "} - analytics.atakanozban.com, Google Analytics 4 (measurement - IDs G-9XCHRS7LJR and G-2V3FSMMPQX), and{" "} - Microsoft Clarity (project y4hxg6t7s6) on our website - (including the landing page and dashboard) and documentation site. These tools help us - understand how people use Songs2VID so we can improve functionality, reliability, and - content. Typical data includes pages viewed, approximate location derived from IP, - device/browser type, referring site, interaction events, and (for Clarity) anonymized - session recordings and heatmaps. We configure Matomo for our domains under{" "} - *.songs2vid.com. Google Analytics is provided by Google LLC; see{" "} - - Google's Privacy Policy - - . Microsoft Clarity is provided by Microsoft Corporation; see{" "} - - Microsoft's Privacy Statement - - . -

    -

    - We also use Google Tag Manager (container GTM-PZL4HXBR) to - load and manage measurement tags on our website, including Google Analytics. Tag Manager is - a delivery mechanism; tags it loads may set cookies or collect usage data as described in - this section. -

    -

    - We use Google Search Console to verify site ownership and review search - indexing and performance reports (such as queries, impressions, and clicks) for - songs2vid.com. Search Console is operated by Google LLC and is not a page-level visitor - tracking pixel. + analytics.atakanozban.com, on our website (including the landing page and + dashboard) and documentation site. Matomo helps us understand how people use Songs2VID so we + can improve functionality, reliability, and content. Typical data includes pages viewed, + approximate location derived from IP, device/browser type, referring site, and interaction + events. We configure Matomo for our domains under *.songs2vid.com.

    We collect this analytics data to improve the Service, not to sell personal profiles to @@ -400,18 +280,17 @@ export default function PrivacyPage() {

    11. Security

    We implement appropriate technical and organizational measures to protect your data, - including encryption in transit, encrypted storage of YouTube OAuth tokens at rest, hashed - API keys, access controls, and isolated processing environments. No method of transmission - or storage is 100% secure. + including encryption in transit, encrypted storage of YouTube OAuth tokens at rest, access + controls, and isolated processing environments. No method of transmission or storage is + 100% secure.

    12. International transfers

    If data is transferred outside your country, we ensure appropriate safeguards such as standard contractual clauses or equivalent mechanisms where required by law. Google, Stripe, - Microsoft, and infrastructure providers may process data in other countries as described in - their policies. Webhook destinations you configure may also receive data in other countries - under your control. + and infrastructure providers may process data in other countries as described in their + policies.

    13. Children

    diff --git a/components/GoogleAnalytics.tsx b/components/GoogleAnalytics.tsx deleted file mode 100644 index 470ab7f..0000000 --- a/components/GoogleAnalytics.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import Script from "next/script"; - -/** Primary GA4 property (songs2vid.com). */ -const GA_MEASUREMENT_ID = "G-9XCHRS7LJR"; -/** Additional GA4 property — both must remain configured. */ -const GA_MEASUREMENT_ID_SECONDARY = "G-2V3FSMMPQX"; - -/** - * Google Analytics 4 (gtag.js) for songs2vid.com / songs2yt.com. - * Loaded once from the root layout; both measurement IDs stay active. - */ -export function GoogleAnalytics() { - return ( - <> - - - ); -} diff --git a/components/GoogleTagManager.tsx b/components/GoogleTagManager.tsx deleted file mode 100644 index 0710a07..0000000 --- a/components/GoogleTagManager.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import Script from "next/script"; - -const GTM_ID = "GTM-PZL4HXBR"; - -/** - * Google Tag Manager container GTM-PZL4HXBR. - * Place in as early as possible (beforeInteractive). - */ -export function GoogleTagManager() { - return ( - - ); -} - -/** GTM noscript iframe — immediately after opening . */ -export function GoogleTagManagerNoscript() { - return ( -