From lt-showroom
Creates, updates, and manages showcases on the lenne.tech Showroom platform (showroom.lenne.tech). Implements a 5-phase workflow: (1) project analysis, (2) screenshot capture with Docker/app startup and demo data, (3) SHOWCASE.md creation as single source of truth in the project repository, (4) showcase creation via API using SHOWCASE.md + customer feedback + web research, (5) interactive presentation with modern content blocks. Fetches customer feedback from https://lenne.tech/kundenerfolge. Uses MCP tools (showroom-api) or REST API for CRUD operations. Activates when creating, editing, managing showcases, portfolio entries, or the Showroom platform. NOT for platform development on the showroom codebase itself (use generating-nest-servers or developing-lt-frontend).
npx claudepluginhub lennetech/claude-code --plugin lt-showroomThis skill uses the workspace's default tool permissions.
This skill implements a **5-phase workflow** built around SHOWCASE.md as the single source of truth. Every showcase starts from a versioned Markdown file in the project repository and is then published to showroom.lenne.tech.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
This skill implements a 5-phase workflow built around SHOWCASE.md as the single source of truth. Every showcase starts from a versioned Markdown file in the project repository and is then published to showroom.lenne.tech.
/lt-showroom:showroom:analyze, /lt-showroom:showroom:screenshot, /lt-showroom:showroom:create, /lt-showroom:showroom:updateanalyzing-projects — Provides the evidence-based analysis report that populates SHOWCASE.mdgenerating-nest-servers / developing-lt-frontend — For platform developmentAll showcase operations go through the showroom-api MCP server. Screenshot capture uses the chrome-devtools MCP server.
The default MCP endpoint is https://api.showroom.lenne.tech/mcp (production). When working inside the showroom project repository, the project-level .mcp.json overrides this to http://localhost:3000/mcp for local development.
If MCP is unavailable (e.g. OAuth not configured), use the REST API directly via curl with session cookies:
# Login
curl -s -c /tmp/showroom-cookies.txt -X POST http://localhost:3000/iam/sign-in/email \
-H 'Content-Type: application/json' -d '{"email":"...","password":"..."}'
# Create showcase
curl -s -b /tmp/showroom-cookies.txt -X POST http://localhost:3000/showcases \
-H 'Content-Type: application/json' -d '{"title":"...","description":"...","contentBlocks":[...]}'
# Update showcase (add content blocks)
curl -s -b /tmp/showroom-cookies.txt -X PATCH http://localhost:3000/showcases/{id} \
-H 'Content-Type: application/json' -d '{"contentBlocks":[...]}'
# Publish
curl -s -b /tmp/showroom-cookies.txt -X POST http://localhost:3000/showcases/{id}/publish
${CLAUDE_SKILL_DIR}/reference/showcase-model.md — Showcase data model and status lifecycle${CLAUDE_SKILL_DIR}/reference/content-blocks.md — All content block types with schemas${CLAUDE_SKILL_DIR}/reference/screenshot-workflow.md — Docker-based startup, demo data, feature screenshots${CLAUDE_SKILL_DIR}/reference/best-practices.md — Content guidelines and block structure${CLAUDE_SKILL_DIR}/reference/showcase-markdown.md — SHOWCASE.md format specificationSHOWCASE.md is the single source of truth. Everything flows from this file.
Phase 1: Analyze → structured report with features + pages + startup info
Phase 2: Screenshots → start app, create demo data, capture per feature
Phase 3: SHOWCASE.md → versioned Markdown in project repository
Phase 4: Publish → SHOWCASE.md + feedback + research → showcase via API
Phase 5: Present → modern blocks with glassmorphism, scroll-reveal, 3D-tilt
Run the project-analyzer agent (or use analyzing-projects skill inline) for a full 8-dimension report. The report MUST include:
startupInfo block (how to start the app, database requirements, seed command)pagesInventory list (all routes with auth level and associated feature)Every claim must have a file:line evidence reference.
Check for Docker Compose first — it is the preferred startup method:
# Option A: Docker Compose (preferred)
[ -f "docker-compose.yml" ] || [ -f "compose.yaml" ] && docker compose up -d
# Option B: Standalone MongoDB if needed but not in compose
docker run -d --name showcase-mongo -p 27018:27017 mongo:7
# Option C: npm/pnpm dev server
pnpm run dev # or npm run dev
Always use run_in_background: true for server processes. Poll for readiness before proceeding.
package.json: seed, db:seed, demo, fixturespnpm run seedFor each feature in the analysis report:
docs/showcase/screenshots/ in the project directoryFilename convention: {feature-slug}-desktop.png, {feature-slug}-mobile.png
# Ensure the screenshot directory exists
mkdir -p docs/showcase/screenshots
After all screenshots are captured:
pkill -f "nuxt dev" / pkill -f "next dev" / pkill -f "nest start"docker compose down or docker stop showcase-mongolsof -ti :<port>Full details in ${CLAUDE_SKILL_DIR}/reference/screenshot-workflow.md.
Write SHOWCASE.md in the project root (or docs/showcase/SHOWCASE.md for monorepos).
The file format is defined in ${CLAUDE_SKILL_DIR}/reference/showcase-markdown.md.
Key requirements:
version in frontmatter MUST match package.json versionanalyzed_at is the ISO date of the analysisdocs/showcase/screenshots/Parse the SHOWCASE.md frontmatter and sections as the primary content source.
https://lenne.tech/kundenerfolge:
Block 1: tech-stack — Technology badges from SHOWCASE.md tech stack section
Block 2: text "Überblick" — 3-5 paragraphs from SHOWCASE.md overview section
Block 3: feature-grid — 6-8 features from SHOWCASE.md features section
Block 4: text "Architektur" — From SHOWCASE.md architecture section
Block 5: screenshot-gallery — Screenshots from docs/showcase/screenshots/
Block 6: text "Highlights" — From SHOWCASE.md technical highlights section
Block 7: timeline — Project milestones (if derivable from git or SHOWCASE.md)
Block 8: testimonial — Customer feedback from lenne.tech/kundenerfolge
Block 9: team — Team members (if known)
Block 10: text "Ergebnis" — From SHOWCASE.md results section
Block 11: cta — "Termin vereinbaren" + meeting URL
# Auth
curl -s -c /tmp/showroom-cookies.txt -X POST http://localhost:3000/iam/sign-in/email \
-H 'Content-Type: application/json' -d '{"email":"...","password":"..."}'
# Create with all content blocks
curl -s -b /tmp/showroom-cookies.txt -X POST http://localhost:3000/showcases \
-H 'Content-Type: application/json' -d '{ "title": "...", "description": "...", "contentBlocks": [...] }'
# Publish
curl -s -b /tmp/showroom-cookies.txt -X POST http://localhost:3000/showcases/{id}/publish
Use modern content blocks that align with lt-website-reloaded styling:
Visual design principles:
feature-grid cards use glass-style background with blurfeature-grid itemsContent block choices:
feature-grid for capabilities (not a plain list)screenshot-gallery with viewport switcher (desktop/tablet/mobile tabs)testimonial for social prooftech-stack with category grouping (Frontend, Backend, Database, Infrastructure)timeline for project history or phasesText quality standards (same as best-practices.md):
<h3>, <p>, <ul>/<li>, <strong>{
"contentBlocks": [
{
"type": "tech-stack",
"title": "Technologien",
"order": 0,
"visible": true,
"showInToc": true,
"content": {
"technologies": [
{"name": "NestJS", "category": "backend"},
{"name": "Nuxt", "category": "frontend"}
]
}
},
{
"type": "text",
"title": "Projektübersicht",
"order": 1,
"visible": true,
"showInToc": true,
"content": {
"html": "<h3>Was ist das Projekt?</h3><p>Detailed description...</p><h3>Das Problem</h3><p>...</p><h3>Die Lösung</h3><p>...</p>"
}
},
{
"type": "feature-grid",
"title": "Features",
"order": 2,
"visible": true,
"showInToc": true,
"content": {
"features": [
{"title": "Feature Name", "description": "What it does and why it matters", "icon": "lucide:icon-name"}
]
}
},
{
"type": "testimonial",
"title": "Kundenfeedback",
"order": 7,
"visible": true,
"showInToc": false,
"content": {
"quote": "The customer quote...",
"author": "Person Name",
"company": "Company Name"
}
}
]
}
docs/showcase/screenshots/