Product-code half (fleet gate, capabilities endpoint, offline feature
migration, PREMIUM_FEATURES completion) lives in the dashcaddy repo, branch
dc/DC-165-uniformity — judged as one bundle.
Site edits (all claims verified against product source, see EVIDENCE [9]):
- template count 77 -> 78 EVERYWHERE (page.tsx, features, pricing, docs,
blog bodies + manifest.ts frontmatter per three-way consistency rule,
AppShowcase, DocsLayout, FaqSection). Source of truth:
APP_TEMPLATES keys == 78.
- internal-identifier leak sweep: 85 occurrences of *.sami (internal TLD),
an internal Git host URL, a private venv path, and a server-local repo
path in pricing comment -> replaced with the documented .home style /
generic wording. status.sami replaced by dashcaddy.local (product default
dashboardHost). Verified ZERO remaining in rebuilt out/.
- advertise as Premium (owner decision 2026-10-09): pricing premium list +
FAQ + docs/premium table + two new deep-dive sections (Workflow
Automation: the five bundled ids from bundled-workflows.js; Scheduled
Backups: schedule fields from the /backups/schedule schema, manual
one-click + DR explicitly noted as free).
- calendar widget + hosted-Radicale auto-wiring advertised (features page
chip + new docs/catalog/radicale install guide following house template
structure; syncthing page mirrored for the placeholder conventions).
- Connect AI one-click key flow advertised (features chip).
- MCP card softened: 'entire infrastructure' -> the real tool scope +
pointer to GET /api/v1/capabilities (public ground-truth manifest).
- llms.txt: capabilities endpoint pointer + 'prefer it over static prose'
+ MCP tool examples + premium gate list; robots.txt gains LLMs-Txt line.
- NOTE: a parked unrelated work-in-progress (dc-seo-r8 blog edits) was
stashed before the build and is NOT in this commit.
Build gate: rm -rf .next out && npm run build -> clean, 123 static pages,
out/ greps zero stale counts/leaks.
Replace hardcoded Stripe Payment Links with client-side fetch to
https://licenses.dashcaddy.net/api/checkout/{one-time,subscription}.
Add email capture input and two-button checkout (Buy once vs.
Subscribe & auto-renew). Plan codes: premium_30d/90d/180d/365d.
Update hero copy and FAQ to reflect both payment modes.
Removed apps that have no deploy template in code:
- Subsonic, Vikunja, OpenProject, Plane, HedgeDoc
- Yacht, Authelia, Keycloak, OpenVPN, Bitwarden
- Forgejo, GitLab, Prometheus, Netdata, Kibana, OpenHAB
Also fixed name: 'Vintage Radio' → 'Vintage Stereo' (matches actual template)
Corrected all '93+' references to '76' across all pages.
Deployed to live dashcaddy.net via cPanel API.
- Added vintage-radio (93rd app template) to AppShowcase
- Updated '92+' to '93+' across homepage, about, features, pricing, docs
- Deployed to live site via FTPS
- AppShowcase: Removed 7 non-existent apps (Kaleidescape, Synology Photos, Homelabs, DockSTARTer, Unraid, TrueNAS, New Relic), added 50+ real app templates that exist in code
- Updated template count from 76+ to 92+ across all pages
- Fixed test count from 1400+ to 775+ (actual count)
- Added mod_rewrite fallback for old doc path redirects (fixes 500 errors)
- Added caching, compression, and proper error handling in .htaccess
Navbar/Footer: Logo replaces text 'DashCaddy' wordmark, image-only branding
Docs: All 7 pages rewritten to comprehensive 200-300 line guides with code
examples, callout boxes, reference tables, and cross-page links
Stripe: 4 Payment Links wired in (0/30d, 0/90d, 0/180d, 9/365d)
Products and Prices created in Stripe Dashboard
Pricing model from catalog.js: 0/30d, 0/90d, 0/180d, 9/365d
All one-time payments, not recurring subscriptions.
Updated plan selector, FAQ, and button labels accordingly.