Commit Graph

66 Commits

Author SHA1 Message Date
Dani 1aa6c47d21 feat(seo): Add critical SEO foundations — meta tags, canonical, OG, JSON-LD, robots.txt
- 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>
2026-03-09 18:20:37 -04:00
Dani 90d00a22ab fix: Use resolved absolute URL in SSR fetch instead of relative path
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>
2026-03-07 21:19:15 -05:00
Dani 8432c377c6 fix: Resolve SSR fetch for components.json + update CLAUDE.md
- 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>
2026-03-07 21:13:00 -05:00
Dani 571986c94c fix: Resolve SSR fetch for components.json on Vercel
- 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>
2026-03-07 21:08:20 -05:00
Dani d1f561f914 feat: Migrate API endpoints to Astro dashboard, unify under single Vercel project
- 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>
2026-03-07 20:59:52 -05:00
Dani 6ac16aed3c feat: Add metadata cards carousel and Send to Repo feature
- 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>
2026-03-07 19:23:47 -05:00
Daniel Avila 3a9e95a883 Add project structure tree visualization to components view (#402)
* 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>
2026-03-05 21:19:43 -05:00
Daniel Avila 6cf26f9582 feat: Redesign featured pages to match component detail layout (#395)
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>
2026-03-01 14:18:13 -05:00
daniel f5f7146888 feat: Add collections API endpoints and improve dashboard proxy
- Add Vercel serverless functions for user collections CRUD (collections.js, [id].js, items.js)
- Add shared auth (Clerk JWT verification) and Neon DB client helpers
- Add @clerk/backend dependency for token verification
- Improve dashboard API proxy: handle double-compression, error handling, filter accept-encoding
- Add retry logic to collections-api.ts for GET requests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 16:32:23 -05:00
daniel f96e76b1b5 feat: Group My Components items by type in sidebar and right panel
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>
2026-02-21 14:04:41 -05:00
daniel 0f9fc1b11d chore: Update docs link to docs.aitmpl.com
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:39:34 -05:00
daniel b414acaa12 feat: Add beta dashboard banner on docs site and beta label on dashboard
- 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>
2026-02-21 00:29:28 -05:00
daniel 8deb996b85 fix: Fix trending page to fetch data from production URL
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>
2026-02-21 00:01:06 -05:00
daniel 6560e8c738 fix: Fix dashboard icons and simplify data loading
- 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>
2026-02-20 23:47:14 -05:00
daniel 0f4aaa7217 security: Fix XSS vulnerabilities in docs site and dashboard
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>
2026-02-20 23:13:17 -05:00
daniel 37de8b550f feat: Add dashboard source code (app.aitmpl.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>
2026-02-20 23:13:17 -05:00