- Add robots.txt with crawl directives and AI crawler policies
- Add canonical tags to all pages via DashboardLayout
- Add meta descriptions (unique per page type)
- Add Open Graph and Twitter Card meta tags
- Add WebSite + Organization JSON-LD schema (global)
- Add SoftwareApplication JSON-LD schema (homepage)
- Optimize page titles with keywords and component counts
- Add security headers (HSTS, X-Frame-Options, CSP) to vercel.json
SEO Health Score: 22/100 → ~47/100 (estimated)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The url variable was computed correctly but never used - fetch() still
received the original relative COMPONENTS_JSON_URL, causing "Failed to
parse URL from /components.json" on server-side rendering.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use absolute URL (https://www.aitmpl.com) for server-side fetch of components.json
- Set site config in astro.config.mjs as fallback
- Update CLAUDE.md to reflect unified single Vercel project architecture
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set site: 'https://www.aitmpl.com' in astro.config.mjs so import.meta.env.SITE is defined
- Server-side fetch resolves relative /components.json URL using SITE, VERCEL_URL, or localhost fallback
- Fixes "fetch failed" error on component detail pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Migrate all API endpoints from api/ (Vercel serverless) to dashboard/src/pages/api/ (Astro routes)
- track-download-supabase, track-command-usage, track-installation-outcome, track-website-events
- collections (index, [id], items)
- health-check, claude-code-check, discord/interactions
- Add shared API libs: cors.ts, neon.ts, auth.ts, changelog-parser.ts
- Add @supabase/supabase-js, @neondatabase/serverless, discord-interactions, @clerk/backend deps
- Remove catch-all API proxy ([...path].ts) - APIs are now native Astro routes
- Serve components.json and trending-data.json from dashboard/public/
- Switch to same-origin fetching (relative URLs) for data files
- Add dashboard/vercel.json with crons and CORS headers
- Simplify CI/CD to single deploy target (dashboard project)
- Update deploy script and package.json scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add horizontal metadata cards carousel to component detail page
parsing frontmatter (skills/agents/commands), JSON (MCPs/settings/hooks)
- Cards show description, tools, model, version, author, tags, license
with orange accent border, compact design, and text truncation
- Add "Send to Repo" button (gated to admin) in My Components
with GitHub OAuth flow and PR creation
- Add "Metadata" and "Code" section titles
- Update components.json and trending data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(dashboard): organize My Components as real project structure with .claude/ tree
Replaces the flat type-grouped view in the collections sidebar with a
realistic project directory tree showing exactly how components will be
installed:
project/
├── .claude/
│ ├── agents/
│ ├── commands/
│ ├── skills/
│ ├── hooks/
│ └── settings.json
└── .mcp.json
Adds an ASCII project structure preview in the main content area so
users can visualize the full installation layout before running the
install command.
https://claude.ai/code/session_01Gh8sj2GFiXotit4qSftpid
* Update dashboard/src/components/MyComponentsView.tsx
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Replace iframe-based featured pages with native dashboard layout using
tabbed navigation, sidebar with metadata, and partner-specific content.
- Rewrite dashboard featured/[slug].astro from iframe embed to native
Astro page with Overview content + Website external link tab
- Expand FeaturedItem type with metadata, links, CTA, and badge data
- Add partner badge color variants (Partner/Database/Toolkit)
- Add sidebar cards: partner info, CTA button, install command, metadata, links
- Remove redundant metadata fields (Type/Category/Website already shown via dedicated fields)
- Update docs/ featured pages with component-page layout (legacy site)
- Create docs/css/featured-page.css for featured-specific styles
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sidebar tree now nests items under type sub-groups (Skills, Agents, etc.)
and right panel shows typed sections instead of a flat grid.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Banner on docs/index.html linking to app.aitmpl.com
- Beta badge next to title in dashboard sidebar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Was fetching /trending-data.json locally which no longer exists.
Now fetches from www.aitmpl.com like components.json.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TypeIcon: use inline SVG instead of DOMParser (broke SSR hydration)
- Remove placeholder components.json (not needed, fetches from prod URL)
- Simplify COMPONENTS_JSON_URL to always use www.aitmpl.com
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Static site (docs/js/):
- Add escapeHTML() utility to utils.js for sanitizing dynamic content
- Apply escapeHTML to component names, descriptions, categories, and
install commands in card generation (search-functionality.js,
index-events.js)
- Replace innerHTML with DOM methods for search category tags
Dashboard:
- Create shared TypeIcon component using DOMParser for safe SVG
rendering (rejects malformed SVG via parsererror check)
- Remove all dangerouslySetInnerHTML usage from SearchModal,
ComponentGrid, TrendingView, and MyComponentsView
- Clean up unused ICONS imports
Resolves CLA-23
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Astro 5 + React + Tailwind dashboard with Clerk auth for browsing
and managing Claude Code Templates components. Includes proper
.gitignore to exclude build artifacts and generated data files.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>