fix: add Vintage Radio to showcase, update app count to 93+ across all pages
- Added vintage-radio (93rd app template) to AppShowcase - Updated '92+' to '93+' across homepage, about, features, pricing, docs - Deployed to live site via FTPS
This commit is contained in:
@@ -140,7 +140,7 @@ export default function AboutPage() {
|
|||||||
</h2>
|
</h2>
|
||||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-8">
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-8">
|
||||||
{[
|
{[
|
||||||
{ value: "92+", label: "App Templates" },
|
{ value: "93+", label: "App Templates" },
|
||||||
{ value: "1770+", label: "Test Cases" },
|
{ value: "1770+", label: "Test Cases" },
|
||||||
{ value: "260+", label: "API Endpoints" },
|
{ value: "260+", label: "API Endpoints" },
|
||||||
{ value: "5", label: "Languages" },
|
{ value: "5", label: "Languages" },
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export default function DocsFirstServicePage() {
|
|||||||
|
|
||||||
<h2>Three ways to add a service</h2>
|
<h2>Three ways to add a service</h2>
|
||||||
|
|
||||||
<h3>1. Pick from 92+ one-click templates</h3>
|
<h3>1. Pick from 93+ one-click templates</h3>
|
||||||
<p>
|
<p>
|
||||||
The template library covers the most popular self-hosted applications — media servers, dashboards,
|
The template library covers the most popular self-hosted applications — media servers, dashboards,
|
||||||
databases, note apps, automation tools, and more. Each template bundles sane defaults for ports,
|
databases, note apps, automation tools, and more. Each template bundles sane defaults for ports,
|
||||||
@@ -62,7 +62,7 @@ export default function DocsFirstServicePage() {
|
|||||||
<h3>Step 1: Open the template library</h3>
|
<h3>Step 1: Open the template library</h3>
|
||||||
<p>
|
<p>
|
||||||
From the dashboard sidebar, click <strong>New Service → From Template</strong>. The template library
|
From the dashboard sidebar, click <strong>New Service → From Template</strong>. The template library
|
||||||
opens with a searchable grid of 92+ applications.
|
opens with a searchable grid of 93+ applications.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3>Step 2: Find Plex</h3>
|
<h3>Step 2: Find Plex</h3>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export default function DocsIntegrationsPage() {
|
|||||||
Docker (and Docker Compose) is the runtime foundation for every deployment workflow, container lifecycle action,
|
Docker (and Docker Compose) is the runtime foundation for every deployment workflow, container lifecycle action,
|
||||||
service discovery sweep, and template-based launch. DashCaddy communicates with the Docker daemon over the
|
service discovery sweep, and template-based launch. DashCaddy communicates with the Docker daemon over the
|
||||||
Unix socket (<code>/var/run/docker.sock</code>) to start, stop, restart, inspect, and adopt containers, and to
|
Unix socket (<code>/var/run/docker.sock</code>) to start, stop, restart, inspect, and adopt containers, and to
|
||||||
deploy the <strong>92+ one-click application templates</strong> from the catalog.
|
deploy the <strong>93+ one-click application templates</strong> from the catalog.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
The daemon connection is established at startup. If the socket is missing or permissioned for a different user,
|
The daemon connection is established at startup. If the socket is missing or permissioned for a different user,
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ export default function DocsOverviewPage() {
|
|||||||
<tr className="border-b border-surface-800">
|
<tr className="border-b border-surface-800">
|
||||||
<td className="py-3 pr-4">Docker deployment</td>
|
<td className="py-3 pr-4">Docker deployment</td>
|
||||||
<td className="py-3 pr-4">Manual compose files</td>
|
<td className="py-3 pr-4">Manual compose files</td>
|
||||||
<td className="py-3 pr-4">92+ one-click templates</td>
|
<td className="py-3 pr-4">93+ one-click templates</td>
|
||||||
<td className="py-3">Templates + Recipes</td>
|
<td className="py-3">Templates + Recipes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr className="border-b border-surface-800">
|
<tr className="border-b border-surface-800">
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export default function DocsPremiumPage() {
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr><td>Dashboard & web UI</td><td>✓</td><td>✓</td></tr>
|
<tr><td>Dashboard & web UI</td><td>✓</td><td>✓</td></tr>
|
||||||
<tr><td>92+ application templates</td><td>✓</td><td>✓</td></tr>
|
<tr><td>93+ application templates</td><td>✓</td><td>✓</td></tr>
|
||||||
<tr><td>Caddy reverse proxy + auto HTTPS</td><td>✓</td><td>✓</td></tr>
|
<tr><td>Caddy reverse proxy + auto HTTPS</td><td>✓</td><td>✓</td></tr>
|
||||||
<tr><td>Caddyfile-as-Code builder</td><td>✓</td><td>✓</td></tr>
|
<tr><td>Caddyfile-as-Code builder</td><td>✓</td><td>✓</td></tr>
|
||||||
<tr><td>Technitium DNS automation</td><td>✓</td><td>✓</td></tr>
|
<tr><td>Technitium DNS automation</td><td>✓</td><td>✓</td></tr>
|
||||||
|
|||||||
@@ -40,11 +40,11 @@ export default function FeaturesPage() {
|
|||||||
id: 'app-deployment',
|
id: 'app-deployment',
|
||||||
title: 'App Deployment',
|
title: 'App Deployment',
|
||||||
description:
|
description:
|
||||||
'Deploy from a library of 92+ pre-configured Docker templates with one click. Automatic configuration, smart defaults, and service discovery that auto-detects running containers and lets you adopt them instantly. From zero to live in seconds.',
|
'Deploy from a library of 93+ pre-configured Docker templates with one click. Automatic configuration, smart defaults, and service discovery that auto-detects running containers and lets you adopt them instantly. From zero to live in seconds.',
|
||||||
icon: '🚀',
|
icon: '🚀',
|
||||||
features: [
|
features: [
|
||||||
{ icon: '⚡', label: 'One-click deployment' },
|
{ icon: '⚡', label: 'One-click deployment' },
|
||||||
{ icon: '📦', label: '92+ app templates' },
|
{ icon: '📦', label: '93+ app templates' },
|
||||||
{ icon: '⚙️', label: 'Automatic configuration' },
|
{ icon: '⚙️', label: 'Automatic configuration' },
|
||||||
{ icon: '🔍', label: 'Service Discovery & auto-adopt' },
|
{ icon: '🔍', label: 'Service Discovery & auto-adopt' },
|
||||||
{ icon: '🧙', label: 'Smart Defaults Wizard' },
|
{ icon: '🧙', label: 'Smart Defaults Wizard' },
|
||||||
@@ -350,7 +350,7 @@ export default function FeaturesPage() {
|
|||||||
</div>
|
</div>
|
||||||
<ul className="space-y-3">
|
<ul className="space-y-3">
|
||||||
{[
|
{[
|
||||||
'92+ one-click app templates',
|
'93+ one-click app templates',
|
||||||
'Automatic SSL certificates',
|
'Automatic SSL certificates',
|
||||||
'Technitium DNS automation',
|
'Technitium DNS automation',
|
||||||
'Reverse proxy + Caddyfile builder',
|
'Reverse proxy + Caddyfile builder',
|
||||||
|
|||||||
+3
-3
@@ -4,7 +4,7 @@ import "./globals.css";
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "DashCaddy - Self-Hosting Made Beautiful",
|
title: "DashCaddy - Self-Hosting Made Beautiful",
|
||||||
description:
|
description:
|
||||||
"Deploy 92+ Docker apps with one click. AI-powered self-hosting with automatic SSL, DNS, reverse proxy, security center, and fleet management.",
|
"Deploy 93+ Docker apps with one click. AI-powered self-hosting with automatic SSL, DNS, reverse proxy, security center, and fleet management.",
|
||||||
keywords: [
|
keywords: [
|
||||||
"self-hosting",
|
"self-hosting",
|
||||||
"docker",
|
"docker",
|
||||||
@@ -19,7 +19,7 @@ export const metadata: Metadata = {
|
|||||||
openGraph: {
|
openGraph: {
|
||||||
title: "DashCaddy - Self-Hosting Made Beautiful",
|
title: "DashCaddy - Self-Hosting Made Beautiful",
|
||||||
description:
|
description:
|
||||||
"Deploy 92+ Docker apps with one click. AI-powered self-hosting with automatic SSL, DNS, and reverse proxy.",
|
"Deploy 93+ Docker apps with one click. AI-powered self-hosting with automatic SSL, DNS, and reverse proxy.",
|
||||||
url: "https://dashcaddy.net",
|
url: "https://dashcaddy.net",
|
||||||
siteName: "DashCaddy",
|
siteName: "DashCaddy",
|
||||||
type: "website",
|
type: "website",
|
||||||
@@ -28,7 +28,7 @@ export const metadata: Metadata = {
|
|||||||
card: "summary_large_image",
|
card: "summary_large_image",
|
||||||
title: "DashCaddy - Self-Hosting Made Beautiful",
|
title: "DashCaddy - Self-Hosting Made Beautiful",
|
||||||
description:
|
description:
|
||||||
"Deploy 92+ Docker apps with one click. AI-powered self-hosting.",
|
"Deploy 93+ Docker apps with one click. AI-powered self-hosting.",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -44,7 +44,7 @@ export default function Home() {
|
|||||||
<p className="text-xl text-surface-300 max-w-lg leading-relaxed">
|
<p className="text-xl text-surface-300 max-w-lg leading-relaxed">
|
||||||
Just say “deploy Plex” — DashCaddy’s AI Intent Router handles the rest.
|
Just say “deploy Plex” — DashCaddy’s AI Intent Router handles the rest.
|
||||||
Deploy Docker apps with one click, automatic SSL, DNS, and reverse proxy.
|
Deploy Docker apps with one click, automatic SSL, DNS, and reverse proxy.
|
||||||
92+ templates, fleet management, and an MCP control plane for AI assistants.
|
93+ templates, fleet management, and an MCP control plane for AI assistants.
|
||||||
Everything you need for self-hosted perfection.
|
Everything you need for self-hosted perfection.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -206,8 +206,8 @@ export default function Home() {
|
|||||||
/>
|
/>
|
||||||
<FeatureCard
|
<FeatureCard
|
||||||
icon="🚀"
|
icon="🚀"
|
||||||
title="92+ App Templates"
|
title="93+ App Templates"
|
||||||
description="Choose from 92+ pre-configured Docker app templates. Deploy your favorite applications instantly without manual configuration."
|
description="Choose from 93+ pre-configured Docker app templates. Deploy your favorite applications instantly without manual configuration."
|
||||||
/>
|
/>
|
||||||
<FeatureCard
|
<FeatureCard
|
||||||
icon="🛡️"
|
icon="🛡️"
|
||||||
@@ -396,7 +396,7 @@ export default function Home() {
|
|||||||
<span className="text-surface-500">Write your own compose files</span>
|
<span className="text-surface-500">Write your own compose files</span>
|
||||||
</td>
|
</td>
|
||||||
<td className="px-6 py-4 text-center text-sm">
|
<td className="px-6 py-4 text-center text-sm">
|
||||||
<span className="text-green-400 font-semibold">✓ 92+ pre-configured</span>
|
<span className="text-green-400 font-semibold">✓ 93+ pre-configured</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr className="hover:bg-surface-800/30 transition-colors">
|
<tr className="hover:bg-surface-800/30 transition-colors">
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export default function PricingPage() {
|
|||||||
|
|
||||||
const coreFeatures = [
|
const coreFeatures = [
|
||||||
'Dashboard & real-time service monitoring',
|
'Dashboard & real-time service monitoring',
|
||||||
'92+ pre-configured app templates',
|
'93+ pre-configured app templates',
|
||||||
'Automatic SSL via Caddy internal CA',
|
'Automatic SSL via Caddy internal CA',
|
||||||
'DNS automation via Technitium DNS',
|
'DNS automation via Technitium DNS',
|
||||||
'Reverse proxy management + Caddyfile-as-Code',
|
'Reverse proxy management + Caddyfile-as-Code',
|
||||||
@@ -78,7 +78,7 @@ export default function PricingPage() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: 'Can I use DashCaddy without Premium?',
|
question: 'Can I use DashCaddy without Premium?',
|
||||||
answer: 'Absolutely. The core platform is fully functional without a license — including AI commands, the Security Center, service discovery, monitoring, backup, and all 92+ app templates. Premium unlocks SSO, Recipes, Swarm orchestration, and Fleet Management for advanced multi-node setups.',
|
answer: 'Absolutely. The core platform is fully functional without a license — including AI commands, the Security Center, service discovery, monitoring, backup, and all 93+ app templates. Premium unlocks SSO, Recipes, Swarm orchestration, and Fleet Management for advanced multi-node setups.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: 'How many machines can I activate?',
|
question: 'How many machines can I activate?',
|
||||||
@@ -110,7 +110,7 @@ export default function PricingPage() {
|
|||||||
Simple, Transparent <span className="text-brand-400">Pricing</span>
|
Simple, Transparent <span className="text-brand-400">Pricing</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-xl text-surface-300 mb-8 max-w-2xl mx-auto">
|
<p className="text-xl text-surface-300 mb-8 max-w-2xl mx-auto">
|
||||||
The core platform is completely free — including AI commands, Security Center, and all 92+ app templates. Premium unlocks advanced orchestration with a one-time payment.
|
The core platform is completely free — including AI commands, Security Center, and all 93+ app templates. Premium unlocks advanced orchestration with a one-time payment.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ interface App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// All apps below have real deployable templates in DashCaddy.
|
// All apps below have real deployable templates in DashCaddy.
|
||||||
// Auto-generated from src/docker/app-templates.js (92 templates, Aug 2026).
|
// Auto-generated from src/docker/app-templates.js (93 templates, Aug 2026).
|
||||||
const apps: App[] = [
|
const apps: App[] = [
|
||||||
// Media
|
// Media
|
||||||
{ name: 'Plex', icon: '🎬', category: 'Media' },
|
{ name: 'Plex', icon: '🎬', category: 'Media' },
|
||||||
@@ -136,6 +136,7 @@ const apps: App[] = [
|
|||||||
{ name: 'Whoami', icon: '🔍', category: 'Utilities' },
|
{ name: 'Whoami', icon: '🔍', category: 'Utilities' },
|
||||||
{ name: 'Stirling PDF', icon: '📄', category: 'Utilities' },
|
{ name: 'Stirling PDF', icon: '📄', category: 'Utilities' },
|
||||||
{ name: 'IT Tools', icon: '🧰', category: 'Utilities' },
|
{ name: 'IT Tools', icon: '🧰', category: 'Utilities' },
|
||||||
|
{ name: 'Vintage Radio', icon: '📻', category: 'Utilities' },
|
||||||
];
|
];
|
||||||
|
|
||||||
const categories = [
|
const categories = [
|
||||||
@@ -173,7 +174,7 @@ export default function AppShowcase() {
|
|||||||
{/* Header */}
|
{/* Header */}
|
||||||
<div className="mb-12 text-center">
|
<div className="mb-12 text-center">
|
||||||
<h2 className="text-3xl sm:text-4xl font-bold text-surface-50 mb-4">
|
<h2 className="text-3xl sm:text-4xl font-bold text-surface-50 mb-4">
|
||||||
92+ One-Click App Templates
|
93+ One-Click App Templates
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-lg text-surface-400 max-w-2xl mx-auto">
|
<p className="text-lg text-surface-400 max-w-2xl mx-auto">
|
||||||
Deploy your favorite apps instantly with pre-configured templates, automatic SSL certificates, and integrated DNS management.
|
Deploy your favorite apps instantly with pre-configured templates, automatic SSL certificates, and integrated DNS management.
|
||||||
@@ -231,7 +232,7 @@ export default function AppShowcase() {
|
|||||||
<div className="mt-16 grid grid-cols-3 gap-4 sm:gap-8">
|
<div className="mt-16 grid grid-cols-3 gap-4 sm:gap-8">
|
||||||
<div className="text-center">
|
<div className="text-center">
|
||||||
<div className="text-3xl sm:text-4xl font-bold text-brand-400 mb-2">
|
<div className="text-3xl sm:text-4xl font-bold text-brand-400 mb-2">
|
||||||
92+
|
93+
|
||||||
</div>
|
</div>
|
||||||
<p className="text-sm text-surface-400">App Templates</p>
|
<p className="text-sm text-surface-400">App Templates</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user