feat(web): Complete website overhaul for beta release

Major updates to make the website beta-ready:

## Content & Design
- Completely rewritten homepage with modern, catchy design
- Prominent one-click installation command in hero section
- Clear value proposition: 'Voice Dictation for Linux, Finally Done Right'
- Trust indicators (100% Offline, Privacy First, Open Source, X11/Wayland)
- Interactive demo section encouraging users to try double-tap Ctrl
- Feature cards highlighting key benefits
- Detailed installation section with both full and quick install options
- Voice commands reference section
- Speech engines comparison (Whisper AI vs VOSK)
- Comprehensive FAQ section
- Modern CTA section and footer

## SEO Improvements
- Added comprehensive meta tags with proper descriptions
- Open Graph and Twitter Card meta tags with proper images
- JSON-LD structured data for SoftwareApplication schema
- Added robots.txt for search engine crawling
- Added sitemap.xml for better indexing
- Added site.webmanifest for PWA support
- Proper canonical URL and meta keywords
- Author attribution and GPL-3.0 license info

## Technical
- Removed unused creatr-devtools dependency
- Real GitHub stars fetching from API
- Improved responsive design
- Better accessibility with proper aria labels
- Clean, maintainable component structure

The website now properly reflects the v0.2.0-alpha release features
and provides a clear path for users to install and use Vocalinux.
This commit is contained in:
jatinkrmalik
2026-01-19 16:35:46 -08:00
parent 2dcf0ef17c
commit 02c3a21931
10 changed files with 7016 additions and 877 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 MiB

+8
View File
@@ -0,0 +1,8 @@
# Robots.txt for Vocalinux
# https://vocalinux.com
User-agent: *
Allow: /
# Sitemap location
Sitemap: https://vocalinux.com/sitemap.xml
+26
View File
@@ -0,0 +1,26 @@
{
"name": "Vocalinux",
"short_name": "Vocalinux",
"description": "Voice dictation for Linux, finally done right. 100% offline and privacy-focused.",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#7c3aed",
"icons": [
{
"src": "/favicon-16x16.png",
"sizes": "16x16",
"type": "image/png"
},
{
"src": "/favicon-32x32.png",
"sizes": "32x32",
"type": "image/png"
},
{
"src": "/apple-touch-icon.png",
"sizes": "180x180",
"type": "image/png"
}
]
}
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://vocalinux.com/</loc>
<lastmod>2026-01-19</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
<!-- Placeholder for microphone off icon -->
<circle cx="64" cy="64" r="60" fill="#e74c3c" />
<rect x="44" y="40" width="40" height="60" rx="20" fill="#7f8c8d" />
<line x1="40" y1="88" x2="88" y2="40" stroke="#e74c3c" stroke-width="8" />
<!-- This is a placeholder. Replace with actual custom design. -->
</svg>

After

Width:  |  Height:  |  Size: 465 B

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
<!-- Placeholder for microphone processing icon -->
<circle cx="64" cy="64" r="60" fill="#f39c12" />
<rect x="44" y="40" width="40" height="60" rx="20" fill="#2c3e50" />
<circle cx="64" cy="40" r="8" fill="#f39c12">
<animate attributeName="cy" values="40;50;40" dur="1s" repeatCount="indefinite" />
</circle>
<circle cx="48" cy="60" r="8" fill="#f39c12">
<animate attributeName="cy" values="60;70;60" dur="1s" repeatCount="indefinite" />
</circle>
<circle cx="80" cy="60" r="8" fill="#f39c12">
<animate attributeName="cy" values="60;70;60" dur="1s" repeatCount="indefinite" />
</circle>
<!-- This is a placeholder. Replace with actual custom design. -->
</svg>

After

Width:  |  Height:  |  Size: 836 B

+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
<!-- Placeholder for microphone on/active icon -->
<circle cx="64" cy="64" r="60" fill="#2ecc71" />
<rect x="44" y="40" width="40" height="60" rx="20" fill="#2c3e50" />
<path d="M 40,78 Q 64,88 88,78" stroke="#2ecc71" stroke-width="4" fill="none" />
<path d="M 40,88 Q 64,98 88,88" stroke="#2ecc71" stroke-width="4" fill="none" />
<!-- This is a placeholder. Replace with actual custom design. -->
</svg>

After

Width:  |  Height:  |  Size: 560 B

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 308 KiB

