Commit Graph

66 Commits

Author SHA1 Message Date
Daniel Avila 3da1223b40 Add BrainGrid to Featured Integrations cards (#594)
* Add BrainGrid as a Featured Integration card

Adds BrainGrid to the FEATURED_ITEMS array so it appears on the homepage
Featured Integrations grid. The /featured/braingrid page was already in
place but had no corresponding card on the dashboard.

* Adapt Featured Integrations grid to item count

When there are an even number of featured items (e.g. 4), use a 2-column
grid on md+ screens so they form a 2x2 layout. When there are an odd
number (e.g. 3), keep the 3-column row layout.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-16 21:38:35 -04:00
Daniel Avila 7f5948dfc9 Remove BrainGrid partner banner from dashboard pages (#593)
BrainGrid remains visible as a featured card on the homepage and via the
/featured/braingrid page; only the top-of-page banner is removed.

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-16 21:21:36 -04:00
Daniel Avila b563bc423a seo: add dynamic sitemap.xml and per-component JSON-LD (#589) 2026-05-14 21:29:39 -04:00
Daniel Avila dae5faa009 migrate: Vercel → Cloudflare Pages + Workers (/mes → ~/bin/zsh-5/mes) (#571)
* migrate: Vercel → Cloudflare Pages + Workers para reducir costos ($110 → ~$0-5/mes)

- Cambia adaptador Astro de @astrojs/vercel a @astrojs/cloudflare (mode: 'directory')
- Agrega dashboard/wrangler.toml con nodejs_compat para compatibilidad total
- Crea cloudflare-workers/crons/ Worker que reemplaza los cron jobs de Vercel
  (claude-code-check cada 30min, health-check cada 1h en vez de cada 15min)
- Actualiza CI/CD: Vercel CLI → wrangler pages deploy (requiere CLOUDFLARE_API_TOKEN y CLOUDFLARE_ACCOUNT_ID en GitHub Secrets)
- Elimina crons duplicados del proyecto legacy aitmpl (root vercel.json)
- Quick win: agrega Cache-Control headers a components.json (86400s), plugins.json,
  trending-data.json y claude-jobs.json para cortar el costo de bandwidth de $53

Próximos pasos manuales (ver PR description):
1. Crear proyecto en Cloudflare Pages
2. Agregar secrets de Cloudflare en GitHub
3. Migrar env vars de Vercel a Cloudflare Dashboard
4. Deployar cloudflare-workers/crons con wrangler
5. Apuntar dominios a Cloudflare Pages

* fix: nodejs_compat_v2 + react-dom/server.node alias para Cloudflare Workers

- Cambia compatibility_flags de nodejs_compat a nodejs_compat_v2
- Agrega alias vite react-dom/server → react-dom/server.node para evitar
  MessageChannel error en module init time en Cloudflare Workers runtime
- Agrega ssr.noExternal para bundlear react-dom y aplicar el alias

* fix: revert compatibility_flags a nodejs_compat (estándar)

nodejs_compat_v2 no es el flag primario. El fix real del MessageChannel
error fue el alias vite react-dom/server → react-dom/server.node,
no el cambio de flag.

* fix: inject Cloudflare Pages runtime env into process.env via middleware

Add Astro middleware that copies context.locals.runtime.env (Cloudflare
Pages secrets) into process.env before each request, so API routes can
use process.env.X as a unified pattern without changing the call sites.

Also add || process.env.X fallbacks to all API routes/libs that were
using import.meta.env exclusively (build-time only in Vite).

Verified on staging: track-download-supabase, health-check,
claude-code-check, collections, github/token all return correct responses.
2026-05-08 20:24:28 -04:00
Daniel Avila 35023b3def Update BrainGrid partner banner tagline (#554) 2026-04-29 19:57:31 -04:00
Dani acf54a1597 feat(dashboard): add View on GitHub button to component detail page
- Adds GitHub link button in the same row as metadata labels
- Regenerates components.json and trending-data.json
2026-04-26 15:27:21 -04:00
Dani 6cb4c8eb67 fix(live-task): sanitize local paths in tool executions display
Strip absolute home directory paths from tool_args_summary before
rendering in ToolTimeline. Affects historical data already stored in DB.

Also adds scripts/run-review-cycle.sh for manual cycle testing with
--test-hook and --check modes.
2026-04-25 22:53:56 -04:00
Daniel Avila 19d7c7d594 feat(live-task): add Open/All/Done filter pills to Component Review Loop (#540)
- Default view shows only Open cycles (active + completed/pr_created)
- Done tab shows merged + failed cycles
- All tab shows everything
- Badge count per filter updates dynamically
- Adding "showing N of M" subtitle under header
2026-04-25 15:17:52 -04:00
Daniel Avila cc1ceb3d85 feat(banner): update BrainGrid ad copy and styling (#537)
- Replace description with "The repeatable way to plan and ship quality software with AI."
- Change tagline from "AI Product Planner" to "Plan. Build. Verify. Repeat." in brand color (#c5e063)
- Increase description font size to 13px with font-light weight for better readability

Co-authored-by: Claude <claude@anthropic.com>
2026-04-24 16:21:39 -04:00
daniel a2e1afaa00 fix(sidebar): load component counts independently from page components
The sidebar counts depended on ComponentGrid or page-specific scripts
to emit a custom event. Pages without those (component detail, trending,
jobs) never received counts. Now the sidebar fetches /components.json
directly on load.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:00:01 -04:00
daniel d37c578f50 fix(slides): use CSS variables for styling, add token counts, fixed height with expand
- Convert SkillSlideView from Tailwind shorthands to CSS variable inline
  syntax to match dark mode overhaul from PR #451
- Add gpt-tokenizer for token counting per slide and total
- Fixed slide height (32rem) with "Show full document" toggle
- Revert client:only back to client:load (styling was the real issue)
- Update deployer agent to reflect auto-deploy via GitHub Actions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:54:09 -04:00
daniel 87af8845c6 fix: Use client:only for SkillExplorer to prevent hydration mismatch
The marked library produces different HTML on server vs client, causing
React error #418. Switching to client:only="react" skips SSR entirely.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 19:50:23 -04:00
Daniel Avila e4d262e7d8 Merge pull request #471 from davila7/claude/skills-slide-presentation-5JOPn
Add slide presentation view for skill documentation
2026-04-11 19:24:42 -04:00
daniel e6313a42df chore: Remove .claude-plugin dir, update jobs, remove plugins "New" badge
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 17:02:56 -04:00
Dani be8629942a feat(dashboard): re-enable TinyFish in featured items 2026-04-08 09:09:40 -04:00
Dani f8a855f611 feat(dashboard): add open source sponsors footer 2026-04-07 16:30:32 -04:00
Dani 93ded5fc6d fix: Update TinyFish featured page with accurate metrics
Replace 98.7% success rate with 90% Mind2Web benchmark score and
$0.04/operation with $0.015/step all-inclusive pricing.
2026-04-01 17:56:44 -04:00
Dani f1029dd446 chore: Hide TinyFish from featured section temporarily 2026-03-31 21:15:43 -04:00
Dani 36fa6dbd5d feat: Add supply-chain-guard skill, worktree commands, security hooks, and updated catalog
New components:
- supply-chain-guard skill (security): npm/PyPI/CI supply chain scanner with IOC database
- worktree-guide skill: parallel development with git worktrees
- dependabot-review skill: automated Dependabot PR management
- worktree-check/cleanup/deliver/init commands (git-workflow)
- edit-audit-log hook (development-tools)
- env-file-protection and force-push-blocker hooks (security)

Also includes:
- Regenerated components.json catalog (docs + dashboard)
- TinyFish featured page updates and logo
- .vercelignore and dashboard .gitignore updates
2026-03-31 21:13:20 -04:00
Dani eba3d9da28 fix: Elevate parent card z-index when collection dropdown is open 2026-03-30 21:27:20 -04:00
Dani 1a8cd2e2c7 fix: Calculate dropdown position on click instead of useEffect 2026-03-30 21:23:20 -04:00
Dani e7c76e7a3a fix: Move hooks before conditional returns to fix React #310 error 2026-03-30 21:19:21 -04:00
Dani 1c2ac0900c fix: Use fixed positioning for collection dropdown to prevent card clipping 2026-03-30 21:15:34 -04:00
Dani f53cf7051a fix: Raise z-index on collection dropdown so it appears above other cards 2026-03-29 21:38:17 -04:00
Dani f469555013 fix: Show real email in user menu, remove My Collections option 2026-03-29 21:34:34 -04:00
Dani 5317c55368 feat: Share modal with copy link and social sharing, collection title label
- Share button now opens modal with copyable link and share on X/Threads
- Public collection page shows "Component Collection" label above name
2026-03-29 20:36:31 -04:00
Daniel Avila 4e851a7e2c Merge pull request #482 from davila7/feat/shareable-collections
feat: Shareable public collections via /c/{slug}
2026-03-29 20:11:02 -04:00
Dani b224f1eb62 fix: Share button copies link instead of toggling off sharing
When collection is already shared, clicking Share now copies the link
again instead of disabling sharing. Identified by cubic.
2026-03-29 20:09:02 -04:00
Dani ebc988aa31 fix: Fix esbuild parse error in shared collection page 2026-03-29 12:30:41 -04:00
Dani 2d9dec6f4b feat: Add shareable public collections via /c/{slug}
- Add share_slug and is_public columns to user_collections (migration 002)
- New API endpoint /api/collections/share: POST toggles sharing (auth),
  GET fetches public collection (no auth, only public-safe fields)
- New public page /c/[slug] with header, install command, component grid
  grouped by type, and CTA to create own collections
- Share button in MyComponentsView: generates link, copies to clipboard,
  shows shared state. Security reviewed: no leak of clerk_user_id, email,
  or internal UUIDs
2026-03-29 12:06:33 -04:00
Daniel Avila 13fbc320a5 Merge pull request #455 from bitreonx/fix/profile-dropdown-z-index
Fix profile dropdown z-index
2026-03-28 18:07:34 -04:00
Dani a7c5fbabed fix: Correctly read components.json structure for sidebar counts 2026-03-28 10:12:35 -04:00
Dani 4d96a18776 fix: Emit sidebar component counts on plugins pages 2026-03-28 10:04:43 -04:00
Dani 06b3833a1b fix: Remove marketplace badge from plugin cards 2026-03-28 10:02:05 -04:00
Dani 5bfcbcc57a feat: Overhaul plugins page with real .claude-plugin data, search, and sorting
- Add Python script (generate_plugins_json.py) that scans GitHub repos for
  .claude-plugin/marketplace.json and plugin.json, extracting real component
  counts by scanning plugin directories via GitHub API
- Replace static plugins.json with 30 verified repos (15 marketplaces,
  15 individual plugins) with real stars and component data
- Add interactive PluginsGrid React component with search, sort by
  stars/alphabetical, marketplace badge, and empty state
- Redesign plugin detail page: correct install instructions (/plugin
  marketplace add), marketplace plugin listings with descriptions,
  component breakdowns, and overview stats
2026-03-28 09:48:12 -04:00
Dani 2540d684e2 feat: Add /plugins page with 20 curated Claude Code marketplaces
- Create plugins.json with 20 popular GitHub plugin collections sorted by stars
- Add /plugins listing page with grid cards (stars badge, tags, author)
- Add /plugins/[slug] detail page with "What's Inside" breakdown and highlights
- Add "Plugins" link with "New" badge to sidebar Browse section
2026-03-27 09:24:12 -04:00
Bitreon 9583dcf078 Fix profile dropdown z-index
- 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
2026-03-26 15:21:40 +04:00
Daniel Avila 528cf0354f fix: Remove Beta badge and logo glow from sidebar (#454)
* fix: Remove Beta badge from sidebar

* fix: Remove logo glow effect from sidebar
2026-03-25 19:46:38 -04:00
Dani cfa13b4477 fix: Move theme toggle to TopBar, remove featured card glow 2026-03-25 19:14:02 -04:00
Dani 5bec39235d fix: Post-merge fixes for dark mode PR (#451)
- 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
2026-03-25 18:54:46 -04:00
Bitreon 746a8e2c18 feat: Dashboard dark mode UI overhaul (#451)
* 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
2026-03-25 18:49:38 -04:00
Claude db8aa4d7cd feat(dashboard): add slide presentation view for skills
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
2026-03-22 04:24:53 +00:00
Daniel Avila 39c10aab48 feat(jobs): add Claude Code jobs section with free scraping pipeline (#435)
* 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>
2026-03-21 15:32:44 -04:00
Dani 2cad57b147 feat: add brightdata-local-search skill to featured/brightdata page
- 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>
2026-03-18 00:02:07 -04:00
Daniel Avila ef7cddcacc feat: Component Review Loop — automated daily improvement cycle (#414)
* 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>
2026-03-15 13:15:09 -04:00
Dani 650e6852e9 feat: update Bright Data links to use tracking URL
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 19:30:19 -04:00
Daniel Avila f6d8b9c5cc feat: add Bright Data web data template as featured integration (#413)
* 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>
2026-03-13 19:18:13 -04:00
daniel 4889304c24 feat(dashboard): redesign component detail pages with unified viewer components
- 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>
2026-03-12 23:04:11 -04:00
Dani 908e21ce8c feat: Add UTM tracking params to BrainGrid partner banner link
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:33:27 -04:00
Dani 9212d24244 feat: Add BrainGrid partner banner across all pages
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>
2026-03-10 12:29:33 -04:00