- Changed dropdown positioning from absolute to fixed with z-index: 9999 to prevent it from being hidden behind sidebar
- Added complete profile menu with My Collections, My Components, Settings, and Sign Out options
- Implemented mock mode for local testing (window.enableAuthMock() / window.disableAuthMock())
- Mock mode automatically disabled on Vercel/production environments
- Detect OS color scheme preference on first visit (prefers-color-scheme)
- Fix duplicate SVG mask IDs in CountryFlag causing rendering conflicts
- Replace useCallback with useMemo for search results in SearchModal
- Remove spurious submodule reference
* feat: Complete dashboard UI overhaul with dark mode theme system
- Added ThemeToggle component with persistent theme switching
- Implemented comprehensive dark mode styles across all dashboard pages
- Enhanced UI components: Sidebar, TopBar, ComponentGrid, TrendingView, JobsView
- Improved modal designs: SearchModal, SendToRepoModal, CartSidebar
- Updated featured pages and component detail pages with dark mode support
- Added CountryFlag component for jobs display
- Refined typography, spacing, and color schemes for better readability
- Enhanced interactive elements with smooth transitions and hover states
- Updated global styles with CSS variables for theme consistency
* docs: Add comprehensive PR documentation and screenshot guide
* docs: Transform PR into compelling business-focused summary
- Emphasize user benefits and platform value
- Highlight featured partner improvements (Neon, Vercel, Supabase, etc.)
- Detail expected business impact and metrics
- Add comprehensive business value section
- Include strategic benefits and revenue impact
- Professional acknowledgments from BitreonX team
- Focus on quality and attention to detail
* docs: Add executive summary highlighting business value and BitreonX quality
* docs: Add quick reference card for easy PR creation
* fix: resolve remaining P2 issues - sidebar active state, cart height, and date format
- Fix Sidebar.astro active-state icon styling to target nested span element
- Fix CartSidebar.tsx scrollable content height to be dynamic based on footer
- Fix WeWorkRemotely date format from RFC-2822 to ISO 8601 for proper sorting
* fix: use flexbox layout for CartSidebar instead of absolute positioning
Replace hard-coded height calculations with proper flexbox layout:
- Add flex-col to sidebar panel container
- Make header and footer shrink-0 (fixed size)
- Make content flex-1 with min-h-0 (fills remaining space)
- Remove absolute positioning from footer
- Remove hard-coded viewport height calculations
This ensures the scrollable content area dynamically adjusts to the
actual footer height without items being obscured.
* fix: resolve 11 additional P2 code review issues
- Fix malformed Tailwind classes in featured/[slug].astro (hover border syntax)
- Fix malformed Tailwind classes in MyComponentsView and SaveToCollectionButton
- Fix tooltip initialization non-idempotency in Sidebar (prevent duplicate listeners)
- Fix Recently Added sort mislabeling in ComponentGrid
- Fix single/multi-category filter conflict in ComponentGrid
- Fix tag click event bubbling in JobsView
- Fix SearchModal MutationObserver and timer cleanup
- Fix logo visibility issue in JobsView
- Fix fallback color construction in TrendingView
- Fix theme.ts localStorage trust issue with runtime validation
- Fix missing width/height in icon SVGs
- Fix XSS vulnerability in component detail page (use textContent)
- Fix sidebar overflow-x clipping tooltips
* fix: resolve SearchModal timeout race condition and Recently Added sort mismatch
- Fix SearchModal closeModal timeout cleanup using ref to prevent race conditions
when modal is closed and reopened quickly
- Fix Recently Added sort to use reverse name sort (Z-A) instead of downloads,
providing distinct behavior from Most Popular until actual date field is available
* fix: Remove misleading 'Recently Added' sort option
The 'Recently Added' sort was using reverse alphabetical order as a placeholder, which is misleading to users expecting actual recency. Since component data doesn't include creation dates, removed this option entirely.
Fixes violation P2 in PR #451
Add a new "Slides" view mode alongside Code/Preview in the SkillExplorer.
Parses YAML frontmatter into a title slide and splits H2 sections into
individual content slides with navigation, keyboard shortcuts, and fullscreen.
https://claude.ai/code/session_01XsDWS1qRqiCjBjcfcNi7Z9
* feat(jobs): add Claude Code jobs section with free scraping pipeline
Add a new Jobs page (/jobs) and homepage preview showing positions that
require Claude Code. The scraper uses only free sources (HN Firebase API,
HN Algolia, RemoteOK, WeWorkRemotely RSS) with no API keys needed.
Runs daily via GitHub Actions alongside existing data updates.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(jobs): address all Cubic review feedback (P1+P2)
P1 fixes:
- Location parser now skips role titles (e.g. "AI-Native Technical Operations Lead")
- Salary extraction filters out funding/revenue amounts ($37M raised)
- applyUrl validated with safeUrl() to prevent javascript: injection
P2 fixes:
- timeAgo() handles NaN/invalid dates gracefully
- WeWorkRemotely IDs use URL slug instead of non-deterministic hash()
- GitHub Action diff check includes dashboard/public/claude-jobs.json
- Remote flag also checks description body for remote indicators
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(jobs): fix mojibake encoding and false salary extraction
- strip_html() now fixes common UTF-8 mojibake patterns (’ → ', â€" → —)
- Salary validation requires k/K suffix or >= $1000 for raw amounts
- Removes false positives: $100-140, $150-300 (ambiguous), $20K (bounty)
- Adds $X/yr pattern for single-value annual salaries
Addresses Cubic review comments #8, #9, #10.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(jobs): add Anthropic Careers source, auth gate, and UI improvements
- Add Greenhouse API collector for Anthropic career listings mentioning Claude Code
- Add Clerk auth gate requiring sign-in to view job links
- Add auth banner with sign-in CTA for unauthenticated users
- Improve description/tag color contrast (#999/#aaa) for dark theme
- Add Anthropic source badge (purple)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(jobs): address Cubic review — avoid unnecessary rerenders and remove candidate cap
- useGlobalAuth: only call setState when values actually change (prevents 500ms rerender loop)
- Remove hard cap of 80 Anthropic candidates to avoid dropping valid Claude Code roles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Added brightdata-local-search skill card to Skills Layer section
- Updated installCommand to include development/brightdata-local-search
- Incremented Components count from 7 to 8
- Added Featured Pages documentation to CLAUDE.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add Component Review Loop with dashboard, API, and agents
Automated daily cycle that reviews, improves, and creates PRs for
components with full traceability in Neon and Linear coordination.
- Add Neon schema: review_cycles, tool_executions, cycle_control tables
- Add API endpoints: cycles (CRUD), tools (logging), control (pause/resume)
- Add dashboard panel at /live-task with cycle table and tool timeline
- Add 3 agents: component-researcher, component-improver, linear-tracker
- Add Clerk auth on control endpoint (restricted to admin email)
- Add authenticateAndGetEmail() to shared auth lib
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: address code review feedback on component review loop
- Fix Neon BIGSERIAL types: id fields now typed as string
- Add Agent tool to component-improver for reviewer delegation
- Fix linear-tracker: remove next-review label on failure to prevent re-queuing
- Validate cycle_id and limit params in API endpoints
- Add https:// check on PR URLs before rendering as links
- Add cycleStartTime to ToolTimeline scroll effect deps
- Note catalog regen is handled by pr-verification, not improver
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add Bright Data web data template as featured integration
Add Bright Data skills (search, scrape, data-feeds, bright-data-mcp,
bright-data-best-practices, design-mirror), MCP component, and featured
page with complete documentation covering 60+ tools for web search,
scraping, structured data extraction, and browser automation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: regenerate components.json with Bright Data components
Updates catalog to include new web-data skills (search, scrape,
data-feeds, bright-data-mcp, bright-data-best-practices, design-mirror)
and brightdata MCP component.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(dashboard): improve Bright Data featured page UX
- Move Bright Data to first position in featured list
- Add View buttons linking to each skill detail page
- Add rounded corners to logo images across featured cards, header, and sidebar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Add MarkdownViewer, JsonViewer, SkillExplorer components with Code/Preview toggle, search (Cmd+F), TOC sidebar, and gradient fade expand/collapse
- Add FileTreeSidebar for skill file navigation (starts collapsed)
- Make file tree panel stretch to match content height
- Green download badge with icon on detail pages
- Remove Add to Stack button and sidebar collapse functionality
- Metadata displayed as clickable label pills with modal
- Add marked dependency for client-side markdown rendering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The skill now searches for CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN
in shell env vars, .env, .env.local, and ~/.env before prompting the user.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add PartnerBanner component with BrainGrid branding to index and all
type pages (agents, commands, skills, etc.). Remove BrainGrid from
featured cards section. Include logo assets.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>
Copy blog posts, assets, CSS, and static files from docs/ to
dashboard/public/ so they are served by the Astro dashboard project.
This restores /blog/ URLs that broke after the domain migration.
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>
Remove trending-data.json from tracking and add both components.json
and trending-data.json to .gitignore. These are fetched at runtime
from www.aitmpl.com, not needed in the repo.
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>
- Delete scripts/prebuild.cjs (no longer needed)
- Remove static/ directory, assets already live in public/
- Commit placeholder components.json and trending-data.json to public/
so Vercel can serve them without needing a prebuild write workaround
- Remove prebuild script from package.json
- Update .gitignore to track placeholder data files
Resolves CLA-20, CLA-21
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>