Feature: Tool Display Components
IMPLEMENTATION RULES: Before implementing this plan, read and follow:
- WORKFLOW.md - The implementation process
- PLANS.md - Plan structure and best practices
Status: Completed β β
Goal: Create React components to display tools with logos, abstracts, and extended metadata on the website.
Completed: 2026-01-17
PR: #19
Source: PLAN-003 (Extended Script and Category Metadata)
Prerequisites: PLAN-003 (completed - provides tools.json, categories.json, and logo assets) Blocks: PLAN-005 (Interactive Homepage) Related: None Priority: High (enables visual tool browsing)
Overviewβ
PLAN-003 added extended metadata (tags, abstract, logo, website, summary, related) to all tools and categories. This plan creates React components to display this information visually.
Data Sourcesβ
Available from PLAN-003:
website/src/data/tools.json- Tool metadata with all extended fieldswebsite/src/data/categories.json- Category metadatawebsite/static/img/tools/*.webp- Processed tool logos (512x512)website/static/img/categories/*.webp- Processed category logos (512x512)
Components to Createβ
- ToolCard - Displays a single tool with logo, name, abstract
- ToolGrid - Grid layout for multiple ToolCards
- CategoryCard - Displays a category with logo and description
- CategoryGrid - Grid layout for CategoryCards
- ToolDetails - Full tool page with all metadata
- RelatedTools - Shows related tools as linked cards
Visual Mockupsβ
ToolCard (Single Tool)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ββββββββ β
β β β Python Development Tools β
β β π β βββββββββββββββββββββββββββββββββββββ β
β β β Full Python development environment β
β ββββββββ with pip, venv, and VS Code extensions. β
β Tags: python, pip, venv, pytest β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
64x64
logo
ToolGrid (Desktop - 3 columns)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Development Tools (10 tools) β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ€
β ββββββββ β ββββββββ β ββββββββ β
β β π β Python Dev Tools β β TS β TypeScript Tools β β Go β Go Dev Tools β
β ββββββββ Full Python dev... β ββββββββ TypeScript with... β ββββββββ Go runtime and... β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ€
β ββββββββ β ββββββββ β ββββββββ β
β β π¦ β Rust Dev Tools β β C# β C# Dev Tools β β β β Java Dev Tools β
β ββββββββ Rust via rustup... β ββββββββ .NET SDK and... β ββββββββ JDK, Maven, and... β
βββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ€
β [ View All 10 Tools β ] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ToolGrid (Mobile - 1 column)β
βββββββββββββββββββββββββββ
β Development Tools β
βββββββββββββββββββββββββββ€
β ββββββββ β
β β π β Python Tools β
β ββββββββ Full Python... β
βββββββββββββββββββββββββββ€
β ββββββββ β
β β TS β TypeScript β
β ββββββββ TypeScript... β
βββββββββββββββββββββββββββ€
β ββββββββ β
β β Go β Go Tools β
β ββββββββ Go runtime... β
βββββββββββββββββββββββββββ€
β [ View All Tools β ] β
βββββββββββββββββββββββββββ
CategoryCardβ
βββββββββββββββββββββββββββββββββββββββββββββ
β ββββββ β
β β </> β Development Tools β
β ββββββ ββββββββββββββββββββββββββββββ β
β Programming language setups β
β for Python, Go, Rust, and more β
β β
β 10 tools available [ Browse β ]β
βββββββββββββββββββββββββββββββββββββββββββββ
CategoryGrid (Homepage section)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browse by Category β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ€
β ββββββ β ββββββ β ββββββ β
β β</>β Development Tools β β βοΈ β Cloud Tools β β π β Data & Analytics β
β ββββββ 10 tools β ββββββ 5 tools β ββββββ 2 tools β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ€
β ββββββ β ββββββ β ββββββ β
β β π€ β AI & ML Tools β β βοΈ β Infrastructure β β π§ β Contributor Tools β
β ββββββ 1 tool β ββββββ 3 tools β ββββββ 1 tool β
βββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ
Enhanced Tools Page (Full Layout)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DevContainer Toolbox Docs v1.4.2 GitHub π Search β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β # Available Tools β
β β
β 20+ development tools ready to install with one click. β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Browse by Category ββ
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ ββ
β β β </> Dev β β βοΈ Cloud β β π Data β β π€ AI β β βοΈ Infra β ββ
β β β 10 tools β β 5 tools β β 2 tools β β 1 tool β β 3 tools β ββ
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ## Development Tools β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β π Python β β TS TypeScript β β Go Golang β β
β β Full Python dev...β β TypeScript with...β β Go runtime and... β β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β π¦ Rust β β C# .NET β β β Java β β
β β Rust via rustup...β β .NET SDK and... β β JDK, Maven, and...β β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β
β ## Cloud & Infrastructure Tools β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β βοΈ Azure Dev β β βοΈ Azure Ops β β βΈοΈ Kubernetes β β
β β Azure CLI, Func...β β PowerShell, Az... β β kubectl, helm,... β β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RelatedTools (Horizontal scroll on tool detail page)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Related Tools β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β π Python β β Go Golang β β π¦ Rust β β π Data β β scroll β β
β β Full dev... β β Go runtime..β β Systems... β β Jupyter,... β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tool Detail Page (Enhanced)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DevContainer Toolbox Docs β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββ β
β β β Python Development Tools β
β β π β ββββββββββββββββββββββββββββ β
β β β β
β β 128x128 β Full Python development environment with pip, venv, β
β ββββββββββββββ and VS Code extensions. β
β β
β **Website:** [python.org](https://python.org) β
β **Category:** Development Tools β
β **Tags:** `python` `pip` `venv` `pytest` `ipython` β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ## Description β
β β
β Complete Python development setup including virtual environment management, β
β package installation via pip, and VS Code integration. Adds ipython for β
β interactive development, pytest for testing, and common development utilities. β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ## Installation β
β β
β ```bash β
β # Via dev-setup menu β
β dev-setup β
β β
β # Or directly β
β .devcontainer/additions/install-dev-python.sh β
β ``` β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ## Related Tools β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β π Data β β π€ Claude β β Go Golang β β
β β Analytics β β Code β β Go runtime β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Phase 1: ToolCard Component β β DONEβ
Create a reusable card component for displaying a single tool.
Tasksβ
- 1.1 Create
website/src/components/ToolCard/index.tsx - 1.2 Create
website/src/components/ToolCard/styles.module.css - 1.3 Component props:
toolobject with all fields,showTagsboolean - 1.4 Display: logo (64x64), name (linked to detail page), abstract (2 lines max)
- 1.5 Hover effect: subtle elevation/shadow
- 1.6 Responsive: flex layout works on all screens
Validationβ
cd website && npm run start
# Verify ToolCard renders correctly with sample data
Phase 2: ToolGrid Component β β DONEβ
Create a grid component that displays multiple tools.
Tasksβ
- 2.1 Create
website/src/components/ToolGrid/index.tsx - 2.2 Create
website/src/components/ToolGrid/styles.module.css - 2.3 Import tools from
@site/src/data/tools.json - 2.4 Props:
category,limit,showViewAll,showTags,title - 2.5 Responsive grid: 1 col mobile, 2 col tablet, 3-4 col desktop
- 2.6 Optional "View All" link when
limitis set and more tools exist
Validationβ
# Add ToolGrid to a test page and verify filtering works
Phase 3: CategoryCard and CategoryGrid β β DONEβ
Create components for displaying categories.
Tasksβ
- 3.1 Create
website/src/components/CategoryCard/index.tsx - 3.2 Create
website/src/components/CategoryGrid/index.tsx - 3.3 CategoryCard: logo (48x48), name, abstract, tool count, links to category section
- 3.4 CategoryGrid: responsive grid (1-4 cols), sorted by order, excludes empty
- 3.5 Import from both categories.json and tools.json for counting
Validationβ
# Verify categories display with correct tool counts
Phase 4: Enhanced Tools Page β β DONEβ
Replace or enhance the current tools page with visual components.
Tasksβ
- 4.1 Create
website/src/pages/tools.tsxwith matching CSS - 4.2 Display CategoryGrid at top with "Browse by Category" title
- 4.3 Display ToolGrid for each category, sorted by order
- 4.4 Add search/filter by tags (deferred to future enhancement)
- 4.5 Existing
/docs/tools/links unchanged (new page is/tools)
Validationβ
cd website && npm run build
# Verify no broken links, visual display works
Phase 5: RelatedTools Component β β DONEβ
Show related tools on tool detail pages.
Tasksβ
- 5.1 Create
website/src/components/RelatedTools/index.tsx - 5.2 Takes
relatedIdsprop (array of tool IDs),titleprop - 5.3 Displays as horizontal scrollable row of mini cards (48x48 logo)
- 5.4 Integrate into tool detail pages (deferred - requires MDX migration)
Validationβ
# Verify related tools display correctly on a sample tool page
Phase 6: Integration and Testing β β DONEβ
Tasksβ
- 6.1 Run full build to verify no errors (warnings only for existing TOC anchors)
- 6.2 Test on localhost with Chrome
- 6.3 Verify responsive design on mobile viewport (deferred)
- 6.4 Verify all logos load correctly (fixed useBaseUrl)
- 6.5 Verify links work (tool pages, category pages)
Validationβ
docker exec <container> bash -c "cd /workspace/website && npm run build"
# Test in Chrome at localhost:3000
Phase 7: Sidebar Reordering β β DONEβ
Restructure the documentation sidebar for better organization.
New Sidebar Orderβ
1. DevContainer Toolbox (intro)
2. Getting Started
3. Tools (with category folders and tool pages)
4. What Are DevContainers?
5. AI Development (parent folder)
βββ AI Developer (Internal)
βββ AI Demos & Recordings
6. Commands Reference
7. Configuration
8. Troubleshooting
9. Contributing
Tasksβ
- 7.1 Update sidebar positions in frontmatter:
- intro.md β position 1
- getting-started/ β position 2
- tools/ β position 3
- what-are-devcontainers/ β position 4
- commands.md β position 6
- configuration.md β position 7
- troubleshooting.md β position 8
- contributing.md β position 9
- 7.2
docs/ai-development/folder already existed with_category_.json(updated position 5) - 7.3 Move
docs/ai-developer/βdocs/ai-development/ai-developer/ - 7.4 Move
docs/ai-docs/βdocs/ai-development/ai-docs/ - 7.5 Update
_category_.jsonfiles for nested folders - 7.6 Fix relative links in moved files (../contributors/ β ../../contributors/)
Phase 8: Individual Tool Pages β β DONEβ
Create dedicated pages for each tool (no anchor links).
Tasksβ
- 8.1 Updated dev-docs.sh to generate individual tool pages:
- Added
generate_tool_pages()function - Generates category folders, category.json, index.mdx, and tool .mdx files
- 5 category index pages + 21 individual tool pages
- Added
- 8.2 Added utility functions in anchors.ts:
getCategoryFolder()- maps category ID to folder namegetToolFilename()- strips prefixes from tool IDgetToolPath()- generates full tool page path
- 8.3 Updated components to link to new pages:
- ToolCard uses
getToolPath() - CategoryCard uses
getCategoryFolder() - RelatedTools uses
getToolPath()
- ToolCard uses
- 8.4 Removed old files: tools-details.md, partial tool pages
- 8.5 Fixed broken link in ai-development/index.md
Phase 9: Commit and Deploy β PENDINGβ
Tasksβ
- 9.1 Commit all changes
- 9.2 Bump version in version.txt
- 9.3 Push and create PR
- 9.4 Verify on deployed site
Acceptance Criteriaβ
- ToolCard displays logo, name, abstract correctly
- ToolGrid shows tools in responsive grid
- CategoryCard displays category info with tool count
- Tools page shows visual browsing experience
- All components are responsive (mobile-friendly)
- No broken images or links
- Build passes without errors
Files to Createβ
Components:
website/src/components/ToolCard/index.tsxwebsite/src/components/ToolCard/styles.module.csswebsite/src/components/ToolGrid/index.tsxwebsite/src/components/ToolGrid/styles.module.csswebsite/src/components/CategoryCard/index.tsxwebsite/src/components/CategoryCard/styles.module.csswebsite/src/components/CategoryGrid/index.tsxwebsite/src/components/CategoryGrid/styles.module.csswebsite/src/components/RelatedTools/index.tsxwebsite/src/components/RelatedTools/styles.module.css
Pages (optional - may use MDX instead):
website/src/pages/tools.tsx
Design Notesβ
Color Schemeβ
Use existing Docusaurus theme colors:
- Primary:
--ifm-color-primary(green #25c2a0) - Background:
--ifm-background-color - Card background: slightly elevated from page background
Logo Displayβ
- Tool cards: 64x64px logos
- Category cards: 48x48px logos
- Detail pages: 128x128px logos
- Use
object-fit: containto preserve aspect ratio
Typographyβ
- Tool name:
font-weight: 600 - Abstract:
font-size: 0.9rem,color: var(--ifm-color-emphasis-700) - Tags: small badges with category color
Implementation Notesβ
Importing JSON Dataβ
import toolsData from '@site/src/data/tools.json';
import categoriesData from '@site/src/data/categories.json';
const { tools } = toolsData;
const { categories } = categoriesData;
Logo Pathsβ
// Logo path pattern
const logoPath = `/img/tools/${tool.logo}`;
// e.g., /img/tools/dev-python-logo.webp
Filtering by Categoryβ
const filteredTools = tools.filter(tool => tool.category === categoryId);