Markdown Converter
Agent skill for markdown-converter
This is a Next.js 16 application for Doka, a construction formwork and scaffolding company. The application showcases system components (Schalungen/formwork) with a product catalog interface.
Sign in to like and favorite skills
This is a Next.js 16 application for Doka, a construction formwork and scaffolding company. The application showcases system components (Schalungen/formwork) with a product catalog interface.
# Start development server (runs on http://localhost:3000) npm run dev # Build production version npm run build # Start production server npm start # Run linter npm run lint
src/ ├── app/ # Next.js App Router pages │ ├── api/ # API routes │ ├── layout.tsx # Root layout │ ├── page.tsx # Homepage │ ├── globals.css # Global styles │ └── page.module.css # Page-specific styles ├── components/ # Reusable React components │ └── ... └── contexts/ # React Context providers └── NotificationContext.tsx
Important: This project uses regular CSS Modules, NOT Tailwind CSS.
.module.css filesrc/app/globals.css#FFD100 (header background)#005AAA (text, buttons, links)#f5f5f5Layout Components:
Header: Yellow top bar with logo, vertical separator, navigation menu (left-aligned), and notification bell (right-aligned)Breadcrumb: Navigation breadcrumbs with consistent left-alignment to header logoNotificationBell: Bell icon with notification badge, displays in header right sectionNotificationPopup: Dropdown popup for notification detailsContent Components:
Card: Reusable product card with category label, title, description, primary CTA button, and secondary action linksState Management:
NotificationContext: React Context API for managing notifications across the application
unreadCount state and setUnreadCount functionnotifications array to store received notification objectsaddNotification function to add new notifications/api/notifications/stream for live updatesContainer Pattern:
All layout components (Header, Breadcrumb) use a consistent container pattern:
.container { max-width: 1200px; margin: 0 auto; padding: 1rem 2rem; }
This ensures consistent alignment across the page.
The project uses TypeScript path aliases configured in
tsconfig.json:
@/* maps to ./src/*Example:
import Header from '@/components/Header'
GET /api/notifications/stream
data: {"title": "...", "text": "...", "icon": "..."}\n\nPOST /api/notifications
{ "title": string, "text": string, "icon": string }{ "success": true } on successGET /api/notifications
{ "count": 3 } (kept for backwards compatibility)MCP Notification Server (
/mcp-notification)
/mcp-notification/index.tssendNotificationTool: sendNotification
title (string, required): Notification titletext (string, required): Notification text contenticon (string, optional): Lucide icon name (e.g., "bell", "info", "alert-circle"). Defaults to "bell"/api/notifications (localhost:3000 by default)NOTIFICATION_ENDPOINT environment variableUsage with Claude Desktop: Add to Claude Desktop config (
~/Library/Application Support/Claude/claude_desktop_config.json):
{ "mcpServers": { "doka-notifications": { "command": "node", "args": ["/Users/rstropek/live/2025-11-06-doka/doka-ai-demo/mcp-notification/index.ts"], "env": { "NODE_OPTIONS": "--loader ts-node/esm" } } } }