# A Website Built for People and AI: How We Deliver the New Jaraco Website

A company website has two jobs. It should help people understand what we do, and it should make the information easy to find, reuse, and maintain. We rebuilt the Jaraco website with both in mind.

The result is a lightweight, multilingual site for Jaraco GmbH, with a practical content workflow, a staging environment, and an MCP server that lets AI clients work with our public information. The project is also a small demonstration of how we approach software delivery: keep the system understandable, automate repeatable work, and make changes easy to review before they reach production.

## A straightforward experience for visitors

The site brings together our services, project stories, articles, company information, and Jarakube product pages. Visitors can move between these sections using the main navigation, browse the blog and stories, and find common answers in the FAQ. Language controls provide English, German, French, Spanish, and Dutch content where available. Service pages and calls to action give visitors a clear route to start a conversation with us.

We also publish Markdown versions of pages. That makes the content convenient to read in text-first tools and gives search and AI systems a clean representation of what the pages say. Structured metadata and generated discovery files support the same goal: make the site understandable to people, crawlers, and assistants.

## Low-tech by design

The public site is built from static HTML, CSS, and a small amount of JavaScript. Python scripts prepare pages and content indexes during the build. A web server then serves the generated files; visitors do not need a large application framework or a server-side rendering stack to see the site.

This keeps the runtime simple and the output inspectable. Static pages are quick to serve, easy to cache, and do not depend on a database just to display company information. JavaScript handles focused interactions such as language selection and rendering the blog listing, while the page content remains available as generated HTML and Markdown.

“Low-tech” here means choosing fewer moving parts where they solve the problem. It does not mean skipping automation: the build pipeline validates content, generates localized pages and indexes, creates AI discovery files and MCP documentation, and packages the result as a container image.

## Add content in Markdown, review it on staging

Articles and other collections use Markdown files for the prose and small JSON manifests for titles, summaries, dates, and language-specific file references. To add a blog post, an editor adds the article and its manifest, includes that manifest in the blog collection index, and submits the change through Git. The build checks that the content references are complete and generates the site pages and indexes from those source files.

