# Berris.dev > Berris.dev is Roy Berris's knowledge base on software architecture, API design, AI agents and .NET, written from hands-on experience as a software architect. Berris.dev is written by Roy Berris, Software Architect at New Orange in the Netherlands. Posts are called "nodes" and are grouped into topic clusters on an interactive map. Every node is written from first-hand experience; AI helps with structure and readability, and the author owns every technical claim. More about the author: [About](https://berris.dev/about/), [GitHub](https://github.com/royberris), [LinkedIn](https://www.linkedin.com/in/roy-berris/). Each node is available as a web page at `https://berris.dev/nodes//` and as raw Markdown at `https://berris.dev/nodes/.md`. The full text of every node is in [llms-full.txt](https://berris.dev/llms-full.txt). ## Software Architecture The fundamental organization of a software system, including its components, relationships, and design principles. [All Software Architecture nodes](https://berris.dev/clusters/software-architecture/) - [Clearing my evening thoughts with a personal VPS](https://berris.dev/nodes/clearing-my-evening-thoughts-with-a-personal-vps/): How I stopped evening work anxiety by wiring up a private VPS, Matrix, and an Obsidian second brain into an always-on personal AI assistant. ([Markdown](https://berris.dev/nodes/clearing-my-evening-thoughts-with-a-personal-vps.md)) - [The Three-Layer System for Consistent AI Specifications](https://berris.dev/nodes/the-three-layer-system-for-consistent-ai-specifications/): How we use a three-layer compiler pipeline to generate functional design specifications with AI, compiling business truth down to verifiable contracts. ([Markdown](https://berris.dev/nodes/the-three-layer-system-for-consistent-ai-specifications.md)) - [Designing APIs for AI Agents: Schemas, Security and MCP](https://berris.dev/nodes/designing-apis-for-ai-agents/): AI agents now call our APIs, but few of us design for them. How I use schemas, consistent patterns, security and MCP ideas to serve developers and agents. ([Markdown](https://berris.dev/nodes/designing-apis-for-ai-agents.md)) - [Standardizing API Conventions with ADRs](https://berris.dev/nodes/standardizing-api-conventions/): How one two-hour DevAlign session and a set of Architecture Decision Records (ADRs) gave my team consistent API naming, versioning, errors and pagination. ([Markdown](https://berris.dev/nodes/standardizing-api-conventions.md)) - [Going Headless with MVC: Umbraco Community Day Talk](https://berris.dev/nodes/going-headless-with-mvc/): My Umbraco Community Day 2023 talk on headless and MVC: decoupling Umbraco from the presentation layer, with the source code of the working prototype. ([Markdown](https://berris.dev/nodes/going-headless-with-mvc.md)) ## .NET Microsoft's open-source developer platform and runtime for building web, cloud, desktop and mobile applications, including ASP.NET Core. [All .NET nodes](https://berris.dev/clusters/dotnet/) - [Using Value Objects in .NET](https://berris.dev/nodes/using-value-objects-in-net/): What a DDD value object is and how to build one in C#, using a hexadecimal color code with equality by value, a guarded factory method and immutable behavior. ([Markdown](https://berris.dev/nodes/using-value-objects-in-net.md)) - [Start Using Roslyn Code Analyzers](https://berris.dev/nodes/start-using-roslyn-code-analyzers/): How to set up Roslyn code analyzers like StyleCop with a shared .editorconfig in .NET, configure rule severity, fix issues and suppress rules the right way. ([Markdown](https://berris.dev/nodes/start-using-roslyn-code-analyzers.md)) - [Implementing a Configurable CSP in ASP.NET Core](https://berris.dev/nodes/implementing-a-configurable-csp-in-aspnet-core/): What a Content Security Policy is and how to build one from appsettings.json with ASP.NET Core middleware, including report-only mode and excluded paths. ([Markdown](https://berris.dev/nodes/implementing-a-configurable-csp-in-aspnet-core.md)) ## Artificial Intelligence (AI) Technology and methodologies for creating intelligent machines and automated systems that can perform tasks typically requiring human intelligence. [All AI nodes](https://berris.dev/clusters/ai/) - [Clearing my evening thoughts with a personal VPS](https://berris.dev/nodes/clearing-my-evening-thoughts-with-a-personal-vps/): How I stopped evening work anxiety by wiring up a private VPS, Matrix, and an Obsidian second brain into an always-on personal AI assistant. ([Markdown](https://berris.dev/nodes/clearing-my-evening-thoughts-with-a-personal-vps.md)) - [The Three-Layer System for Consistent AI Specifications](https://berris.dev/nodes/the-three-layer-system-for-consistent-ai-specifications/): How we use a three-layer compiler pipeline to generate functional design specifications with AI, compiling business truth down to verifiable contracts. ([Markdown](https://berris.dev/nodes/the-three-layer-system-for-consistent-ai-specifications.md)) - [AI-Assisted Blogging: When Technology Meets Technical Writing](https://berris.dev/nodes/ai-assisted-blogging/): How I blog with AI as a writing partner, not a ghostwriter: I bring the insights and own every technical claim, AI helps with structure and readability. ([Markdown](https://berris.dev/nodes/ai-assisted-blogging.md)) ## AI Agents Autonomous software entities that can perceive their environment, make decisions, and take actions to achieve specific goals through API interactions. [All AI Agents nodes](https://berris.dev/clusters/ai-agents/) - [Clearing my evening thoughts with a personal VPS](https://berris.dev/nodes/clearing-my-evening-thoughts-with-a-personal-vps/): How I stopped evening work anxiety by wiring up a private VPS, Matrix, and an Obsidian second brain into an always-on personal AI assistant. ([Markdown](https://berris.dev/nodes/clearing-my-evening-thoughts-with-a-personal-vps.md)) - [Designing APIs for AI Agents: Schemas, Security and MCP](https://berris.dev/nodes/designing-apis-for-ai-agents/): AI agents now call our APIs, but few of us design for them. How I use schemas, consistent patterns, security and MCP ideas to serve developers and agents. ([Markdown](https://berris.dev/nodes/designing-apis-for-ai-agents.md)) ## Development Best Practices (Best Practices) Practical habits and conventions that keep code maintainable, consistent and efficient across a team and over the lifetime of a project. [All Best Practices nodes](https://berris.dev/clusters/best-practices/) - [The Three-Layer System for Consistent AI Specifications](https://berris.dev/nodes/the-three-layer-system-for-consistent-ai-specifications/): How we use a three-layer compiler pipeline to generate functional design specifications with AI, compiling business truth down to verifiable contracts. ([Markdown](https://berris.dev/nodes/the-three-layer-system-for-consistent-ai-specifications.md)) - [Start Using Roslyn Code Analyzers](https://berris.dev/nodes/start-using-roslyn-code-analyzers/): How to set up Roslyn code analyzers like StyleCop with a shared .editorconfig in .NET, configure rule severity, fix issues and suppress rules the right way. ([Markdown](https://berris.dev/nodes/start-using-roslyn-code-analyzers.md)) ## Software Design Patterns (Design Patterns) Reusable solutions to commonly occurring problems in software design and architecture. [All Design Patterns nodes](https://berris.dev/clusters/design-patterns/) - [Designing APIs for AI Agents: Schemas, Security and MCP](https://berris.dev/nodes/designing-apis-for-ai-agents/): AI agents now call our APIs, but few of us design for them. How I use schemas, consistent patterns, security and MCP ideas to serve developers and agents. ([Markdown](https://berris.dev/nodes/designing-apis-for-ai-agents.md)) - [Using Value Objects in .NET](https://berris.dev/nodes/using-value-objects-in-net/): What a DDD value object is and how to build one in C#, using a hexadecimal color code with equality by value, a guarded factory method and immutable behavior. ([Markdown](https://berris.dev/nodes/using-value-objects-in-net.md)) ## Team Collaboration Practices and methodologies for effective teamwork in software development, including communication, decision-making, and knowledge sharing. [All Team Collaboration nodes](https://berris.dev/clusters/team-collaboration/) - [Standardizing API Conventions with ADRs](https://berris.dev/nodes/standardizing-api-conventions/): How one two-hour DevAlign session and a set of Architecture Decision Records (ADRs) gave my team consistent API naming, versioning, errors and pagination. ([Markdown](https://berris.dev/nodes/standardizing-api-conventions.md)) - [Start Using Roslyn Code Analyzers](https://berris.dev/nodes/start-using-roslyn-code-analyzers/): How to set up Roslyn code analyzers like StyleCop with a shared .editorconfig in .NET, configure rule severity, fix issues and suppress rules the right way. ([Markdown](https://berris.dev/nodes/start-using-roslyn-code-analyzers.md)) ## Umbraco CMS (Umbraco) The open-source .NET content management system, covering implementation, editor experience, hosting and the Umbraco community. [All Umbraco nodes](https://berris.dev/clusters/umbraco/) - [The Statically Generated Umbraco Website](https://berris.dev/nodes/the-statically-generated-umbraco-website/): How I turned my Umbraco website into a static site with xStatic and free Netlify hosting in under an hour, and who should and shouldn't use this approach. ([Markdown](https://berris.dev/nodes/the-statically-generated-umbraco-website.md)) - [Going Headless with MVC: Umbraco Community Day Talk](https://berris.dev/nodes/going-headless-with-mvc/): My Umbraco Community Day 2023 talk on headless and MVC: decoupling Umbraco from the presentation layer, with the source code of the working prototype. ([Markdown](https://berris.dev/nodes/going-headless-with-mvc.md)) ## Architecture Decision Records (ADR) A structured framework for documenting architectural decisions, capturing context, alternatives considered, and rationale behind chosen approaches. [All ADR nodes](https://berris.dev/clusters/adr/) - [Standardizing API Conventions with ADRs](https://berris.dev/nodes/standardizing-api-conventions/): How one two-hour DevAlign session and a set of Architecture Decision Records (ADRs) gave my team consistent API naming, versioning, errors and pagination. ([Markdown](https://berris.dev/nodes/standardizing-api-conventions.md)) ## Application Programming Interface (API) Set of protocols, routines, and tools for building software applications, defining how software components should interact. [All API nodes](https://berris.dev/clusters/api/) - [Standardizing API Conventions with ADRs](https://berris.dev/nodes/standardizing-api-conventions/): How one two-hour DevAlign session and a set of Architecture Decision Records (ADRs) gave my team consistent API naming, versioning, errors and pagination. ([Markdown](https://berris.dev/nodes/standardizing-api-conventions.md)) ## API Design The practice of creating well-structured, intuitive, and maintainable interfaces for software applications and services. [All API Design nodes](https://berris.dev/clusters/api-design/) - [Designing APIs for AI Agents: Schemas, Security and MCP](https://berris.dev/nodes/designing-apis-for-ai-agents/): AI agents now call our APIs, but few of us design for them. How I use schemas, consistent patterns, security and MCP ideas to serve developers and agents. ([Markdown](https://berris.dev/nodes/designing-apis-for-ai-agents.md)) ## Technical Blogging (Blogging) The practice of writing and publishing technical content to share knowledge, insights, and experiences with the developer community. [All Blogging nodes](https://berris.dev/clusters/blogging/) - [AI-Assisted Blogging: When Technology Meets Technical Writing](https://berris.dev/nodes/ai-assisted-blogging/): How I blog with AI as a writing partner, not a ghostwriter: I bring the insights and own every technical claim, AI helps with structure and readability. ([Markdown](https://berris.dev/nodes/ai-assisted-blogging.md)) ## C# Programming Language (C#) Microsoft's statically typed, object-oriented programming language for .NET, covering language features, idioms and compiler behavior. [All C# nodes](https://berris.dev/clusters/csharp/) - [Using Value Objects in .NET](https://berris.dev/nodes/using-value-objects-in-net/): What a DDD value object is and how to build one in C#, using a hexadecimal color code with equality by value, a guarded factory method and immutable behavior. ([Markdown](https://berris.dev/nodes/using-value-objects-in-net.md)) ## Web Hosting and Deployment (Hosting) Choices and trade-offs in where and how websites and applications run, from servers and static hosting to deployment pipelines and costs. [All Hosting nodes](https://berris.dev/clusters/hosting/) - [The Statically Generated Umbraco Website](https://berris.dev/nodes/the-statically-generated-umbraco-website/): How I turned my Umbraco website into a static site with xStatic and free Netlify hosting in under an hour, and who should and shouldn't use this approach. ([Markdown](https://berris.dev/nodes/the-statically-generated-umbraco-website.md)) ## Web Application Security (Security) Techniques and configuration for protecting web applications and their users, such as security headers, policies and threat mitigation. [All Security nodes](https://berris.dev/clusters/security/) - [Implementing a Configurable CSP in ASP.NET Core](https://berris.dev/nodes/implementing-a-configurable-csp-in-aspnet-core/): What a Content Security Policy is and how to build one from appsettings.json with ASP.NET Core middleware, including report-only mode and excluded paths. ([Markdown](https://berris.dev/nodes/implementing-a-configurable-csp-in-aspnet-core.md)) ## Technical Writing Specialized form of communication that conveys complex technical information clearly and effectively to specific audiences. [All Technical Writing nodes](https://berris.dev/clusters/technical-writing/) - [AI-Assisted Blogging: When Technology Meets Technical Writing](https://berris.dev/nodes/ai-assisted-blogging/): How I blog with AI as a writing partner, not a ghostwriter: I bring the insights and own every technical claim, AI helps with structure and readability. ([Markdown](https://berris.dev/nodes/ai-assisted-blogging.md)) ## Optional - [About Roy Berris](https://berris.dev/about/): Who writes Berris.dev, background and speaking. - [Node index](https://berris.dev/nodes/): Every node, filterable by cluster. - [Full text](https://berris.dev/llms-full.txt): All nodes as one Markdown document, newest first. - [Sitemap](https://berris.dev/sitemap.xml): Machine-readable list of every page.