Investigate: Docusaurus Website Enhancements
Status: Completedβ
Goal: Research ways to enhance the Docusaurus website - better tool displays, custom theming, images, and useful plugins.
Completed: 2026-01-17
Outcome: Investigation complete. Produced 9 plans (4 completed, 1 cancelled, 4 in backlog).
Critical Issue: Hardcoded Repository URLsβ
The site currently has hardcoded URLs to terchris/devcontainer-toolbox. When contributing to the main repo, these need to change.
Files with hardcoded URLs:
docusaurus.config.ts- url, organizationName, editUrl, GitHub linksREADME.md- docs site links, install scripts- Various
.mdfiles - GitHub links, CLAUDE.md references
Solution Options:
Option 1: Environment Variables (Recommended)β
// docusaurus.config.ts
const GITHUB_ORG = process.env.GITHUB_ORG || 'terchris';
const GITHUB_REPO = process.env.GITHUB_REPO || 'devcontainer-toolbox';
const config: Config = {
url: `https://${GITHUB_ORG}.github.io`,
baseUrl: `/${GITHUB_REPO}/`,
organizationName: GITHUB_ORG,
projectName: GITHUB_REPO,
// ...
};
GitHub Actions can set these from repository context:
env:
GITHUB_ORG: ${{ github.repository_owner }}
GITHUB_REPO: ${{ github.event.repository.name }}
Option 2: Single Config Fileβ
Create website/site.config.js:
module.exports = {
githubOrg: 'terchris',
githubRepo: 'devcontainer-toolbox',
};
Option 3: GitHub Pages Custom Domainβ
If using a custom domain, URLs become repo-independent.
Recommendation: Option 1 (Environment Variables)
- Works automatically in GitHub Actions
- Local dev uses defaults
- No manual changes needed when forking
Implementation:
- Update
docusaurus.config.tsto use env vars - Update GitHub Actions workflow to pass repo context
- For markdown files, use relative links where possible
- Document the env vars in
website/README.md
Future Scope: Templates Integrationβ
Current state:
dev-template.shdownloads templates from urbalurba-dev-templates- Templates work with urbalurba-infrastructure
Future plan:
- Merge templates into devcontainer-toolbox
- Website covers both Tools AND Templates/Starters
Design implications:
The website structure should accommodate:
DevContainer Toolbox
βββ Tools (current)
β βββ Languages (Python, TypeScript, Go...)
β βββ Cloud & Infrastructure
β βββ AI & ML
β
βββ Templates (future)
β βββ Frontend (React, Next.js, Vue...)
β βββ Backend (Express, FastAPI, Spring...)
β βββ Full Stack (Next.js + API, etc.)
β
βββ Infrastructure (future)
βββ Terraform, K8s configs...
Homepage sections to plan for:
- Tools - Install development environments
- Templates - Start new projects from templates
- Infrastructure - Deploy to cloud (future)
Card-based navigation benefits:
- Easy to add "Templates" section alongside "Tools"
- Same card components work for both
- Use cases can combine tools + templates:
- "Build a Python API" β Python tools + FastAPI template
- "React + Azure" β TypeScript tools + React template + Azure tools
Template metadata (mirrors script metadata):
# --- Core metadata (required) ---
TEMPLATE_ID="nextjs-starter"
TEMPLATE_VER="1.0.0"
TEMPLATE_NAME="Next.js Starter"
TEMPLATE_DESCRIPTION="Next.js 14 with TypeScript, Tailwind, and ESLint"
TEMPLATE_CATEGORY="FRONTEND"
# --- Extended metadata (for website) ---
TEMPLATE_LOGO="nextjs-logo.svg"
TEMPLATE_WEBSITE="https://nextjs.org"
TEMPLATE_TAGS="react nextjs typescript tailwind frontend"
TEMPLATE_ABSTRACT="Production-ready Next.js 14 starter with App Router, TypeScript, Tailwind CSS, and ESLint preconfigured. Includes example pages and API routes."
TEMPLATE_RELATED="react-starter vite-starter"
# --- Template-specific fields ---
TEMPLATE_TOOLS="dev-typescript" # Required tools to install
TEMPLATE_REPO="https://github.com/..." # Source repo (if external)
TEMPLATE_DEMO="https://demo.example.com" # Live demo URL (optional)
Shared metadata fields (Tools & Templates):
| Field | Purpose |
|---|---|
*_ID | Unique identifier |
*_VER | Version number |
*_NAME | Display name |
*_DESCRIPTION | Short description (1 line) |
*_CATEGORY | Category for grouping |
*_LOGO | Icon/logo filename |
*_WEBSITE | Official website URL |
*_TAGS | Search keywords |
*_ABSTRACT | Longer description (2-3 sentences) |
*_RELATED | Related item IDs |
Note: Design decisions now should consider this expansion. Keep component names generic (e.g., ItemCard not ToolCard).
Future Scope: Infrastructure Servicesβ
The urbalurba-infrastructure repo contains deployment packages for:
AI & ML:
- LiteLLM (AI gateway)
- OpenWebUI
- Environment management
Authentication:
- Authentik (SSO/Identity)
Databases:
- PostgreSQL, MySQL, MongoDB
- Qdrant (vector database)
Data Science:
- JupyterHub
- Apache Spark
- Unity Catalog
Development:
- ArgoCD (GitOps)
- Templates
Monitoring:
- Grafana, Prometheus
- Loki (logs), Tempo (traces)
- OpenTelemetry
Queues & Messaging:
- RabbitMQ
- Redis
Search:
- Elasticsearch
Networking:
- Cloudflare
- Tailscale
Hosts:
- Azure AKS
- MicroK8s (Azure, Multipass, Raspberry Pi)
- Rancher Kubernetes
Website structure with infrastructure:
DevContainer Toolbox
βββ Tools (development environments)
βββ Templates (project starters)
βββ Infrastructure (deployment packages)
βββ AI & ML
βββ Databases
βββ Monitoring
βββ Queues
βββ ...
Infrastructure metadata:
# --- Core metadata ---
PACKAGE_ID="postgresql"
PACKAGE_VER="15.0"
PACKAGE_NAME="PostgreSQL Database"
PACKAGE_DESCRIPTION="Production-ready PostgreSQL with backups and monitoring"
PACKAGE_CATEGORY="DATABASES"
# --- Extended metadata ---
PACKAGE_LOGO="postgresql-logo.svg"
PACKAGE_WEBSITE="https://postgresql.org"
PACKAGE_TAGS="database sql postgres relational"
PACKAGE_ABSTRACT="PostgreSQL deployed on Kubernetes with automated backups, monitoring via Prometheus, and connection pooling with PgBouncer."
PACKAGE_RELATED="pgadmin mysql mongodb"
# --- Infrastructure-specific ---
PACKAGE_REQUIRES="kubernetes helm"
PACKAGE_NAMESPACE="databases"
PACKAGE_HELM_CHART="bitnami/postgresql"
Three content types with unified metadata:
| Type | Prefix | Source Repo |
|---|---|---|
| Tools | SCRIPT_* | devcontainer-toolbox |
| Templates | TEMPLATE_* | devcontainer-toolbox (merged) |
| Infrastructure | PACKAGE_* | urbalurba-infrastructure (separate) |
Cross-Repo Data Sharingβ
The urbalurba-infrastructure repo will remain separate, but its metadata needs to be available on this website.
Options for sharing metadata:
Option 1: JSON Metadata File (Recommended)β
Infrastructure repo publishes a packages.json:
{
"packages": [
{
"id": "postgresql",
"name": "PostgreSQL Database",
"description": "Production-ready PostgreSQL...",
"category": "DATABASES",
"logo": "postgresql-logo.svg",
"website": "https://postgresql.org",
"tags": ["database", "sql", "postgres"],
"docsUrl": "https://urbalurba-infrastructure.../docs/postgresql"
}
]
}
Website fetches at build time:
// docusaurus.config.ts or a plugin
const infraPackages = await fetch(
'https://raw.githubusercontent.com/terchris/urbalurba-infrastructure/main/packages.json'
).then(r => r.json());
Option 2: Shared Metadata Schemaβ
Define a schema both repos follow:
/metadata/
schema.json # Shared JSON schema
tools.json # From devcontainer-toolbox
templates.json # From devcontainer-toolbox
packages.json # From urbalurba-infrastructure (fetched)
Option 3: GitHub Action Syncβ
Infrastructure repo has a GitHub Action that:
- Generates
packages.jsonfrom package metadata - Creates a PR to devcontainer-toolbox with updated data
- Or publishes to a shared location (GitHub Pages, CDN)
Option 4: Docusaurus Remote Content Pluginβ
Use docusaurus-plugin-remote-content to fetch docs:
plugins: [
[
'docusaurus-plugin-remote-content',
{
name: 'infrastructure-packages',
sourceBaseUrl: 'https://raw.githubusercontent.com/terchris/urbalurba-infrastructure/main/',
documents: ['packages.json'],
},
],
],
Full Documentation Integrationβ
Not just metadata - the entire documentation from urbalurba-infrastructure must be available on this website.
Options for pulling full docs:
Option A: Git Submoduleβ
# In devcontainer-toolbox
git submodule add https://github.com/terchris/urbalurba-infrastructure.git external/infrastructure
Docusaurus config:
docs: {
path: 'docs',
include: ['**/*.md'],
},
plugins: [
[
'@docusaurus/plugin-content-docs',
{
id: 'infrastructure',
path: 'external/infrastructure/docs',
routeBasePath: 'infrastructure',
sidebarPath: './sidebarsInfrastructure.ts',
},
],
],
Pros: Full docs available, version controlled Cons: Must update submodule manually
Option B: Remote Content Plugin (Recommended)β
Use docusaurus-plugin-remote-content to fetch all docs:
plugins: [
[
'docusaurus-plugin-remote-content',
{
name: 'infrastructure-docs',
sourceBaseUrl: 'https://raw.githubusercontent.com/terchris/urbalurba-infrastructure/main/docs/',
outDir: 'docs/infrastructure',
documents: [
'index.md',
'package-databases-postgresql.md',
'package-monitoring-grafana.md',
// ... or use a manifest file
],
},
],
],
Pros: Always fetches latest, no submodule management Cons: Need to maintain document list (or use manifest)
Option C: Build-Time Sync Scriptβ
GitHub Action fetches docs before build:
# .github/workflows/deploy-docs.yml
jobs:
build:
steps:
- name: Fetch infrastructure docs
run: |
git clone --depth 1 https://github.com/terchris/urbalurba-infrastructure.git /tmp/infra
cp -r /tmp/infra/docs website/docs/infrastructure
- name: Build Docusaurus
run: npm run build
Pros: Simple, full control Cons: Docs not in git (generated at build time)
Option D: Manifest-Based Sync (Recommended)β
Infrastructure repo publishes a docs-manifest.json:
{
"version": "1.0.0",
"baseUrl": "https://raw.githubusercontent.com/terchris/urbalurba-infrastructure/main/docs/",
"documents": [
{"path": "index.md", "category": "overview"},
{"path": "package-databases-postgresql.md", "category": "databases"},
{"path": "package-monitoring-grafana.md", "category": "monitoring"}
]
}
Website fetches manifest, then fetches all listed docs at build time.
Recommendation: Option C (Build-Time Sync) or Option A (Submodule)
Data flow with full docs:
urbalurba-infrastructure/
βββ docs/
β βββ index.md
β βββ package-databases-postgresql.md
β βββ package-monitoring-grafana.md
β βββ ... (80+ docs)
βββ docs-manifest.json (list of all docs)
βββ packages.json (metadata for cards)
β
βΌ (clone/fetch at build time)
devcontainer-toolbox/website/
βββ docs/
β βββ tools/ # Local
β βββ templates/ # Local
β βββ infrastructure/ # Fetched from infra repo
β βββ index.md
β βββ databases/
β β βββ postgresql.md
β βββ monitoring/
β βββ grafana.md
βββ src/data/
βββ packages.json (for cards/navigation)
Website structure:
https://devcontainer-toolbox.../
βββ /docs/tools/ β Development tools
βββ /docs/templates/ β Project templates
βββ /docs/infrastructure/ β Infrastructure packages
βββ /databases/
βββ /monitoring/
βββ /ai/
Benefits:
- Single website for everything
- Full documentation searchable
- Unified navigation
- Repos stay independent
- Always up-to-date (fetched at build)
Research Findingsβ
Current Setupβ
We already have:
@easyops-cn/docusaurus-search-local- Local search- Prism syntax highlighting (bash, powershell, json)
- Dark/light mode with system preference
- Custom CSS support
Recommended Plugins to Addβ
1. Mermaid Diagrams (High Priority)β
Plugin: @docusaurus/theme-mermaid (official)
Great for visualizing:
- Tool installation flows
- Architecture diagrams
- Devcontainer structure
Setup:
npm install @docusaurus/theme-mermaid
// docusaurus.config.ts
export default {
markdown: {
mermaid: true,
},
themes: ['@docusaurus/theme-mermaid'],
};
2. Image Zoom (Medium Priority)β
Plugin: docusaurus-plugin-image-zoom
Allows users to click on images to zoom - great for screenshots.
npm install docusaurus-plugin-image-zoom
3. Ideal Image (Medium Priority)β
Plugin: @docusaurus/plugin-ideal-image (official)
Responsive images with lazy loading - better performance.
npm install @docusaurus/plugin-ideal-image
4. Version Badge in Navbar (High Priority)β
Built-in feature - no plugin needed. Display version from version.txt in navbar.
Implementation: Read version at build time in docusaurus.config.ts:
import fs from 'fs';
const version = fs.readFileSync('../version.txt', 'utf8').trim();
// In navbar items:
{
type: 'html',
position: 'right',
value: `<span class="badge badge--secondary">v${version}</span>`,
},
Benefits:
- Users see which version docs apply to
- Auto-updates when version.txt changes
- No manual maintenance
5. Announcement Bar (Low Priority)β
Built-in feature - no plugin needed. Add to themeConfig:
announcementBar: {
id: 'new_release',
content: 'π Version 1.4.0 released with new documentation site!',
backgroundColor: '#25c2a0',
textColor: '#fff',
isCloseable: true,
},
6. Analytics - Umami (Medium Priority)β
Plugin: @dipakparmar/docusaurus-plugin-umami
Privacy-friendly analytics without cookie banners.
npm install @dipakparmar/docusaurus-plugin-umami
Options:
| Service | Cost | Notes |
|---|---|---|
| Umami Cloud | $9/mo | Easiest setup |
| Self-hosted | Free | Need server (Docker available) |
Why Umami over Google Analytics:
- No cookies = no cookie banner needed
- GDPR compliant out of the box
- ~2KB script (lightweight)
- Only active in production
- You own the data
Plugins to Skip (For Now)β
| Plugin | Reason |
|---|---|
| Algolia DocSearch | Requires approval process, local search works fine |
| PWA | Adds complexity, not essential for docs |
| Google Analytics | Privacy concerns, requires cookie consent |
Plugins for Future Considerationβ
OpenAPI Documentationβ
Plugins: docusaurus-openapi-docs, Redocusaurus
Generates interactive API reference docs from OpenAPI/Swagger specs.
- Converts
openapi.yamlβ beautiful MDX pages - Includes "try it out" demo panels
- Supports Swagger 2.0 and OpenAPI 3.x
When to add: If devcontainer-toolbox adds a REST API
Resources:
TypeDoc - TypeScript API Docsβ
Plugin: docusaurus-plugin-typedoc-api
Auto-generates API documentation from TypeScript source code.
- Reads JSDoc comments from code
- Creates
/api/*routes automatically - Documents public exports only
When to add: If devcontainer-toolbox adds a TypeScript CLI or library
Resources:
Theme Enhancementsβ
Custom Branding Ideasβ
- Custom Logo - Replace default Docusaurus logo with project-specific icon
- Color Scheme - Adjust primary color (currently default green #25c2a0)
- Social Card - Create custom OG image for social sharing
Tool Page Improvementsβ
Current tool pages are plain markdown. Options to enhance:
- Feature Cards - Use Docusaurus admonitions or custom components
- Icons/Badges - Add category badges (e.g., "Language", "Cloud", "AI")
- Quick Start Boxes - Highlighted install commands
- Screenshots - Add terminal screenshots or GIFs for each tool
- Related Tools - Link similar tools at bottom of each page
Extended Script Metadata (Source of Truth)β
Current metadata in each script:
SCRIPT_ID="dev-python"
SCRIPT_VER="0.0.1"
SCRIPT_NAME="Python Development Tools"
SCRIPT_DESCRIPTION="Adds ipython, pytest-cov, and VS Code extensions"
SCRIPT_CATEGORY="LANGUAGE_DEV"
SCRIPT_CHECK_COMMAND="command -v ipython >/dev/null 2>&1"
Proposed additional metadata fields:
| Field | Purpose | Example |
|---|---|---|
SCRIPT_LOGO | Icon/logo filename | python-logo.svg |
SCRIPT_WEBSITE | Official tool website | https://python.org |
SCRIPT_TAGS | Search keywords | "python pip venv" |
SCRIPT_ABSTRACT | Longer description (2-3 sentences) | For tool detail pages |
SCRIPT_RELATED | Related tool IDs | "dev-data-analytics dev-ai" |
Benefits:
- Single source of truth (script file)
dev-docsauto-generates richer tool pages- New tools automatically get proper documentation
- No manual website updates needed
Implementation:
- Add new metadata fields to script template
- Update
dev-docs.shto read and output new fields - Store logos in
website/static/img/tools/ - Update existing scripts incrementally
Interactive Category Browser (Homepage)β
Make the homepage more interactive - users click a category to see its tools.
Option 1: Tabs Component (Built-in)
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs>
<TabItem value="lang" label="Languages" default>
Python, TypeScript, Go, Rust...
</TabItem>
<TabItem value="cloud" label="Cloud & Infrastructure">
Azure, Terraform, Kubernetes...
</TabItem>
<TabItem value="ai" label="AI & ML">
Claude Code...
</TabItem>
</Tabs>
Option 2: Custom Filter Component (More Flexible)
Create src/components/ToolBrowser/:
- Grid of category buttons/cards
- Click category β show tools in that category
- Optional: "All" button to show everything
- Can include icons for each category
Option 3: Clickable Category Cards Each category as a card with:
- Category icon
- Category name
- Tool count badge
- Click β scrolls to or filters tool list
Data Source:
- Read from generated JSON (from
dev-docs.sh) - Or import tools data at build time
- Categories from
SCRIPT_CATEGORYvalues
Recommendation: Option 2 (Custom Filter Component)
- Most flexible and visually appealing
- Can show tool cards with logos
- Better UX than tabs for many categories
Example Tool Page Structureβ
# Python Development

:::tip[Quick Install]
Run `dev-setup` and select "Python Development"
:::
## What's Included
- Python 3.x with pip
- Virtual environment support
- Common development packages
## Features
| Feature | Description |
|---------|-------------|
| Version | 3.12+ |
| Package Manager | pip, pipx |
| ...
## Getting Started
[code examples]
## Related Tools
- Data Analytics
- AI & Machine Learning
Inspiration Sitesβ
Reviewed these for ideas:
| Site | Good Ideas |
|---|---|
| Docusaurus.io | Clean design, good code examples |
| Vite | Minimal, fast, great icons |
| Tailwind CSS | Excellent search, code examples |
| Dyte | Feature cards, topic navigation β |
Dyte Design Analysis (Reference for Our Site)β
Dyte uses a topic-based card navigation approach:
Homepage Structure:
- Hero Section - 3 large feature cards with icons and descriptions
- How-To Guides - Grid of popular guides
- Sample Applications - Real-world examples with "Clone" / "View" links
- SDK Hub - Organized by platform (React, iOS, Android, etc.)
Card Design Pattern:
βββββββββββββββββββββββββββββββ
β π Icon β
β β
β Python Development β
β β
β Full Python setup with β
β pip, venv, and VS Code β
β extensions. β
β β
β [Get Started] [View Tools] β
βββββββββββββββββββββββββββββββ
Key UX Patterns:
- Multiple entry points (by category, by use case, by platform)
- Cards have icon + heading + description + action links
- Modular sections for different audiences
- Visual hierarchy guides the reader
Applying Dyte Patterns to DevContainer Toolboxβ
Homepage Redesign Ideas:
-
Hero Cards (3 columns):
- "Language Development" β Python, TypeScript, Go...
- "Cloud & Infrastructure" β Azure, Terraform, K8s...
- "AI-Ready Development" β Claude Code, isolated environment
-
"Get Started" Section:
- Card: "New to DevContainers?" β What Are DevContainers
- Card: "Install Now" β Quick Start guide
- Card: "Browse Tools" β Interactive tool browser
-
Use Case Cards:
- "Backend Developer" β Python + API + Database tools
- "Cloud Engineer" β Azure + Terraform + K8s
- "AI Developer" β Claude Code + Python + isolated env
-
Tool Category Cards: Each category as a clickable card:
ββββββββββββββ ββββββββββββββ ββββββββββββββ
β π» β β βοΈ β β π€ β
β Languages β β Cloud β β AI & ML β
β 10 tools β β 5 tools β β 1 tool β
β [Browse β] β β [Browse β] β β [Browse β] β
ββββββββββββββ ββββββββββββββ ββββββββββββββ
Components to Create:
FeatureCard- Large card with icon, title, description, CTAToolCategoryCard- Smaller card with icon, name, count, linkUseCaseCard- Card linking to curated tool combinationsQuickStartCard- Prominent getting started paths
Implementation Plansβ
Each plan delivers a launchable increment - the site remains functional after each plan.
Naming: Plans use PLAN-00n-* format to indicate execution order (see PLANS.md).
PLAN-001: Configurable Repository URLsβ
Priority: Critical (must do first) Depends on: Nothing Launchable after: Yes - site works on any fork
Scope:
- Make
docusaurus.config.tsuse environment variables for GitHub org/repo - Update GitHub Actions to pass
${{ github.repository_owner }} - Convert hardcoded links to relative where possible
- Document env vars in
website/README.md
Files to modify:
website/docusaurus.config.ts.github/workflows/deploy-docs.yml- Various
.mdfiles with hardcoded URLs
PLAN-002: Quick Enhancementsβ
Priority: High Depends on: PLAN-001 Launchable after: Yes - improved UX
Scope:
- Add version badge to navbar (read from
version.txt) - Add Mermaid diagrams support (
@docusaurus/theme-mermaid) - Add image zoom plugin (
docusaurus-plugin-image-zoom) - Add announcement bar (config only, no plugin)
Files to modify:
website/docusaurus.config.tswebsite/package.json
PLAN-003: Extended Script Metadataβ
Priority: High (foundation for tool pages) Depends on: Nothing (can run parallel to PLAN-002) Launchable after: Yes - existing site unchanged, new metadata ready
Scope:
1. Define extended metadata fields:
- SCRIPT_LOGO - Icon filename (e.g., "python-logo.svg")
- SCRIPT_WEBSITE - Official tool URL
- SCRIPT_TAGS - Search keywords
- SCRIPT_ABSTRACT - Longer description (2-3 sentences)
- SCRIPT_RELATED - Related tool IDs
2. Update documentation & templates:
- Update
website/docs/ai-developer/CREATING-SCRIPTS.mdwith new fields - Update
website/docs/contributors/scripts/install-scripts.md - Update script template files (
_template-install.sh, etc.) - Ensure new tools are created with all metadata fields
3. Update tooling:
- Update
dev-docs.shto read and output new fields - Update
dev-docs.shto outputtools.jsonfor React components - Investigate how
dev-setup.shcan use new metadata:- Show SCRIPT_ABSTRACT in menu descriptions?
- Use SCRIPT_TAGS for search/filter?
- Display SCRIPT_WEBSITE as "More info" link?
4. Add validation:
- Update static tests to validate new metadata fields exist
- Warn if SCRIPT_LOGO file doesn't exist
- Validate SCRIPT_RELATED references valid tool IDs
- Ensure CI fails if metadata is incomplete
5. Update ALL existing tools:
- Add extended metadata to ALL scripts (21+ scripts)
- Add logos for ALL tools to
website/static/img/tools/ - Verify each tool passes validation
Files to modify:
.devcontainer/manage/dev-docs.sh.devcontainer/manage/dev-setup.sh(investigate enhancements).devcontainer/additions/_template-*.sh(all templates).devcontainer/additions/tests/(validation tests)website/docs/ai-developer/CREATING-SCRIPTS.mdwebsite/docs/contributors/scripts/install-scripts.mdwebsite/static/img/tools/(new folder with all logos)- ALL
install-*.sh,config-*.sh,service-*.shscripts
PLAN-004: Enhanced Tool Pagesβ
Priority: Medium Depends on: PLAN-003 Launchable after: Yes - better tool documentation
Scope:
- Update
dev-docs.shto generate richer markdown tool pages with:- Logo display at top of page
- "Quick Install" admonition boxes (:::tip)
- Website links
- Tags display
- Abstract/longer description
- Related tools section at bottom
- Regenerate all tool documentation with new format
Files to modify:
.devcontainer/manage/dev-docs.sh(markdown generation)website/docs/tools/(regenerated output)
PLAN-005: Interactive Homepage β CANCELLEDβ
Status: β No longer relevant - scope delivered by PLAN-004
Reason: PLAN-004 delivered all the essential homepage functionality:
- β ToolCard, CategoryFilter, ToolsPage components
- β Interactive /tools page with category filtering
- β Homepage features now clickable with navigation links
- β DevContainer Toolbox sidebar always expanded
Decision: Homepage is complete. No separate PLAN-005 needed.
PLAN-006: Analytics Setupβ
Priority: Future (larger scope) Depends on: Nothing Launchable after: Yes - tracking enabled
Scope:
- Set up Umami Cloud account (or self-hosted)
- Install
@dipakparmar/docusaurus-plugin-umami - Configure plugin (only active in production)
- Document analytics in contributor docs
Files to modify:
website/docusaurus.config.tswebsite/package.jsonwebsite/docs/contributors/website.md
PLAN-007: Templates Integrationβ
Priority: Future (larger scope - requires template repo merge) Depends on: PLAN-003, PLAN-004 Launchable after: Yes - templates documented alongside tools
Scope:
- Define TEMPLATE_* metadata format
- Merge templates from urbalurba-dev-templates
- Create
dev-templates.shto generatetemplates.json - Add templates section to homepage
- Create template documentation pages
Files to create/modify:
templates/folder (merged from external repo).devcontainer/manage/dev-templates.shwebsite/docs/templates/- Homepage components (add templates section)
PLAN-008: Infrastructure Documentationβ
Priority: Future (larger scope - cross-repo integration) Depends on: PLAN-007 Launchable after: Yes - infrastructure docs available
Scope:
- Set up build-time sync from urbalurba-infrastructure
- Configure multi-instance docs (separate sidebar)
- Add infrastructure section to homepage
- Create
packages.jsonmanifest in infrastructure repo
Files to modify:
.github/workflows/deploy-docs.yml(fetch infra docs)website/docusaurus.config.ts(multi-instance docs)website/sidebarsInfrastructure.ts(new)- Infrastructure repo: add
docs-manifest.json
PLAN-009: Domain, Mission Alignment & Blogβ
Priority: Next (domain setup + content strategy) Depends on: PLAN-004 (completed) Launchable after: Yes - live at dct.sovereignsky.no with blog
Context: SovereignSky sovereignsky.no is a digital sovereignty resource hub for Norway, addressing the critical gap where Norwegian digital infrastructure depends on foreign powers (US cloud services, CLOUD Act). Created by helpers.no, it connects to TotalforsvarsΓ₯ret 2026 (Total Defense Year).
Key insight from SovereignSky: "A single political decision in Washington could disrupt Norwegian society more effectively than any military attack."
DevContainer Toolbox's role: Provide developers with open-source, locally-runnable, privacy-respecting development environments - reducing dependency on cloud-based dev tools.
Note: SovereignSky has no established visual branding yet (uses Hugo Blowfish theme defaults). Focus on mission alignment, not colors/logos.
Scope:
1. Custom Domain Setup:
- Configure custom domain:
dct.sovereignsky.no - Update
docusaurus.config.tswith new URL - Set up DNS (CNAME to GitHub Pages)
- Configure HTTPS (automatic with GitHub Pages)
- Update all hardcoded references
2. Branding (original for DevContainer Toolbox):
- Design custom logo for DevContainer Toolbox
- Define color scheme (supporting sovereignty/independence themes)
- Create social card image for sharing
- Design should convey: reliability, openness, independence
- Add "Edit this page" links (open contribution)
3. Mission Alignment with SovereignSky:
- Add "About" page explaining sovereignty mission
- Footer links to sovereignsky.no and helpers.no
- Homepage messaging aligned with sovereignty themes:
- "Works Everywhere" β runs locally, no cloud dependency
- "Open Source" β transparency, no vendor lock-in
- "AI-Ready" β local AI tools, data stays on your machine
4. Blog Setup: Docusaurus has built-in blog support. Use it to connect dev practices with sovereignty themes:
Blog post types:
| Type | Purpose | Example |
|---|---|---|
releases | Version announcements | "What's new in v1.5.0" |
tutorials | How-to guides | "Setting up Python for local AI development" |
sovereignty | Why this matters | "Why your dev environment shouldn't depend on US clouds" |
tools | Deep dives | "Claude Code: AI assistance without data leaving your machine" |
Initial blog posts to write:
- "Why DevContainer Toolbox exists" - The sovereignty angle: dev tools that work offline, locally, independently
- "Getting started with sovereign development" - Practical guide linking to SovereignSky context
- "TotalforsvarsΓ₯ret 2026: What developers should know" - Connect to national preparedness
Blog configuration:
// docusaurus.config.ts
blog: {
showReadingTime: true,
blogTitle: 'DevContainer Toolbox Blog',
blogDescription: 'Sovereign development tools for Norwegian digital resilience',
postsPerPage: 10,
blogSidebarTitle: 'Recent posts',
blogSidebarCount: 5,
},
5. Navigation & Links:
- Add Blog to navbar
- Footer: SovereignSky, helpers.no, GitHub
- Cross-link: SovereignSky projects page β dct.sovereignsky.no
Files to modify/create:
website/docusaurus.config.ts- Domain, blog config, navbar, footerwebsite/static/img/logo.svg- Custom DevContainer Toolbox logowebsite/static/img/social-card.png- Social sharing imagewebsite/src/css/custom.css- Brand colorswebsite/src/pages/about.md- Mission/sovereignty explanationwebsite/blog/- Blog posts folderwebsite/blog/2026-01-xx-why-devcontainer-toolbox.md- First postwebsite/static/CNAME- Custom domain fileREADME.md- Update with new domain
Reference: SovereignSky site at /Users/terje.christensen/learn/projects-2025/sovereignsky-site
Plan Dependenciesβ
PLAN-001 (URLs) β
β
βΌ
PLAN-002 (Quick Enhancements) β
β
βΌ
PLAN-003 (Extended Metadata) β
β
βΌ
PLAN-004 (Tool Pages + Homepage) β
β
β [PLAN-005 cancelled - scope in PLAN-004]
β
ββββββββββββββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
PLAN-009 (Domain/Mission/Blog) βββ NEXT PLAN-007 (Templates) π
β
βΌ
PLAN-008 (Infrastructure) π
PLAN-006 (Analytics) π ββ Can be done anytime (independent)
Execution Statusβ
| Order | Plan | Status |
|---|---|---|
| 1 | PLAN-001 | β Completed (PR #16) |
| 2 | PLAN-002 | β Completed (PR #17) |
| 3 | PLAN-003 | β Completed (PR #18) |
| 4 | PLAN-004 | β Completed (PR #19) |
| 5 | PLAN-005 | β Cancelled - scope delivered by PLAN-004 |
| 6 | PLAN-009 | π² Next - Domain, branding & blog (ready for implementation) |
| 7 | PLAN-006 | π Draft - Analytics/Umami (definition incomplete) |
| 8 | PLAN-007 | π Draft - Templates integration (definition incomplete) |
| 9 | PLAN-008 | π Draft - Infrastructure docs (definition incomplete) |
Next up: PLAN-009 (Domain, Mission & Blog) - dct.sovereignsky.no, sovereignty messaging, blog for tutorials & announcements
Sourcesβ
- Docusaurus Plugins
- Community Plugin Directory
- Awesome Docusaurus
- Docusaurus Diagrams
- Docusaurus Showcase
- Umami Analytics
- Docusaurus Umami Plugin
- docusaurus-openapi-docs
- docusaurus-plugin-typedoc-api
Next Stepsβ
Completed plans (in completed/):
- β
PLAN-001-configurable-urls.md- Environment variables for GitHub org/repo - β
PLAN-002-quick-enhancements.md- Version badge, Mermaid, image zoom - β
PLAN-003-extended-metadata.md- New script fields, validation, all tools - β
PLAN-004-tool-display-components.md- React components for tool display
Cancelled plans:
- β
PLAN-005- Interactive Homepage (scope delivered by PLAN-004)
Next plan (in backlog/, ready for implementation):
- π²
PLAN-009-domain-mission-blog.md- Custom domain (dct.sovereignsky.no), branding, blog setup
Future plans (in backlog/, definition incomplete):
- π
PLAN-006-analytics-setup.md- Umami analytics (Status: Draft) - π
PLAN-007-templates-integration.md- Merge templates repo (Status: Draft) - π
PLAN-008-infrastructure-docs.md- Cross-repo documentation (Status: Draft)