+109 -41
View File
@@ -3,44 +3,55 @@ import React from "react";
import { GeistSans } from "geist/font/sans";
import { type Metadata } from "next";
import { ThemeProvider } from "@/components/theme-provider";
import { DevtoolsProvider } from 'creatr-devtools';
export const viewport = {
width: "device-width",
initialScale: 1,
maximumScale: 1
maximumScale: 5,
themeColor: [
{ media: "(prefers-color-scheme: light)", color: "#ffffff" },
{ media: "(prefers-color-scheme: dark)", color: "#18181b" },
],
};
export const metadata: Metadata = {
metadataBase: new URL("https://vocalinux.com"),
title: {
default: "Vocalinux - Open-Source Voice Dictation for Linux",
default: "Vocalinux - Voice Dictation for Linux, Finally Done Right",
template: "%s | Vocalinux"
},
description: "Open-source offline voice dictation for Linux using Whisper models. Privacy-focused with no cloud dependencies.",
description: "Free, open-source voice dictation for Linux. 100% offline with Whisper AI. Double-tap Ctrl to start. Works everywhere - X11 & Wayland. One-click install.",
applicationName: "Vocalinux",
keywords: ["voice dictation", "linux", "speech recognition", "whisper", "offline", "privacy", "x11", "wayland", "open-source"],
authors: [{
name: "Vocalinux Team"
}],
creator: "Vocalinux Team",
publisher: "Vocalinux Team",
keywords: [
"voice dictation linux",
"speech to text linux",
"linux voice typing",
"whisper linux",
"vosk linux",
"offline voice dictation",
"privacy voice recognition",
"speech recognition linux",
"dictation software ubuntu",
"voice typing fedora",
"wayland voice dictation",
"x11 speech to text",
"open source dictation",
"free speech recognition",
"linux accessibility",
"hands free typing linux",
"voice commands linux",
"GTK voice dictation"
],
authors: [{ name: "Jatin K Malik", url: "https://github.com/jatinkrmalik" }],
creator: "Jatin K Malik",
publisher: "Vocalinux",
icons: {
icon: [{
url: "/favicon-16x16.png",
sizes: "16x16",
type: "image/png"
}, {
url: "/favicon-32x32.png",
sizes: "32x32",
type: "image/png"
}, {
url: "/favicon.ico",
sizes: "48x48",
type: "image/x-icon"
}],
apple: [{
url: "/apple-touch-icon.png",
sizes: "180x180",
type: "image/png"
}]
icon: [
{ url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
{ url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
{ url: "/favicon.ico", sizes: "48x48", type: "image/x-icon" }
],
apple: [{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" }]
},
manifest: "/site.webmanifest",
appleWebApp: {
@@ -54,34 +65,91 @@ export const metadata: Metadata = {
openGraph: {
type: "website",
locale: "en_US",
url: "https://github.com/jatinkrmalik/vocalinux",
url: "https://vocalinux.com",
siteName: "Vocalinux",
title: "Vocalinux - Open-Source Voice Dictation for Linux",
description: "Open-source offline voice dictation for Linux using Whisper models. Works with X11 and Wayland.",
title: "Vocalinux - Voice Dictation for Linux, Finally Done Right",
description: "Free, open-source voice dictation for Linux. 100% offline & private with Whisper AI and VOSK. Double-tap Ctrl to start dictating in any app.",
images: [{
url: "https://picsum.photos/200",
width: 1280,
height: 640,
alt: "Vocalinux Open-Source Voice Dictation"
url: "/og-image.png",
width: 1200,
height: 630,
alt: "Vocalinux - Voice Dictation for Linux"
}]
},
twitter: {
card: "summary_large_image",
title: "Vocalinux - Open-Source Voice Dictation for Linux",
description: "Open-source offline voice dictation for Linux using Whisper models. Works with X11 and Wayland.",
images: ["https://picsum.photos/200"]
}
title: "Vocalinux - Voice Dictation for Linux, Finally Done Right",
description: "Free, open-source voice dictation for Linux. 100% offline & private. Double-tap Ctrl to start dictating in any app.",
images: ["/og-image.png"],
creator: "@jatinkrmalik"
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-video-preview": -1,
"max-image-preview": "large",
"max-snippet": -1,
},
},
alternates: {
canonical: "https://vocalinux.com",
},
category: "Technology",
};
export default function RootLayout({
children
}: Readonly<{
children: React.ReactNode;
}>) {
return <html lang="en" className={`${GeistSans.variable} scroll-smooth`} suppressHydrationWarning>
const jsonLd = {
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Vocalinux",
"applicationCategory": "UtilitiesApplication",
"operatingSystem": "Linux",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"description": "Free, open-source voice dictation for Linux. 100% offline with Whisper AI and VOSK. Works with X11 and Wayland.",
"softwareVersion": "0.2.0-alpha",
"author": {
"@type": "Person",
"name": "Jatin K Malik",
"url": "https://github.com/jatinkrmalik"
},
"url": "https://vocalinux.com",
"downloadUrl": "https://github.com/jatinkrmalik/vocalinux",
"screenshot": "https://vocalinux.com/og-image.png",
"featureList": [
"100% offline voice recognition",
"Privacy-focused - no cloud dependencies",
"Works with all Linux applications",
"X11 and Wayland support",
"Double-tap Ctrl activation",
"Whisper AI and VOSK engines",
"Voice commands for punctuation",
"System tray integration"
]
};
return (
<html lang="en" className={`${GeistSans.variable} scroll-smooth`} suppressHydrationWarning>
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
</head>
<body>
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
{children}
</ThemeProvider>
</body>
</html>;
</html>
);
}
+958 -836
View File
File diff suppressed because it is too large Load Diff