# LikeC4 Architecture Modeling This repository contains two distinct LikeC4 architecture projects for C4 model-based architecture visualization. ## 📁 Project Structure ### `resources/edp-likec4/` **Enterprise Developer Platform (EDP) Architecture** Contains architecture models for the platform itself - the systems, services, and infrastructure that make up the EDP. - **Purpose:** Document what we build - **Models:** Platform components, services, deployment environments - **Views:** System overviews, component details, deployment diagrams ### `resources/doc-likec4/` **Documentation Platform Architecture** Contains architecture models that explain how this documentation system works - the Hugo/Docsy setup, CI/CD pipeline, and deployment process. - **Purpose:** Document how we document (meta-documentation) - **Models:** Hugo, LikeC4, Taskfile, GitHub Actions, Edge deployment - **Views:** Documentation workflow, CI/CD pipeline, testing capabilities ## 🚀 Quick Start ### 1. Install Dependencies ```bash # In the LikeC4 project directory cd resources/edp-likec4 # or cd resources/doc-likec4 # Install dependencies (only once) npm install ``` ### 2. Start LikeC4 Preview Preview your architecture models in the browser: ```bash npm start # Opens http://localhost:5173 ``` This launches the interactive LikeC4 viewer where you can: - Navigate through all views - Explore relationships - Test changes in real-time ### 3. Edit Models Edit `.c4` files in your project: **Example structure:** ```text resources/edp-likec4/ ├── models/ │ ├── systems.c4 # System definitions │ ├── services.c4 # Service components │ └── infrastructure.c4 # Infrastructure elements ├── views/ │ ├── overview.c4 # High-level views │ ├── deployment/ # Deployment views │ └── components/ # Component details ├── deployment/ │ └── environments.c4 # Deployment configurations └── likec4.config.json # LikeC4 configuration ``` **Example C4 model:** ```likec4 specification { element system element service element database } model { mySystem = system 'My System' { description 'System description' backend = service 'Backend API' { description 'REST API service' } db = database 'Database' { description 'PostgreSQL database' } backend -> db 'reads/writes' } } views { view systemOverview { title "System Overview" include mySystem autoLayout TopBottom } } ``` ### 4. Generate Web Components After editing models, generate the web component for Hugo: ```bash # From repository root task likec4:generate ``` This creates `static/js/likec4-webcomponent.js` (~2-3 MB) with all views. ### 5. Embed in Hugo Use the `likec4-view` shortcode in Markdown: ```markdown {{}} ``` Parameters: - `view` - View ID from your C4 model (required) - `project` - `"architecture"` (edp-likec4) or `"documentation-platform"` (doc-likec4) - `title` - Optional custom title ## 🔄 Development Workflow ### Architecture Changes Workflow 1. **Edit Models** - Modify `.c4` files in `models/` or `views/` 2. **Preview Changes** ```bash cd resources/edp-likec4 # or doc-likec4 npm start ``` Opens http://localhost:5173 for real-time preview 3. **Validate Models** ```bash # From repository root task likec4:validate ``` 4. **Generate Web Components** ```bash task likec4:generate ``` 5. **Test in Hugo** ```bash task serve # Open http://localhost:1313 ``` 6. **Commit Changes** ```bash git add resources/edp-likec4/ git add resources/doc-likec4/ git add static/js/likec4-webcomponent.js git commit -m "feat: update architecture diagrams" ``` ### Available Tasks ```bash task likec4:generate # Generate web components from all projects task likec4:validate # Validate C4 models (ignore layout drift) task likec4:update # Update LikeC4 to latest version ``` ## 🔍 Finding View IDs To find available view IDs for embedding: ```bash # In the project directory cd resources/edp-likec4 grep -r "^view " views/ models/ --include="*.c4" # Or search all C4 files grep -r "view\s\+\w" . --include="*.c4" ``` View IDs are defined in your C4 files: ```likec4 views { view myViewId { # ← This is the view ID title "My View" // ... } } ``` ## 📚 LikeC4 Syntax ### Specification Block Define element and relationship types: ```likec4 specification { element person element system element container element component relationship async relationship sync } ``` ### Model Block Define your architecture: ```likec4 model { customer = person 'Customer' { description 'End user' } system = system 'My System' { frontend = container 'Frontend' { description 'React application' } backend = container 'Backend' { description 'Node.js API' } frontend -> backend 'API calls' } customer -> system.frontend 'uses' } ``` ### Views Block Create diagrams: ```likec4 views { view overview { title "System Overview" include * autoLayout TopBottom } view systemDetail { title "System Details" include system.* autoLayout LeftRight } } ``` ## 🎯 Common View IDs ### EDP Platform (resources/edp-likec4/) - `edp` - EDP overview - `landscape` - Developer landscape - `otc-faas` - OTC FaaS deployment - `edpbuilderworkflow` - Builder workflow - Component views: `keycloak`, `forgejo`, `argoCD`, etc. ### Documentation Platform (resources/doc-likec4/) - `overview` - Complete system overview - `localDevelopment` - Technical Writer workflow - `cicdPipeline` - CI/CD pipeline - `deploymentFlow` - Edge deployment - `fullWorkflow` - End-to-end workflow - `testingCapabilities` - Testing overview ## 🛠️ Configuration ### likec4.config.json Each project has a configuration file: ```json { "sources": [ "models/**/*.c4", "views/**/*.c4", "deployment/**/*.c4" ] } ``` This tells LikeC4 where to find your model files. ## 🔗 Integration with Hugo ### How It Works 1. **Source:** `.c4` files contain your architecture models 2. **Codegen:** `task likec4:generate` creates a self-contained web component 3. **Static Asset:** `static/js/likec4-webcomponent.js` bundled with Hugo site 4. **Custom Element:** Web Components standard enables `` tag 5. **Rendering:** Shadow DOM renders interactive diagrams ### Web Component Registration The web component is automatically loaded via `layouts/partials/hooks/head-end.html`: ```html ``` This loader dynamically loads the LikeC4 web component only on pages that use it. ### Styling Custom styles in `static/css/likec4-styles.css`: - Dark mode support - Telekom magenta color scheme - Responsive sizing - Loading indicators ## 📖 Resources - [LikeC4 Documentation](https://likec4.dev/) - [LikeC4 GitHub](https://github.com/likec4/likec4) - [C4 Model](https://c4model.com/) ## 🔧 Troubleshooting ### Web Component Not Rendering 1. Check that view ID exists: ```bash grep -r "view yourViewId" resources/ ``` 2. Regenerate web component: ```bash task likec4:generate ``` 3. Clear browser cache and reload ### Layout Drift Warnings Layout drift warnings during validation are expected and can be ignored: ```bash task likec4:validate # Ignores layout drift task likec4:validate:layout # Full validation including layout ``` ### NPM Errors ```bash cd resources/edp-likec4 rm -rf node_modules package-lock.json npm install ``` ## 🎓 Learn More For detailed usage in content creation, see: - [README-technicalWriter.md](./README-technicalWriter.md) - Content contributor guide - [content/en/docs/documentation/local-development.md](./content/en/docs/documentation/local-development.md) - Local development guide