Changes can be discussed and reviewed in a pull request before they are merged. The website workflow itself starts on pushes to `develop` or `main`, not when a pull request is opened. A push to `develop` builds and deploys to our demo site at [jaraco-demo.jarakube.eu](https://jaraco-demo.jarakube.eu), where we can review the actual deployment. A push to `main` follows the production path at [jarakube.eu](https://jarakube.eu). The workflow checks that the deployed site reports the expected source revision.

## Quality checks from code to the live site

The checks run in stages. Before building the image, the workflow validates content manifests, generates the static pages and discovery files, and runs a Python test harness for the site-generation scripts with coverage. SonarQube analyzes configured source areas and applies a quality gate before the image build can proceed.

Once built, the container image is pushed to the registry and Trivy scans it for known, fixable critical and high-severity operating-system and library vulnerabilities. A passing scan is required before deployment is dispatched. After deployment, the workflow verifies the Git revision served by the site and runs Playwright end-to-end checks in desktop and mobile browser configurations. The suite checks navigation, static pages, language switching, content links, metadata, FAQs, and other key journeys. The `develop` branch is checked on the demo site; `main` is checked in production.

OWASP ZAP then runs a baseline security scan, followed by an automated Nikito quality and security scan against the deployed environment. These checks add useful coverage, but a baseline scan is not a full penetration test. The runtime container also runs as a non-root user and configures browser security headers such as Content Security Policy, frame protection, and MIME-sniffing protection. Developers can use `test-local-website.sh <theme>` to generate the pages, build the container, and preview a local instance before pushing a change.

The same approach applies to service pages, stories, and other content collections. Writers can focus on Markdown, while the build takes care of localization, static page generation, content indexes, and the related discovery artifacts.

## Change the look without replacing the content model

The theme system separates visual choices from the content sources. Theme configuration, CSS, and reusable page partials define the appearance; generators apply those choices to the shell pages and detail pages. The site currently includes several themes, so an administrator can work on tokens and styles without rewriting every article or service description.

Repository skills make that work easier when using an AI coding agent. The existing `jaraco-website-css` skill explains the theme system and styling ownership; `jaraco-website-detail-layout` guides changes to generated detail pages; and `jaraco-website-categorized-navigation` documents navigation structure, localization, and behavior. These are practical instructions stored with the project, so an assistant can follow the site’s conventions instead of guessing how a change should be made.

The workflow and project documentation also describe how source content becomes a deployed site. Together, the documented build steps and focused skills help an administrator make routine content and presentation changes with a clearer path from edit to review.

## An MCP server for structured interaction

The site includes a read-only [Model Context Protocol (MCP) server](https://jarakube.eu/mcp-server/mcp-server.html). MCP gives compatible AI clients a structured way to discover and read Jaraco website content, including blog posts and service information. The server also offers an email-drafting tool for service enquiries. This is useful when an assistant needs source material or wants to prepare a first draft without scraping page markup by hand.

The public site remains useful on its own. MCP adds another interface to the same information for people who work through AI assistants and MCP-enabled applications. Content changes flow through the same build, so the website and the MCP server can stay aligned.

## Looking ahead: A2A and WebMCP

MCP is one part of a changing landscape for agent interaction. The [Agent2Agent (A2A) protocol](https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/) focuses on communication and coordination between independent agents. A2A could make it much easier to connect the dots between services: agents built by different teams can discover each other's capabilities and work together through a standardized way to communicate. [WebMCP](https://github.com/webmachinelearning/webmcp) explores a browser-native way for websites to offer structured tools to agents, so they can use a site's capabilities through clear, described actions instead of guessing from its interface. Its browser context is especially interesting because an agent can interact through the user's existing page session, preserving the user's identity and the permissions already in place. WebMCP is still evolving, but it points toward a useful question for every site owner: how should a website explain its content and capabilities to an agent?

Our MCP server already gives assistants a direct way to discover and read Jaraco content. As A2A and WebMCP develop, we are interested in how these interfaces can complement each other, and how site owners can guide language models to the right, authoritative content on their pages. **How do you guide LLMs to the right content on your website?**

## Try the site, then ask an AI search engine

Visit [jarakube.eu](https://jarakube.eu), explore the services and project stories, switch languages, or read one of the articles in Markdown. Then try these questions in [Perplexity](https://www.perplexity.ai/search?q=What%20does%20Jaraco%20GmbH%20do%3F) or [Google AI Mode](https://www.google.com/search?udm=50&q=What%20does%20Jaraco%20GmbH%20do%3F): [What does Jaraco GmbH do?](https://www.perplexity.ai/search?q=What%20does%20Jaraco%20GmbH%20do%3F) · [How does Jarakube support platform engineering?](https://www.perplexity.ai/search?q=How%20does%20Jarakube%20support%20platform%20engineering%3F) · [What workflow automation examples has Jaraco published?](https://www.perplexity.ai/search?q=What%20workflow%20automation%20examples%20has%20Jaraco%20published%3F). To run the same questions in Google AI Mode, use [Jaraco GmbH](https://www.google.com/search?udm=50&q=What%20does%20Jaraco%20GmbH%20do%3F), [Jarakube platform engineering](https://www.google.com/search?udm=50&q=How%20does%20Jarakube%20support%20platform%20engineering%3F), or [Jaraco workflow automation](https://www.google.com/search?udm=50&q=What%20workflow%20automation%20examples%20has%20Jaraco%20published%3F). Follow the sources in the answers back to the site and see how the information is presented.

That is part of the point: we want our work to be discoverable and verifiable, whether someone arrives through a browser, a search engine, or an AI client. The site gives us a practical place to demonstrate the same capabilities we help clients build: maintainable software, useful automation, and delivery paths that make change easier to trust.

If you are planning a website, content platform, or AI-enabled information service of your own, [get in touch with Jaraco](mailto:info@jaraco.de). We would be glad to discuss a practical first step.

This article was created with the help of large language models (LLMs).
