414c962d3c7e909b3f659ecc1f8c91dc644e391d
Round-1 docs claimed things the code does not do. This commit rewrites
all 77 per-template pages + the catalog index to match reality:
CORRECTED:
- REST API payload shape: was {template, subdomain, port, environment}
Real Joi schema (src/utilities/validate.js appDeploy) is
{appId, config: {subdomain, port, mediaPath?, plexClaimToken?, ...}}
All optional fields now documented per-schema.
- Auth methods: was just "Authorization: Bearer" — real middleware
accepts three (TOTP session cookie, Authorization: Bearer JWT,
X-API-Key header). All three now shown.
- Deploy is synchronous: was "poll GET /api/v1/apps/{id}/status" — there
is no status endpoint. Response shape documented as
{success, containerId, url, message, setupInstructions}.
- AI Intent Router: was "starts the deployment" — it returns a
structured intent; the caller must POST /api/v1/apps/deploy to
actually provision. Documented accurately.
- MCP dashcaddy_deploy_app: was treated as full deploy — it only writes
the Caddy route + services.json entry, NOT the container. Documented
as such with manual docker pull as next step.
- Watchtower: was claimed to auto-update every 24h — DashCaddy does NOT
poll for new digests. Watchtower is a separate template with default
schedule 0 0 4 * * * (cron 04:00). Documented.
- Update button: was "Apps → {Name} → Update" — no such endpoint exists.
Manual docker pull + restart now documented.
- Restore-on-install: was "prompt to restore from snapshot during install"
— no such prompt. POST /api/v1/apps/{appId}/restore documented.
- Backups: was "default daily snapshot" — backup schedule is
configurable via backup-config.json, not "nightly" by default.
Volumes ARE included; documented.
- Dashboard menu: was "Apps → Catalog" — actual entry is the
"App Selector" button on the dashboard home. Documented.
- Dashboard URL: status.sami confirmed correct (configurable via
dashboardHost).
Also fixes default port resolution: was using portList[0].split(":")[0]
which leaks "{{PORT}}" literal when the template uses the placeholder.
Now uses t.defaultPort (Joi-validated) first, falling back to portList.
Build: 78 routes prerender as static, TypeScript clean.
DashCaddy.net - Marketing Website
Marketing and sales website for DashCaddy, the self-hosted Docker dashboard with automatic SSL, DNS, and reverse proxy configuration.
Tech Stack
- Next.js 16 with App Router and TypeScript
- Tailwind CSS for styling
- Stripe for subscription payments ($20/mo or $99/yr)
Getting Started
# Install dependencies
npm install
# Copy environment file and configure
cp .env.example .env.local
# Run development server
npm run dev
Open http://localhost:3000 to see the site.
Pages
| Route | Description |
|---|---|
/ |
Landing page with hero, features, app showcase |
/features |
Detailed feature breakdown |
/pricing |
Pricing plans with Stripe Checkout |
/docs |
Getting started guide and documentation |
/about |
About page and company info |
/success |
Post-checkout success page |
Stripe Integration
See STRIPE_SETUP.md for detailed setup instructions.
API Routes:
POST /api/checkout- Creates Stripe Checkout sessionPOST /api/webhooks/stripe- Handles Stripe webhook events
Logo Setup
Place your samiahmed7777-logo.png file in public/images/ for the footer copyright branding.
Deployment
# Build for production
npm run build
# Start production server
npm start
The site can be deployed to Vercel, your own server (with Node.js), or any platform that supports Next.js.
License
Proprietary - DashCaddy
Languages
TypeScript
99.6%
CSS
0.3%