<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
  <channel>
    <title>Liip Blog</title>
    <link>https://www.liip.ch/de/blog</link>
    <lastBuildDate></lastBuildDate>
            <item>
      <title>Apertus after 8 months - what we learned and look forward to using Switzerland&#039;s AI Model</title>
      <link>https://www.liip.ch/de/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model</link>
      <guid>https://www.liip.ch/de/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Since September 2025, we have been running <a href="https://www.apertus-ai.org/">Apertus</a> — the Swiss open-source language model developed by <a href="https://www.epfl.ch/">EPFL</a>, <a href="https://ethz.ch/">ETH Zurich</a> and the <a href="https://www.cscs.ch/">Swiss National Supercomputing Centre (CSCS)</a> — on <a href="https://zuericitygpt.ch">ZüriCityGPT</a>, our reference implementation of a City AI assistant. Eight months later, I want to share what we have learned and what we are curious about for the upcoming Apertus 1.5 release.</p>
<!-- IMAGE: Screenshot of zuericitygpt.ch and oss.zuericitygpt.ch side by side -->
<h1>A brief history of LiipGPT and ZüriCityGPT</h1>
<p>2023, Chregu released the <a href="https://www.liip.ch/en/blog/ask-zuricitygpt-anything-about-the-government-of-the-city-of-zurich">first version of LiipGPT</a>. 2024, we were able to <a href="https://www.liip.ch/en/blog/zuricitygpt-oss-version-using-only-open-source-models">use only open-source models on ZüriCityGPT</a>. 2025, we switched the open-source version to the <a href="https://www.liip.ch/en/blog/apertus-4-ways-to-try-out-switzerland-s-new-ai-model">newly released Apertus model</a>. In this blog post, we talk about the insights gained since then.</p>
<h1>Setting up the experiment</h1>
<p><a href="https://liipgpt.ch">LiipGPT</a>, our <a href="https://www.liip.ch/en/work/projects/liipgpt">generative AI framework</a>, has a pluggable model layer. That means we can swap the underlying language model without changing anything else — same Retrieval-Augmented Generation (RAG) pipeline, same knowledge base of official content from stadt-zuerich.ch. This gave us a straightforward way to compare models in a real deployment.</p>
<p>The production system at <a href="https://zuericitygpt.ch">zuericitygpt.ch</a> runs GPT-4o-mini on Azure Europe. Alongside it, we run an open-source variant at <a href="https://oss.zuericitygpt.ch">oss.zuericitygpt.ch</a> where in the past we compared Llama and Mixtral models. We switched the open-source variant to <a href="https://www.swisscom.ch/en/about/news/2025/09/02-apertus.html">Apertus-70B</a> when it was released in September 2025, then moved to <a href="https://www.infomaniak.com/en/hosting/ai-services/open-source-models">Infomaniak-hosted</a> Apertus in April 2026. (To be clear: ZüriCityGPT itself and the LiipGPT platform are not open source — but the underlying language model on the OSS variant is.)</p>
<p>We run Apertus as the 70-billion-parameter model. It was trained from scratch on the Alps supercomputer using Swiss hydroelectricity, with 15 trillion tokens of training data spanning over 1,800 languages. It is fully open-source under an Apache 2.0 licence.</p>
<p>Over the last eight months, we collected over 39,000 conversations on the production side and 3,400 on the open-source side. Quality is measured using three metrics: how often an answer is acceptable (Match Rate), how often it is actually good (Match Rate +1), and how faithfully it reflects the source documents (Faithfulness). These are metrics our LiipGPT team has established as practical product metrics, not scientific benchmarks — the data is calculated real-time and asynchronously by the LiipGPT platform while users ask different questions over time, evolving website content, and model endpoint changes. Parts of the analysis were prepared with the help of Claude. Our aim is not to provide a scientific study but more a practical report. I share these results with the Apertus community because real-world deployment data of this open-source model is rare — and we think it's useful.</p>
<h1>What we observed</h1>
<p>Both models get the job done. On the basic question — does the user get an acceptable answer? — both models perform similarly. GPT-4o-mini scores 81%, Apertus 82% on historically matched questions. In a controlled test with 20 identical questions asked at the same moment, both hit 100%. Both models generally work as expected.</p>
<p>The gap shows up in answer quality. When we raise the bar to "is this answer actually good?", GPT-4o-mini scores 72% and Apertus 55%. That is a noticeable difference, and it matters for users who expect precise, well-structured responses.</p>
<p>Faithfulness is more nuanced than we expected. GPT-4o-mini averages 0.79, Apertus 0.50 on our faithfulness metric. But these numbers need context. We noticed something we started calling the "faithfulness paradox": when a model says "I cannot answer this," you might expect high faithfulness — no hallucination, after all. In practice, these evasive answers score low because the model is failing to use information that is available. A model that engages with its sources and cites them scores higher, even though it is making more verifiable claims. Both behaviours have tradeoffs, and both showed up across the two systems.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/ac2f708a50-1783608445/chart_comparison_2x3.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/b851b8/chart-comparison-2x3.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/b851b8/chart-comparison-2x3.jpg 2x"></a><figcaption>Three quality metrics compared across a controlled test (20 identical questions) and historically matched real-user questions</figcaption></figure>
<p>Sometimes Apertus gave the better answer. The most striking example was the waste dump question: "What are the rules for using the Zurich waste dump?" GPT-4o-mini responded cautiously, saying it could not provide specific rules. Apertus gave a detailed, structured answer with recycling centre details, phone numbers, and cited sources — scoring 6/6 on quality where GPT-4o-mini scored 3/6. When the knowledge base contains a clear, structured answer, Apertus can be surprisingly good at extracting and presenting it.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/9436173ed7-1783609912/apertus_gpt4omini_waste_dump.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/3b465f/apertus-gpt4omini-waste-dump.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/3b465f/apertus-gpt4omini-waste-dump.jpg 2x"></a><figcaption>GPT-4o-mini and Apertus respond to the same question</figcaption></figure>
<p>That said, this willingness to commit cuts both ways. In cases where the source material is ambiguous, Apertus can feel more helpful while being less strictly grounded — and for public-sector chatbots, traceability matters as much as helpfulness.</p>
<p>GPT-4o-mini is more concise and better at synthesis. Apertus tends to produce longer, more verbose answers. In a public-service chatbot, that is a real UX issue — users want a direct answer with clear next steps, not three paragraphs of context.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/b6516e51a6-1783610106/apertus_gpt4omini_verbose.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/677113/apertus-gpt4omini-verbose.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/677113/apertus-gpt4omini-verbose.jpg 2x"></a><figcaption>GPT-4o-mini responds concise, Apertus more verbose</figcaption></figure>
<p>GPT-4o-mini also handles factual freshness better: it returned Zurich's current population (452,421), while Apertus fell back to a 2013 figure. When information has changed or the answer requires connecting multiple sources, GPT-4o-mini felt more reliable.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/5ed0fada3b-1783610421/apertus_gpt4omini_population.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/997ce3/apertus-gpt4omini-population.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/997ce3/apertus-gpt4omini-population.jpg 2x"></a><figcaption>GPT-4o-mini answers with more recent population data compared to Apertus</figcaption></figure>
<p>Language switching is a weak spot. When we asked "Est-ce que tu parles français?", GPT-4o-mini responded fluently in French. Apertus declined, saying it could not answer questions about its own linguistic capabilities. In more recent tests we saw that Apertus followed the language instructions in better ways, so we are looking forward to see this further improve.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/0bbc6670a2-1783610288/apertus_gpt4omini_language.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/0387e4/apertus-gpt4omini-language.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/0387e4/apertus-gpt4omini-language.jpg 2x"></a><figcaption>GPT-4o-mini follows the language instruction, Apertus did not</figcaption></figure>
<p>The Apertus-70B IFEval score of 44% (vs 58% for comparable models) confirms that instruction following is an area where the model has room to grow.</p>
<figure><a href="https://www.liip.ch/media/pages/blog/apertus-after-8-months-what-we-learned-and-look-forward-using-switzerlands-ai-model/38a7a3a17b-1783609312/chart_monthly_cleaned.png"><img alt="" src="https://liip.rokka.io/www_inarticle_5/c6a834/chart-monthly-cleaned.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/c6a834/chart-monthly-cleaned.jpg 2x"></a><figcaption>Monthly quality trend from October 2025 to June 2026</figcaption></figure>
<p>The trend is positive. In October 2025, Apertus achieved a Match Rate +1 of 59%. By June 2026, it had climbed to 63% — the best month on record. That is not a dramatic leap, but the direction is consistent and it came without a major model update. Meanwhile, GPT-4o-mini has been stable at 63–83% throughout. The gap is narrowing.</p>
<h1>What we are looking forward to</h1>
<p>The Apertus team is preparing version 1.5, with improvements expected in multimodal support, agentic capabilities, tool calling, enhanced reasoning, and better training for regional Swiss languages. We plan to update ZüriCityGPT's open-source instance as soon as it becomes available and continue our quality monitoring.</p>
<p>What encourages us most is that the collaboration is flowing in both directions. After our <a href="https://www.ailights.ch/">aiLights talk</a>, the Apertus team shared our findings with their staff. This close feedback loop between research and practice is exactly what makes the Swiss AI ecosystem worth investing in.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/3719ab/04.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/3719ab/04.jpg 2x"><figcaption>Christian Stocker presenting ZüriCityGPT. Photo: Oleg Lavrovsky (CC BY 4.0), source: <a href="https://log.alets.ch/115/">https://log.alets.ch/115/</a></figcaption></figure>
<p>My practical advice, for anyone considering sovereign AI: start with the use case, then choose the model. If your priority is maximum answer quality today, more popular models are usually the stronger choice. If your priority is data sovereignty, transparency, and independence — and your knowledge base is well-curated — Apertus already delivers. The question is not "sovereign AI or quality" but "how much quality gap are you willing to accept for full sovereignty?" And that gap is closing.</p>
<p>Check the <a href="https://docs.google.com/presentation/d/1Q792ccRiiiRk6zIlmCu7GkkjjZ6kiZJfbRk_CSBhxJ8/edit?usp=sharing">Slides</a> and <a href="https://www.youtube.com/watch?v=Fk0g--aWi1M">Recording</a> for further details.</p>
<h1>Acknowledgements</h1>
<p>I would like to thank the ETH Zurich, EPFL, and the wider <a href="https://www.swisscom.ch/en/about/news/2025/09/02-apertus.html">Swiss AI Initiative</a> community for making Apertus available as a public good. As Martin Jaggi from EPFL put it: "We aim to provide a blueprint for how a trustworthy, sovereign, and inclusive AI model can be developed." (<a href="https://ethz.ch/en/news-and-events/eth-news/news/2025/09/press-release-apertus-a-fully-open-transparent-multilingual-language-model.html">source</a>) Eight months in, we can see that blueprint taking shape and are looking forward to test the 1.5 model in practice as well.</p>
<ul>
<li>
<p>Thank you <a href="https://www.liip.ch/de/team/chregu">Christian Stocker</a> and the <a href="https://liipgpt.ch">LiipGPT</a> team for your dedication to build a practical, experiment-driven and scalable solution for AI chat and search.</p>
</li>
<li>
<p>Thank you <a href="https://www.linkedin.com/in/sabine-wildemann/">Sabine Wildemann</a> and the <a href="https://www.ailights.ch/">aiLights</a> team for hosting our talk.</p>
</li>
<li>
<p>Thank you <a href="https://log.alets.ch/">Oleg Lavrovsky</a> and the Apertus community for your feedback and support.</p>
</li>
<li>
<p>Thank you <a href="https://publicai.ch/">Public AI</a> and our partner <a href="https://www.infomaniak.com/en/hosting/ai-services/open-source-models">Infomaniak</a> for providing the infrastructure.</p>
</li>
</ul>
<h1>Build with Apertus: join Hack Apertus</h1>
<p>Want to get hands-on with sovereign Swiss AI? <a href="https://hackapertus.ch/">Hack Apertus</a> is a two-stage open-source hackathon series where teams build on Apertus to develop blueprints for sovereign infrastructure across the public and private sector. Liip is a partner — we are excited to see what the community builds.</p>
<p>Sign up at <a href="https://hackapertus.ch/">hackapertus.ch</a>.</p>
<figure><a href="https://hackapertus.ch"><img alt="" src="https://liip.rokka.io/www_inarticle_5/afc775/hackapertus-partner-liip.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/afc775/hackapertus-partner-liip.jpg 2x"></a><figcaption>Hackapertus Liip Promo Image</figcaption></figure>]]></description>
    </item>
        <item>
      <title>Ein souver&#228;ner KI-Chatbot f&#252;r den Staat Freiburg</title>
      <link>https://www.liip.ch/de/blog/ein-souveraener-ki-chatbot-fuer-den-staat-freiburg</link>
      <guid>https://www.liip.ch/de/blog/ein-souveraener-ki-chatbot-fuer-den-staat-freiburg</guid>
      <pubDate>Mon, 15 Jun 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<h2>Den Zugang zu öffentlichen Informationen erleichtern</h2>
<p>Das Portal fr.ch vereint eine grosse Menge an Verwaltungsinformationen: Verfahren, Gesetzgebung, Formulare, kantonale Dienstleistungen sowie Informationen der Gemeinden. Auf einer so umfangreichen Website die richtige Antwort zu finden, ist nicht immer einfach.</p>
<p>Du stellst deine Frage ganz normal, so, wie du sie auch einer Person stellen würdest. Obwohl <a href="https://www.fr.ch/de">fr.ch</a> in Französisch und Deutsch verfügbar ist, wie es sich für einen zweisprachigen Kanton gehört, können Fragen in jeder beliebigen Sprache gestellt werden. So erhalten auch Bürger*innen, die keine der beiden Amtssprachen sprechen, Zugang zu den benötigten Informationen.</p>
<p>Der KI-Chatbot identifiziert relevante Inhalte auf fr.ch sowie in der Freiburger Gesetzessammlung und erstellt daraus eine Antwort. Dabei verweist er auf die offiziellen Quellen, die für die Antwort herangezogen wurden.</p>
<p>Diese Transparenz ist zentral. Die KI ersetzt keine offiziellen Inhalte, sie erleichtert den Zugang dazu.</p>
<h2>KI im Zeichen digitaler Souveränität</h2>
<p>Die Datensouveränität stand im Mittelpunkt des Projekts. Für die Staatskanzlei war es entscheidend, die vollständige Kontrolle über die Infrastruktur und die Datenverarbeitung zu behalten.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/b24742/digital-sov-de.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/b24742/digital-sov-de.jpg 2x"></figure>
<p>Der Chatbot basiert auf <a href="https://www.liip.ch/en/work/projects/liipgpt">LiipGPT</a>, unserer Plattform für generative KI. Unsere Retrieval-Augmented-Generation-Technologie (RAG) wählt für jede Anfrage die relevanten offiziellen Inhalte aus. Die Lösung wird bei Exoscale in der Schweiz gehostet.</p>
<p>Als Large Language Model (LLM) setzen wir auf Mistral AI, einen der führenden europäischen Anbieter. Dieses Modell wird in der Schweiz von <a href="https://www.infomaniak.com/de/hosting/unsere-angebote-cloud-computing">Infomaniak</a> betrieben, einem Vorreiter für nachhaltiges und umweltbewusstes Webhosting. Die Server des LLM werden ausschliesslich mit erneuerbarer Energie betrieben und setzen auf natürliche Kühlung, Wärmerückgewinnung, optimierte und wiederverwendete Hardware sowie lokale CO₂-Kompensation.</p>
<p>Diese Architektur reduziert die Abhängigkeit von grossen US-amerikanischen Plattformen und setzt auf einen schweizerischen und europäischen Ansatz für generative KI. Anfragen werden anonymisiert, und es werden keine personenbezogenen Daten an Dritte weitergegeben. Die gesamte Lösung bleibt unter schweizerischer Rechtshoheit und erfüllt die geltenden Datenschutzbestimmungen.</p>
<h2>Eine Zusammenarbeit mit starken Wurzeln in der Westschweiz</h2>
<p>Die Staatskanzlei Freiburg hat das Projekt mit einer klaren Vorstellung der administrativen und politischen Anforderungen geleitet. Unser Team, unter anderem mit Mitarbeitenden in Freiburg, entwickelte die Lösung in enger Zusammenarbeit mit der Staatskanzlei. So konnten wir optimal auf die tatsächlichen Bedürfnisse eingehen.</p>
<p>Diese Nähe ermöglichte kurze Abstimmungswege und einen starken Fokus auf die Nutzer*innen-Erfahrung. Neben der technologischen Umsetzung ging es darum, ein Werkzeug zu schaffen, das für die Freiburger Bevölkerung nützlich, verlässlich und verständlich ist.</p>
<h2>Ein erster Schritt hin zu einer zugänglicheren Verwaltung</h2>
<p>Seit dem ersten Rollout im März haben wir verschiedene Elemente weiterentwickelt, um die Qualität der Antworten kontinuierlich zu verbessern. Dabei profitiert unsere Kundin insbesondere von unseren automatisierten Evaluationslösungen, mit denen die Qualität der generierten Antworten fortlaufend überprüft werden kann.</p>
<p>Diese erste Version deckt die öffentlichen Informationen auf fr.ch sowie die Freiburger Gesetzessammlung ab. Der Inhalt beschränkt sich jedoch nicht allein auf das kantonale Portal: Er wird schrittweise um Informationen erweitert, die von anderen kantonalen Institutionen und bestimmten Gemeinden veröffentlicht werden. Mit jeder neuen Quelle nimmt auch die Bedeutung einer konsequenten Qualitätssicherung zu. Der Kanton Freiburg unterhält übrigens <a href="https://www.fr.ch/de/der-ki-chatbot-von-frch">eine eigene Seite zum Chatbot</a>, auf der unter anderem die verwendeten Datenquellen aufgeführt sind.</p>
<p>Eine Überzeugung begleitet uns dabei: KI im öffentlichen Sektor kann souverän, transparent und nützlich sein. Voraussetzung dafür ist, die Kontrolle über die Infrastruktur zu behalten und die verwendeten Quellen jederzeit offenzulegen.</p>
<p>Möchtest du dich über KI in deiner Institution <a href="https://www.liip.ch/de/team/thomas-denervaud">austauschen</a>?</p>]]></description>
    </item>
        <item>
      <title>so.ch: Kantonale Services vereinfacht f&#252;r alle</title>
      <link>https://www.liip.ch/de/blog/so-ch-kantonale-services-vereinfacht-fuer-alle</link>
      <guid>https://www.liip.ch/de/blog/so-ch-kantonale-services-vereinfacht-fuer-alle</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Die Website so.ch verfolgt ein klares Ziel: Nutzer*innen sollen ihre Anliegen schnell, direkt und ohne unnötige Umwege erledigen können. Statt der klassischen Verwaltungslogik «Welches Amt ist zuständig?» steht bei so.ch <a href="https://www.liip.ch/de/services/strategy/understand-users">das konkrete Anliegen der Nutzer*innen</a> im Mittelpunkt:: «Was möchtest du erledigen?»</p>
<p>Die klare Trennung zwischen Services und Verwaltungsorganisation macht den Zweck der Plattform sofort verständlich und zeigt ihren Mehrwert für Einwohner*innen und Unternehmen. Dadurch wird die Intention der Website unmittelbar erkennbar, und alle Inhalte sind logisch und konsistent aufgebaut. Das sehen nicht nur wir so: Auch die BOSW-Jury hat dies gewürdigt und die Website in diesem Jahr mit Bronze in der Kategorie User Experience ausgezeichnet (kleiner humblebrag: Wir haben gleich zwei der drei Podestplätze geholt, Silber ging ebenfalls an uns für den Relaunch der Website des <a href="https://www.liip.ch/de/work/projects/museum-fur-gestaltung-zurich">Museum f&uuml;r Gestaltung Z&uuml;rich</a>).</p>
<figure class="video"><video controls><source src="https://www.liip.ch/media/pages/blog/so-ch-cantonal-services-made-simple-for-everyone/a93f1aef25-1778057223/liip_bosw_kantonsolothurn.mp4" type="video/mp4"></video></figure>
<h2>Informationsarchitektur - konsequent aus Nutzersicht gedacht</h2>
<p>Die Informationsarchitektur ist sorgfältig konzipiert und auf die Bedürfnisse der Zielgruppen abgestimmt. Alle Services sind zentral gebündelt, klar kategorisiert und folgen einer einheitlichen Struktur: Was brauche ich? Wie läuft der Prozess ab? Welche Kanäle stehen zur Verfügung?</p>
<p>Diese Standardisierung hilft, relevante Informationen schnell zu erfassen und sicher durch komplexe Abläufe zu navigieren. Gleichzeitig werden alle Serviceinformationen transparent dargestellt, sodass auch Gelegenheitsnutzer*innen sofort verstehen, welche Schritte erforderlich sind.</p>
<h2>Funktionalität, Interaktivität und Usability für mehr Effizienz</h2>
<p>Die Funktionen der Website sind konsequent auf die Bedürfnisse der Nutzer*innen ausgerichtet. Jede Service-Seite bietet klare, verständliche Anleitungen und intuitive Elemente, die einfach zu bedienen sind. Nutzer*innen werden bei jedem Schritt unterstützt, egal ob bei digitalen Services oder bei analogen Angeboten wie Formularen, Telefonaten oder Schalterbesuchen.</p>
<p>Das reduziert Unsicherheiten, vermeidet unnötige Rückfragen und macht die Nutzung kantonaler Leistungen effizienter.</p>
<h2>Eine inklusive Website für alle Nutzer*innen</h2>
<p>so.ch erfüllt die Anforderungen an <a href="https://www.liip.ch/de/services/development/custom-development/accessibility">digitale Barrierefreiheit</a> gemäss WAI-Richtlinien und ermöglicht so allen Nutzer*innen einen gleichberechtigten Zugang. Die Inhalte sind verständlich formuliert, die Navigation ist konsistent, die Interaktionen sind intuitiv und die Plattform unterstützt sowohl digitale als auch analoge Zugänge.</p>
<p>So wird sichergestellt, dass die Website unabhängig von technischer Erfahrung, Alter oder Beeinträchtigung effizient und selbstständig genutzt werden kann.</p>
<p>Durch die konsequente Ausrichtung auf die Bedürfnisse der Nutzer*innen bietet so.ch eine intuitive, transparente und inklusive Plattform, die komplexe Verwaltungsprozesse verständlich macht. Klare Ziele, eine durchdachte Informationsarchitektur, zugängliche Funktionen und barrierefreies Design schaffen gemeinsam eine nutzerzentrierte Erfahrung, die die Interaktion mit kantonalen Services vereinfacht und effizient gestaltet.</p>
<p>Möchtest du die Website deiner Verwaltung verbessern? Ich freue mich, <a href="https://www.liip.ch/de/team/philipp-klein">von deinen Bed&uuml;rfnissen und Herausforderungen zu h&ouml;ren</a>.</p>]]></description>
    </item>
        <item>
      <title>Wer braucht noch eine Lehre, wenn es KI gibt?</title>
      <link>https://www.liip.ch/de/blog/wer-braucht-noch-eine-lehre-wenn-es-ki-gibt</link>
      <guid>https://www.liip.ch/de/blog/wer-braucht-noch-eine-lehre-wenn-es-ki-gibt</guid>
      <pubDate>Tue, 21 Apr 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<h3>KI gehört für mich bereits zum Alltag</h3>
<p>Ende 2022 habe ich zum ersten Mal ChatGPT in einem Video auf TikTok gesehen und habe es direkt ausprobiert. Ich konnte mir Inhalte schneller erklären lassen als meine Lehrpersonen, Aufgaben besser lösen, als wenn ich es selbst machen würde, und sogar Ideen entwickeln, auf die ich nie gekommen wäre. Das faszinierte mich sehr. </p>
<p>Aber wie mächtig und auch wichtig KI wirklich ist, wurde mir erst anfangs meiner Lehre klar. Heute nutze ich sie täglich. Nicht, damit sie meine Arbeit macht, sondern damit ich mir selbst Neues beibringen kann, gezielter recherchieren kann und bei bestimmten Aufgaben effizienter vorankomme.</p>
<h3>Meine Lehre ist vielseitig. Genau das macht sie spannend</h3>
<p>Ich mache eine Lehre als <a href="https://www.ict-berufsbildung.ch/grundbildung/ict-lehren/entwickler-in-digitales-business-efz">Entwickler Digitales Business EFZ</a>. Ich bin momentan im zweiten Lehrjahr. Nach dem ersten Jahr im Bbc Basislehrjahr arbeite ich seit Sommer 2025 bei Liip. </p>
<p>An dieser Lehre finde ich besonders spannend, dass ich viele verschiedene Aufgaben habe. Ich arbeite in verschiedenen Circles, selbstorganisierte Teams nach Holokratie, mit. So lerne ich viele unterschiedliche Perspektiven, Aufgaben und Personen kennen.</p>
<p>Ich bin im Finance Circle gestartet, da ging es stärker um Datenmanagement. Seither hatte ich die Möglichkeit, in verschiedene weitere Teams reinzuschauen und jeweils andere Aufgaben, Perspektiven und Arbeitsweisen kennenzulernen. Heute arbeite ich im Content- und Design Circle mit Fokus auf Prozessoptimierung, Automatisierung und KI. Ich lerne auch noch einige andere Circles, Aufgaben und Rollen im Laufe meiner Lehre kennen. </p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/ccafe5/grafik-1.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/ccafe5/grafik-1.jpg 2x"></figure>
<p>Diese Vielfalt passt gut zu mir. Ich arbeite gerne strukturiert, kommuniziere aktiv und finde es spannend, Abläufe zu analysieren und zu verbessern. Bei Liip habe ich die privilegierte Chance bereits früh in der Lehre Verantwortung zu übernehmen. Ich arbeite an wirkungsvollen internen und externen Projekten mit, treffe Entscheidungen und bringe eigene Ideen ein. Das unterscheidet Liip für mich stark von vielen anderen Ausbildungsorten.</p>
<h3>Der Umgang mit Kund*innen gehört dazu</h3>
<p>Ein Teil meiner Lehre, der von aussen vielleicht weniger sichtbar ist, ist der Umgang mit Kundinnen. Ich lerne, professionell zu kommunizieren, die eigene Firma gut zu vertreten und wichtige Faktoren für eine gute Zusammenarbeit kennen. Das bedeutet zum Beispiel, Informationen im Team klar zu vermitteln, Anforderungen abzuholen und in Projekten strukturiert zu kommunizieren. Weil ich als Lernender früh bei echten Projekten mitwirke, entwickle ich ein gutes Gespür dafür, was Kundinnen wirklich wichtig ist.</p>
<h3>Wie ich KI konkret nutze</h3>
<p>KI wird besonders hilfreich, wenn ich viel Kontext gebe. Dann wird aus einem allgemeinen Tool ein wertvoller Sparringspartner. KI unterstützt mich vor allem, wenn ich ein klares Ziel habe und schnell einen guten ersten Entwurf brauche. Ich nutze sie zum Beispiel für Brainstormings, um neue Begriffe zu verstehen, für Recherchen oder um Texte zu strukturieren.</p>
<ul>
<li><em>Fun Fact am Rande: Auch dieser Blogpost wurde teilweise mit KI strukturiert. Ich habe meine Gedanken gesammelt, den Kontext erklärt und mir dann helfen lassen, eine sinnvolle Struktur zu erstellen. So nutze ich KI im Alltag.</em></li>
</ul>
<p>Ein gutes Beispiel ist das Manual für das <a href="https://www.liip.ch/en/work/projects/liipgpt">LiipGPT</a> Backend, das ich geschrieben habe. Am Anfang hatte ich praktisch keine Erfahrung mit dem Schreiben von Manuals. Deshalb habe ich mir zuerst mithilfe von KI die Basics beigebracht. Danach habe ich der KI so viel Kontext wie möglich mitgegeben und Schritt für Schritt mit ihr einen Entwurf entwickelt. Am Ende entstand ein Handbuch, das intern oft genutzt  und für Kund*innen individuell ausgebaut wird. Für mich war das ein Moment, in dem ich merkte, wie viel Mehrwert KI bringen kann, weil ich nicht nur schneller und ohne Erfahrung arbeiten konnte, sondern auch ein Ergebnis entstanden ist, das anderen im Alltag wirklich hilft.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/830971/grafik-2-de.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/830971/grafik-2-de.jpg 2x"></figure>
<aside>
<blockquote>
<h3>Meine Top 3 KI Tools für den Alltag im Digital Business</h3>
</blockquote>
<p>Ein kleiner Einblick in die Tools, die mir im Alltag am meisten helfen:</p>
<ul>
<li>
<p><strong>Claude</strong></p>
<p>Mein wichtigstes Tool für Brainstorming, Schreiben und Verstehen von neuen Themen.</p>
</li>
<li>
<p><strong>Cursor</strong></p>
<p>Hilft mir beim Coden, auch ohne tiefes Programmierwissen. Für ein Rendering Tool in Figma habe ich zuerst im Plan Mode den Kontext erklärt und dann Schritt für Schritt umgesetzt. Cursor hat mir dabei geholfen, die Idee wirklich zum Leben zu erwecken.</p>
</li>
<li>
<p><strong>NotebookLM</strong></p>
<p>Ich lade Dokumente oder Notizen hoch und bekomme daraus Zusammenfassungen, Fragen oder kompaktes Lernmaterial. Besonders nützlich für Prüfungen oder beim Einarbeiten in neue Themen.</p>
<blockquote>
</aside>
</blockquote>
</li>
</ul>
<p>Ich nutze diese Tools nicht unüberlegt. Ich teste sie, vergleiche sie und überlege genau, für welchen Anwendungsfall sie wirklich sinnvoll sind.</p>
<h3>KI ist mein bester Lernbuddy</h3>
<p>KI hat grosses Potenzial beim Lernen. Sie vereinfacht Inhalte, liefert Beispiele und passt sich an mein Niveau an. Das schafft kein Lehrbuch. Der Einstieg ins Thema gelingt so schneller. Als Lernender stelle ich der KI Fragen und Rückfragen, die ich mir im Unterricht nicht zu stellen trauen würde. </p>
<p>Gleichzeitig gilt jedoch: <strong>KI darf das eigene Denken nie ersetzen. Wer nicht versteht, wie KI funktioniert und wie sie genutzt werden kann, lernt am Ende wenig.</strong></p>
<p>Für mich gehören Offenheit und kritisches Hinterfragen zum Umgang mit neuen Tools dazu. KI kann Lernende stärken, aber nur, wenn sie bewusst als Werkzeug genutzt wird. Darum ist es wichtig, dass sich Lernende schon in der Ausbildung mit KI beschäftigen. Nicht erst später, wenn alle anderen längst routinierte Nutzer*innen sind.</p>
<h3>Wie nutzt du KI?</h3>
<p>Vielleicht lohnt es sich, nach diesem Text kurz innezuhalten und über den eigenen Umgang mit KI nachzudenken. Wie nutzt du KI heute wirklich in deinem Alltag? Welchen konkreten Mehrwert bringt sie dir dabei? Ist sie für dich nur ein Werkzeug, das du ab und zu ausprobierst? Oder setzt du sie bewusst ein, um besser, schneller oder strukturierter zu arbeiten?</p>
<p>Bei Liip erlebe ich direkt, wie eine Organisation KI nicht nur nutzt, sondern aktiv mitgestaltet:</p>
<ul>
<li>Regelmässige Wissensaustausche und Liip Talks zu KI, von neuen Modellen bis zu ethischen Fragen.</li>
<li>KI Trainings für alle Mitarbeitenden. Intern bieten wir Workshops und spezielle Module an, damit alle sicher im Umgang mit KI bleiben.</li>
<li>Entwicklung und Weiterentwicklung eigener KI Tools wie <a href="https://www.liip.ch/en/work/projects/liipgpt">LiipGPT</a>, das bereits bei Kund*innen aus dem Gesundheits-, Rechts- und öffentlichen Bereich im Einsatz ist.</li>
<li><a href="https://www.liip.ch/de/blog/ai-fuer-menschen-und-den-planeten-gestalten">AI Sustainability Guidelines</a>, ein interner Rahmen, der sicherstellt, dass KI Projekte ethisch und nachhaltig umgesetzt werden.</li>
</ul>
<p>Das zeigt mir, wie eine Organisation aussehen kann, die KI nicht blind einsetzt, sondern Verantwortung dafür übernimmt.</p>
<p>Wie nutzen Mitarbeitende in deinem Unternehmen KI? Gibt es klare Regeln oder Angebote, um KI sinnvoll einzusetzen? Wo könnte KI dich in deiner Rolle konkret unterstützen, wenn du sie gezielter anwendest?</p>
<p>KI ist kein festes Konzept, das für alle gleich funktioniert. Aber wer sie früh nutzt, merkt schnell: <strong>Die Frage ist nicht, ob man noch eine Lehre braucht, sondern wie viel mehr man aus ihr herausholt, wenn man KI hat.</strong></p>]]></description>
    </item>
        <item>
      <title>BOSW 26: der R&#252;ckblick</title>
      <link>https://www.liip.ch/de/blog/bosw-26-der-rueckblick</link>
      <guid>https://www.liip.ch/de/blog/bosw-26-der-rueckblick</guid>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Wie jedes Jahr versammelte The Hall in Dübendorf ein Who’s Who der Schweizer Webbranche, um die besten Projekte des vergangenen Jahres in verschiedenen Kategorien auszuzeichnen. Auch wir haben wieder Projekte eingereicht,  dieses Jahr drei, und alle haben es auf die Shortlist geschafft: die digitalen Plattformen für das Museum für Gestaltung Zürich, das Migros Karriereportal und die neue Website des Kantons Solothurn. Die Preisverleihung ermöglichte den Projektteams, nochmals zusammenzukommen. Vor allem aber bot sich die Gelegenheit, die Spannung mitzuerleben, welche Projekte mit Gold-, Silber- oder Bronze-Auszeichnungen prämiert würden.</p>
<h2>Museum für Gestaltung: ein Meisterwerk in den Bereichen Public Value und User Experience</h2>
<p>Die neue Website des Museums für Gestaltung Zürich dient als zentrale Drehscheibe für die digitale Kommunikation des Museums und ermöglicht Besucher*innen, mit dem Museum in Verbindung zu treten. In Co-Creation haben wir eine Lösung entwickelt, die es dem Design ermöglicht, für sich selbst zu sprechen und damit einen grösseren Nutzen für die Gesellschaft zu erzielen. Die BOSW-Jury hat dies anerkannt und die neue Website mit Silber in den Kategorien “User Experience” und “Public Value” ausgezeichnet. </p>
<p>Mehr zum <a href="https://www.liip.ch/en/work/projects/museum-fur-gestaltung-zurich">ausgezeichneten Projekt</a> </p>
<p>Wie Clelia Kanai, Head of Marketing &amp; Communication, betont:<br />
«Gestaltung bedeutet für uns Klarheit und Verantwortung, auch im Digitalen. Mit Liip hatten wir eine Partnerin, die diesen Anspruch geteilt und mitgetragen hat, von der ersten Konzeptidee bis zum letzten Accessibility-Check. Dass daraus ein Projekt entstanden ist, das die BOSW-Jury mit Silber in den Kategorien User Experience und Public Value auszeichnet, ist für uns Bestätigung und schöne Anerkennung zugleich.»</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/e48782/bosw2026teampic.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/e48782/bosw2026teampic.jpg 2x"></figure>
<h2>so.ch: Transparenz, Accessibility und Benutzerfreundlichkeit stärken das Vertrauen der Öffentlichkeit</h2>
<p>Wir haben für den Kanton Solothurn eine neue Website entwickelt: so.ch. Sie schafft echten Public Value, indem sie kantonale Dienstleistungen transparent, barrierefrei und verständlich macht und so das Vertrauen der Öffentlichkeit, der Behörden und der Wirtschaft in öffentliche Dienstleistungen stärkt.</p>
<p>Wie uns bs.ch bereits letztes Jahr gezeigt hat, ist eine nutzer<em>innenzentrierte Website entscheidend, um den Alltag der Bürger/</em>innen zu verbessern, die immer häufiger ihre Informationen und Dokumente online finden müssen. Die Jury hat die Qualität der User Experience anerkannt und uns in dieser wichtigen Kategorie mit Bronze ausgezeichnet.</p>
<p>Mehr zum <a href="https://www.liip.ch/de/blog/so-ch-kantonale-services-vereinfacht-fuer-alle">ausgezeichneten Projekt</a></p>
<p>Auch wenn wir nicht ganz so viele Preise gewonnen haben, wie wir uns gewünscht hätten (und natürlich auch verdient hätten :), war es spannend, den Puls der Branche zu spüren. Wir gratulieren «Swissgrid 24/7» herzlich zum Titel «Master of Swiss Web 26». Bis nächstes Jahr!</p>]]></description>
    </item>
        <item>
      <title>Zurich Climate Week</title>
      <link>https://www.liip.ch/de/blog/zurich-climate-week</link>
      <guid>https://www.liip.ch/de/blog/zurich-climate-week</guid>
      <pubDate>Thu, 16 Apr 2026 00:00:00 +0200</pubDate>
      <description><![CDATA[<p>Die erste <a href="https://www.climateweekzurich.org/" rel="noreferrer" target="_blank">Zurich Climate Week</a> ist da (4. – 9. Mai 2026) und kommt irgendwie gerade zum richtigen Zeitpunkt. In der aktuellen geopolitischen Lage hätte das Vorhaben ein Flop werden können. Das Gegenteil ist der Fall: Das Vorhaben wurde extrem gut angenommen. Echo und Teilhabe sind gross – und in einigen anderen Städten beneidet man uns … und kommt einfach nach Zürich, um mit dabei zu sein. </p>
<p>Im Kontext jüngster politischer Entwicklungen wurde hier und dort in Nachhaltigkeitsfragen (immerhin) ein «Do-Talk-Gap» attestiert. Die Zurich Climate Week setzt hier an: Sich für den Klimanotstand einsetzen <strong>und</strong> darüber sprechen. </p>
<p>Und genau das braucht es jetzt. Denn nachhaltige Transformation passiert nicht im Stillen. Sie entsteht dort, wo unterschiedliche Perspektiven und Efforts zusammenkommen: Wirtschaft, Politik, Wissenschaft und Zivilgesellschaft. Wo Wissen geteilt wird. Wo Lösungen gemeinsam entwickelt und skaliert werden. </p>
<h1>Warum wir uns engagieren</h1>
<p>Bei Liip haben wir uns aus mehreren Gründen dafür entschieden, uns am Programm der Zurich Climate Week zu beteiligen: </p>
<ul>
<li>Um das Vorhaben zu stützen, indem wir das Programm mittragen.</li>
<li>Um unser Commitment für Nachhaltigkeit über die Climate Week hinaus zu stärken.</li>
<li>Und nicht zuletzt: um unsere Erfahrungen zu teilen, von anderen zu lernen und unser Netzwerk mit Gleichgesinnten zu vergrössern.</li>
</ul>
<p>Unser Beitrag zur Climate Week steht – genauso wie die beiden Themenbereiche, die wir mit unseren Events adressieren – im Zeichen: <strong>Verantwortung übernehmen</strong>. </p>
<h1>Unser Beitrag</h1>
<p>Liip ist mit zwei Formaten im Programm vertreten – beide mit einem klaren Fokus auf Austausch, Praxisnähe und konkrete Umsetzbarkeit. </p>
<h2>Hacking for Sustainable AI</h2>
<p><a href="https://climateweekzurich.glueup.com/event/hacking-for-sustainable-ai-176395/" rel="noreferrer" target="_blank">Weitere Infos &amp; Anmeldung</a> </p>
<p>Künstliche Intelligenz ist längst Teil unseres Alltags. Sie scheint für viele Probleme Lösungen zu bieten – und oft ist sie der erste Anlaufpunkt, wenn wir nicht weiterwissen. Gleichzeitig stellen ökologische und gesellschaftliche Auswirkungen weiterhin ungelöste Herausforderungen dar. </p>
<p>Wann schafft der Einsatz von KI tatsächlich einen Mehrwert? Und wie können wir sie so nutzen, dass sie zu einer nachhaltigeren Zukunft beiträgt? </p>
<p>Gemeinsam mit <a href="http://opendata.ch" rel="noreferrer" target="_blank">opendata.ch</a> bringen wir diese Fragen in einem Mini-Hackathon auf den Tisch. Entwickler:innen, Designer:innen, Nachhaltigkeitsexpert:innen, Unternehmen und weitere Interessierte sind eingeladen, gemeinsam neue Ideen, Prototypen und Perspektiven zu entwickeln. </p>
<p>👉 Ziel: Konkrete Ansätze entwickeln, wie KI sinnvoll, verantwortungsvoll und mit echtem Mehrwert eingesetzt werden kann. </p>
<h2>Sustainability Reporting for SMEs: Real Cases, Practical Steps</h2>
<p><a href="https://climateweekzurich.glueup.com/event/sustainability-reporting-for-smes-real-cases-practical-steps-176404/" rel="noreferrer" target="_blank">Mehr Infos &amp; Anmeldung</a> </p>
<p>KMU spielen eine zentrale Rolle in der nachhaltigen Transformation. Und doch stehen viele am gleichen Punkt: Wo anfangen? Was ist wirklich relevant? Und wie aufwändig ist das Ganze? </p>
<p>In dieser Session teilen 4 KMU ihre Erfahrungen mit freiwilligem Nachhaltigkeitsreporting. Das Format ist – als Roundtable – interaktiv: Teilnehmende können Fragen stellen, eigene Erfahrungen einbringen und zusammen diskutieren, wie Hürden überwunden werden können. </p>
<p>👉 Ziel: Hemmschwellen abbauen und zeigen, dass der Einstieg machbar ist. Die Community an engagierten KMU vergrössern. </p>
<h1>Vom Reden und Handeln – gemeinsam</h1>
<p>Die Zurich Climate Week steht für eine Haltung, die wir teilen: Dringlichkeit mit Optimismus verbinden. Nicht nur über Probleme sprechen, sondern konkrete Lösungen vorantreiben. Gemeinsam Verantwortung tragen – und dabei Wirkung entfalten. </p>
<p>Gerade in einem Umfeld, in dem Unsicherheiten zunehmen und Prioritäten sich verschieben, ist es umso wichtiger, dran zu bleiben. Nachhaltigkeit ist kein kurzfristiger Trend – sondern ein langfristiges Commitment. Und gleichzeitig eine Chance: für Innovation, für neue Geschäftsmodelle, für echte Differenzierung – für neue Lebensqualität. </p>
<p>Was wir dafür brauchen, sind mehr Räume für Austausch. Mehr Transparenz. Und mehr Mut, auch Unfertiges zu teilen. </p>
<p>Die Zurich Climate Week schafft genau solche Räume. Wir freuen uns, ein Teil davon zu sein.</p>]]></description>
    </item>
        <item>
      <title>Iframes are still odd</title>
      <link>https://www.liip.ch/de/blog/iframes-are-still-odd</link>
      <guid>https://www.liip.ch/de/blog/iframes-are-still-odd</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 +0100</pubDate>
      <description><![CDATA[<h2>The Challenge</h2>
<p>The application does one - rather complicated - task, with lots of business logic. There was no way we could rewrite it to include it directly into the website code. And because the application comes with its own Javascript and CSS, we decided to use an iframe to embed the application with clean isolation.</p>
<p>The company maintaining that application provided us with a version - running as a Docker container - where they had stripped all extra elements like the navigation, so that it would visually fit within the website. There was however no way for us to customise anything within the application.</p>
<h2>iframe security</h2>
<p>The promise of an iframe is to keep a clean security boundary between embedding page and embedded content. This means that it is by design not possible to call Javascript across the boundary. </p>
<p>Because injecting iframes could potentially trick a user into submitting data to an attacker (clickjacking), as the iframe may be from a different origin than the main page. Thus, to even render the iframe, the browser checks the Content-Security-Policy (CSP) HTTP header. That header has a field frame-src to control what may be included as an iframe. With this, I allowed the domain of the application to be included in iframes.</p>
<pre><code>Content-Security-Policy: frame-src https://my-embed.com;</code></pre>
<p>But not only does the including page need to allow an iframe. The page to be embedded also needs to allow being included with the frame-ancestors attribute of the CSP header. As we run the application Docker image under our control, I was able to add that header in the proxy that runs before the Docker image:</p>
<pre><code>Content-Security-Policy: frame-ancestors https://my-website.com;</code></pre>
<p>Several things to note:</p>
<ul>
<li>If you have other CSP rules, merge them with the rules, nginx will overwrite the header and not add to it</li>
<li>Both options also support "self" to allow embedding resp. being embedded with the same webserver</li>
<li>Prior to the CSP becoming a standard, there was an unofficial header <code>X-Frame-Options</code>, which is still supported by browsers</li>
<li><code>Content-Security-Policy</code> must be an actual HTTP header, <code>&lt;meta http-equiv=”...”&gt;</code> is ignored for <code>Content-Security-Policy</code> (and also ignored for <code>X-Frame-Options</code>).</li>
</ul>
<h2>Size of the iframe element</h2>
<p>Now we get to the weird parts. To prevent multiple scrollbars, we need the iframe element to be exactly big enough for the embedded page. If it is too small, there is an additional scrollbar (or hidden content). If it is too large, there is odd whitespace.</p>
<p>The size of the element needs to be set on the iframe, owned by the parent. The dimensions of the content are however only known by the embedded application. HTML / CSS do not provide any means to let the parent page declare that it wants the iframe to have the “necessary size”. </p>
<p>We ended up with a really convoluted way, which seems the only way to achieve this: sending messages from the child page to the parent. This problem spawned dedicated javascript libraries like <a href="https://github.com/davidjbradshaw/iframe-resizer">iframe-resizer</a>. We ended up reimplementing the logic in the React application, as it was so small that a dedicated library felt like overkill. Following the tutorial at <a href="https://github.com/craigfrancis/iframe-height/">iframe-height</a> (which also has some interesting background on the discussion about iframes in the Whatwg), we came up with this code for the containing website:</p>
<pre><code class="language-js">// register an event listener for messages
window.addEventListener('message', receiveMessage, false);

// handle a message
function receiveMessage(event) {
    const origin = event.origin || event.originalEvent.origin;
    // we configure the expected domain to allow for this additional sanity check
    if (expectedDomain !== origin) {
      return;
    }
    if (!event.data.request || 'iframeResize' !== event.data.request) {
      return;
    }
    // the id is known in the js class. we need to find the element that needs to be resized
    const iframe = document.getElementById(`iframe-${id}`);
    if (iframe) {
      // pad the height a bit to avoid unnecessary tiny scrolling
      iframe.style.height = (event.data.height + 20) + 'px';
      // width could be handled the same way if necessary - in our case the width is fix
    }
}</code></pre>
<p>Now we need to make the embedded content send a message with its height. The Javascript for that is a bit verbose to allow for different browsers, but not complicated either:</p>
<pre><code class="language-js">(
    function(document, window) {
      if (undefined === parent || !document.addEventListener) {
        return;
      }
      function init() {
        let owner = null;
        const width = Math.max(document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);
        const height = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);
        if (parent.postMessage) {
          owner = parent;
        } else if (parent.contentWindow &amp;&amp; parent.contentWindow.postMessage) {
          owner = parent.contentWindow;
        } else {
          return;
        }
        owner.postMessage({
          'request' : 'iframeResize',
          'width' : width,
          'height' : height
        }, '*');
      }

      if (document.readyState !== 'loading') {
        window.setTimeout(init);
      } else {
        document.addEventListener('DOMContentLoaded', init);
      }
      // this is needed to also adjust the iframe if something (e.g. the Javascript of the application) changes the size of the iframe without an actual page reload.
      const observer = new ResizeObserver(init);
      observer.observe(document.body);
    }
  )(document, window);"</code></pre>
<h3>iframes with same origin</h3>
<p>If the iframe comes from the same origin (= domain) as the parent page, Javascript can cross the boundary. From parent to child, there is a <code>contentWindow</code> property on the <code>iframe</code> element. From child to parent, there is <code>window.parent</code>. With same origin, those elements expose all things the window usually has. For different origins, they only expose the function <code>postMessage</code> for the secure separation.</p>
<h2>Injecting content with Nginx</h2>
<p>Remember how I said we can’t modify the application? That still holds true. If we would have loaded both applications from the same domain, we could have had the parent page add a listener inside the iframe to directly update dimensions as needed. But the application contained absolute paths for its assets, so providing it from a subfolder of the same domain would have been tricky and we had to run it on a separate domain. </p>
<p>I ended up injecting the above snippet of Javascript in the Nginx proxy that sits in front of the Docker container:</p>
<pre><code>proxy_set_header Accept-Encoding ""; # make sure we get plain response for substitution to work
...
sub_filter_last_modified on;
sub_filter "&lt;/body&gt;" "&lt;script language='javascript'&gt;${script}&lt;/script&gt;&lt;/body&gt;";
sub_filter_once on;
...
proxy_pass https://my-embed.com$request_uri;</code></pre>
<p>Now the embedded iframe communicates its size to the containing page, which adjusts the iframe size accordingly.</p>
<p>(Note that Nginx does not execute these statements in order. The sub_filter instructions apply to the response, wihle proxy_set_header and proxy_pass apply to the request.)</p>
<h2>Alternatives</h2>
<p>Web Components are a more lightweight solution to combine separate sources into one website. If what you need to integrate is just an element and not a whole application, they might be a better fit. My collegue Falk wrote about <a href="https://www.liip.ch/en/blog/web-components-the-good-the-bad-and-the-ugly">Web Components</a> last week.</p>
<hr />
<h2>Bonus: Access control for the iframe content</h2>
<p>Because the application is not under our control, we need to manage access to it. We told the supplier of the application to remove access control and simply allow items to be created and edited by ID. Of course, this means that the application must never be directly exposed to the internet, but only reachable through the proxy.</p>
<p>On the embedding side, we track which user is allowed what ids, and have Nginx do a pre-flight check against the website to get the access decision:</p>
<pre><code># at the beginning of the location for the main request to the embeded application
auth_request /auth;

location /auth {
    # preflight authorization request with symfony
    fastcgi_pass phpfcgi;
    include /usr/local/openresty/nginx/conf/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /app/public/index.php;
    # forward the original request URI to allow our main application to verify access to the specific resource
    fastcgi_param REQUEST_URI /embed-check$request_uri;
    # body is not forwarded. we have to remove content length separately, otherwise PHP-FPM will wait for the body until the auth request times out.
    fastcgi_pass_request_body off;
    fastcgi_param CONTENT_LENGTH "";
    fastcgi_param CONTENT_TYPE "";
    internal;
}</code></pre>
<p>If the call at <code>/embed-check/...</code> returns a 2xx status, Nginx continues with the request, otherwise it returns the response with the status code to the client, allowing for example to redirect to the login page. In my case, i return an empty response with status 204 if the user is allowed to access the specific resource.</p>
<p>On Symfony side, I use Symfony security to make sure the user is logged in. And then parse the path to know which item in the application the request wants to access, and check if the user has access. This leaks knowledge about the URL design of the embedded application, which is not avoidable for granular access control.</p>]]></description>
    </item>
        <item>
      <title>Preventing Context Pollution for AI Agents</title>
      <link>https://www.liip.ch/de/blog/preventing-context-pollution-for-ai-agents</link>
      <guid>https://www.liip.ch/de/blog/preventing-context-pollution-for-ai-agents</guid>
      <pubDate>Wed, 18 Mar 2026 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>Context pollution happens when the context window fills up with information that is irrelevant to the current task. The more an agent has to juggle, the more likely it loses track of what it was actually doing.</p>
<p>Here are practical techniques to prevent it.</p>
<h2>Session Hygiene</h2>
<p>Start a fresh session for each task. This is the simplest technique and the easiest to get right. If earlier research is needed, write it into a temporary handoff file and let a new session pick up from there.</p>
<h2>Streamline Tool Calling</h2>
<p>Every tool call adds tokens to the context. Poorly built tools add a lot of them. To keep the context lean:</p>
<ul>
<li>Choose tools and MCPs that are well built and optimize token usage</li>
<li>Make sure via prompting that the right tools are used from the start</li>
</ul>
<p>A single bloated tool response can waste more context than an entire conversation turn.</p>
<h2>Subagents</h2>
<p>Agents can spawn other agents that run in their own context. This isolates work and keeps the parent context clean. It helps most when building large features where individual parts are independent.</p>
<p>The easiest way to use subagents is to prompt something like:</p>
<pre><code>Split the current plan into tasks, use a subagent for each task.</code></pre>
<h2>Persistent Tasks</h2>
<p>I built an MCP for Claude Code called <code>deliverables-mcp</code> that lets an agent create persistent tasks per codebase. Tasks are stored in <code>.claude/deliverables.jsonl</code> and persist across sessions.</p>
<p>This allows:</p>
<ul>
<li>Starting a new session before implementing each task</li>
<li>Running subagents in parallel based on tasks dependencies</li>
<li>Restarting a failed task in a clean session</li>
</ul>
<p>The tool replaces Claude Code's internal tasks and is deliberately called "deliverables" for two reasons:</p>
<ol>
<li>To avoid confusing the agent with two tools both called "tasks"</li>
<li>Deliverables are typically larger than just a task, which is a sweet spot for AI agents. Not so small that handoff cost dominates, but small enough that context problems are rare.</li>
</ol>
<p>You can check out <code>deliverables-mcp</code> on <a href="https://github.com/FalkZ/deliverables-mcp">GitHub</a>.</p>]]></description>
    </item>
        <item>
      <title>Der ConfIAnce-Chatbot, ein Jahr sp&#228;ter</title>
      <link>https://www.liip.ch/de/blog/der-confiance-chatbot-ein-jahr-spaeter</link>
      <guid>https://www.liip.ch/de/blog/der-confiance-chatbot-ein-jahr-spaeter</guid>
      <pubDate>Tue, 17 Mar 2026 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>Vor etwas weniger als einem Jahr haben wir den ConfIAnce-Chatbot vorgestellt. Im Auftrag der Genfer Universitätskliniken (HUG) haben wir diesen Chatbot entwickelt, um einen einfachen und interaktiven Zugang zu medizinischen Informationen über häufige chronische Krankheiten zu ermöglichen. Die Inhalte werden von der medizinischen Institution selbst erstellt und validiert.</p>
<p>Ein Artikel der Initiator*innen dieses Projekts, veröffentlicht in der neuesten Ausgabe der Revue Médicale Suisse, zieht nun eine erste Bilanz ein Jahr nach der öffentlichen Lancierung.</p>
<figure><img alt="" src="https://liip.rokka.io/www_inarticle_5/9661ee/rms-confiance.jpg" srcset="https://liip.rokka.io/www_inarticle_5/o-dpr-2/9661ee/rms-confiance.jpg 2x"></figure>
<h2>Ein offizielles Angebot statt fehlerhafter Antworten online</h2>
<p>Die medizinische Grundversorgung, ein zentraler Pfeiler eines funktionierenden Gesundheitssystems, steht zunehmend unter Druck, selbst in Städten. Wenn Patient*innen ihre Hausärzt*innen nicht schnell erreichen können, suchen sie oft im Internet nach Antworten. Die Informationen, die sie dort finden, sind jedoch häufig ungenau oder sogar potenziell gefährlich.</p>
<p>In diesem Kontext kann eine gut konzipierte KI-Lösung helfen, <strong>die richtige Information zur richtigen Zeit</strong> bereitzustellen.</p>
<p>Deshalb haben wir die HUG bei der Entwicklung eines RAG-basierten Chatbots (Retrieval Augmented Generation) unterstützt. ConfIAnce ist nicht der erste Chatbot für Patient*innen. Er unterscheidet sich jedoch durch seine institutionelle Wurzeln, die Nutzung lokal validierter medizinischer Inhalte sowie durch Kontrollmechanismen, die die Zuverlässigkeit der Antworten sicherstellen.</p>
<p>Um Sicherheit zu gewährleisten, integriert das System mehrere Kontrollmechanismen, darunter <strong>Matching, Groundedness, Harmfulness, automatisierte Tests und semantisches Routing.</strong></p>
<h2>Qualitätssicherung durch Kontrolle des Systems</h2>
<p>Eine zentrale Herausforderung besteht darin, die Kontrolle über das System zu behalten. Dafür braucht es geeignete Monitoring-Funktionen.</p>
<p>Automatisierte Tests prüfen sämtliche Antworten des Chatbots auf ihre faktische Übereinstimmung mit der Wissensbasis.</p>
<p>Zusätzlich sorgt ein von Administrator*innen anpassbares Routing dafür, dass Fragen gefiltert und bei Bedarf unter menschlicher Aufsicht weitergeleitet werden. Sie können den Chatbot zudem sofort offline nehmen, falls ein Fehlverhalten vermutet wird.</p>
<p>Themen, über die häufig gefragt wird, aber in den Ausgangsdokumenten noch wenig behandelt werden, werden identifiziert und weiter ausgebaut. So wird die Wissensbasis im Rahmen eines <strong>kontinuierlichen Verbesserungsprozesses erweitert</strong>.</p>
<h2>Selbst das beste Tool bringt nur etwas, wenn es genutzt wird</h2>
<p>Damit Patient*innen den Chatbot tatsächlich verwenden, haben die HUG eine öffentliche Informationskampagne gestartet. Ziel war es, das Tool bekannt zu machen und gleichzeitig realistische Erwartungen zu setzen.</p>
<p>ConfIAnce ist <strong>kein medizinisches Gerät und ersetzt keinen Arztbesuch</strong>. Vielmehr ist er ein Informationsangebot, das Fragen zu den häufigsten chronischen Erkrankungen bei Erwachsenen beantwortet.</p>
<p>Im Februar 2025 ging ConfIAnce in der Beta-Version online. Zwischen Anfang Februar und Ende Oktober 2025 haben 3’823 Nutzer*innen mit dem Chatbot interagiert. Daraus entstanden 5’969 Gespräche und <strong>11’781 Fragen</strong>, im Durchschnitt etwa zwei Fragen pro Gespräch.</p>
<p>Die direkt im Chatbot abgegebenen Rückmeldungen sind zu <strong>75 % positiv</strong>.</p>
<h2>Hohe Akzeptanz für einen etwas anderen Chatbot</h2>
<p>Chatbots im Gesundheitsbereich werden von Patient*innen meist gut angenommen, vor allem wegen ihrer ständigen Verfügbarkeit und der einfachen Nutzung. Studien zeigen jedoch auch wiederkehrende Probleme: eine uneinheitliche Qualität der Antworten sowie mangelnde Transparenz bei den verwendeten Quellen.</p>
<p>Genau hier unterscheidet sich ConfIAnce von vielen anderen medizinischen Chatbots.<br />
Der Chatbot wurde entwickelt, um <strong>die Beziehung zwischen Patient<em>innen und Ärzt\</em>innen zu unterstützen, nicht zu ersetzen</strong>. ConfIAnce entlastet Ärzt*innen in der Grundversorgung und schafft ihnen mehr Zeit für die menschliche Seite ihres Berufs.</p>
<p>Die Autor<em>innen des Artikels in der Revue Médicale Suisse betonen zudem, dass der Chatbot, der im spezifischen Kontext der HUG und ihrer Dokumente entwickelt wurde, auch in anderen institutionellen Umgebungen eingesetzt werden kann. Damit ein solches Projekt erfolgreich ist, braucht es zunächst hochwertige Daten, wie sie hier zur Verfügung standen. Darüber hinaus ermöglichen Kontrollmechanismen, automatisierte Tests und Nutzer\</em>innen-Feedback eine kontinuierliche Verbesserung – und sorgen für Sicherheit und Relevanz, die Vertrauen schaffen.</p>]]></description>
    </item>
        <item>
      <title>LiipGPT barrierefrei machen: Unsere Reise zur WCAG-AA-Konformit&#228;t</title>
      <link>https://www.liip.ch/de/blog/liipgpt-barrierefrei-gestalten</link>
      <guid>https://www.liip.ch/de/blog/liipgpt-barrierefrei-gestalten</guid>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0100</pubDate>
      <description><![CDATA[<p>Nachdem wir uns zuerst auf die Themenbasiertheit unseres Chatbots <a href="https://www.liipgpt.ch/" rel="noreferrer" target="_blank">LiipGPT</a> konzentriert hatten (zuletzt präsentiert beim <a href="https://zuericitygpt.ch/" rel="noreferrer" target="_blank">Z&uuml;riCityGPT Relaunch</a>), richteten wir unsere Aufmerksamkeit auf Barrierefreiheit mit dem Ziel, die WCAG-AA-Konformität zu erreichen. Wie bei vielen Funktionen haben wir zuerst untersucht, wie Branchenführende wie ChatGPT, Perplexity und Claude mit Barrierefreiheit umgehen. Obwohl wir überall Verbesserungspotenzial festgestellt haben, inspirierte uns das, darüber nachzudenken, wie wir es besser machen können.</p>
<p>Unsere Reise zur Barrierefreiheit folgte vier Hauptschritten: automatische Scans und Quick-Fixes, Tastaturnavigation, Optimierung für Mobile-Zoom und anschliessend für den Screen-Reader.</p>
<h2>Automatische Scans und Quick-Fixes</h2>
<p>Wir begannen mit automatisierten Accessibility-Tests mithilfe von Browser-Erweiterungen wie <a href="https://chromewebstore.google.com/detail/ibm-equal-access-accessib/lkcagbfjnkomcinoddgooolagloogehp" rel="noreferrer" target="_blank">IBM Equal Access Accessibility Checker</a> und <a href="https://www.deque.com/axe/devtools/extension" rel="noreferrer" target="_blank">axe DevTools</a>. Diese Tools halfen uns, häufige Probleme zu identifizieren: fehlende Labels, unzureichender Farbkontrast, unsauberes semantisches HTML und fehlende ARIA-Attribute. Obwohl automatisierte Scans nur etwa 40% der Accessibility-Probleme erkennen, boten sie eine solide Grundlage für unsere Arbeit.</p>
<h2>Tastaturnavigation</h2>
<p>Eine korrekte Tastaturnavigation ist grundlegend für die Barrierefreiheit. Sicherzustellen, dass die grundlegende Tab-Navigation in der gesamten App funktioniert, ist relativ einfach. Komplexere Komponenten wie <a href="https://www.w3.org/WAI/ARIA/apg/patterns/tabs/examples/tabs-automatic/" rel="noreferrer" target="_blank">Tabs</a>, <a href="https://www.w3.org/WAI/ARIA/apg/patterns/menubar/" rel="noreferrer" target="_blank">Men&uuml;s</a> und <a href="https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/" rel="noreferrer" target="_blank">Modals</a> erfordern jedoch erweiterte Tastaturinteraktionen: Pfeiltasten, Escape-Handling und Fokus-Management gemäss den offiziellen W3C-Richtlinien. Nutzer*innen, die auf Tastaturnavigation angewiesen sind, erwarten diese spezifischen Muster. Wenn davon abgewichen wird, führt das zu Verwirrung und Frustration. Anstatt diese Muster von Grund auf neu zu implementieren, nutzten wir <a href="https://bits-ui.com/" rel="noreferrer" target="_blank">Bits UI</a>, eine Headless-UI-Bibliothek, die diese Accessibility-Richtlinien korrekt umsetzt.</p>
<p>Über einzelne Komponenten hinaus implementierten wir Fokus-Loops und Fokus-Wiederherstellung auf Anwendungsebene, damit Nutzer*innen beim Wechsel zwischen verschiedenen Bereichen der Chat-Oberfläche stets orientiert bleiben.</p>
<h2>Optimierung für Mobile-Zoom</h2>
<p>Während User-Tests für <a href="https://meinplatz.ch/" rel="noreferrer" target="_blank">meinplatz.ch</a> mit Nutzer*innen mit Behinderungen beobachteten wir etwas Auffälliges: Viele navigieren auf Websites auf mobilen Geräten mit 200% oder mehr Zoom und halten ihre Geräte nur etwa 10 cm vor die Augen. Diese Erkenntnis zeigte eine kritische Lücke in den meisten Chatbot-Implementierungen auf.</p>
<p>Die meisten Chatbots verwenden Elemente mit fixer Position: ein Chat-Input am unteren Rand und häufig eine Kopfzeile am oberen Rand. Wenn Nutzer*innen stark hineinzoomen, können fixierte Elemente den gesamten Viewport einnehmen und die Oberfläche unbenutzbar machen. Leider ist es in Browsern nicht möglich, das Zoom-Level zuverlässig zu erkennen. Unsere Lösung: Wir verwenden den Intersection Observer, um zu erkennen, wenn Header oder Footer mehr Platz einnehmen als erwartet. In diesem Fall entfernen wir ihre fixe Positionierung dynamisch, um die Nutzbarkeit wiederherzustellen.</p>
<figure class="video"><video autoplay controls loop muted playsinline><source src="https://www.liip.ch/media/pages/blog/making-liipgpt-accessible/343fac4583-1769071651/chatgpt-zoom.mp4" type="video/mp4"></video><figcaption>Elemente mit fester Position verursachen Probleme in vergr&ouml;sserten Ansichtsfenstern.</figcaption></figure>
<figure class="video"><video autoplay controls loop muted playsinline><source src="https://www.liip.ch/media/pages/blog/making-liipgpt-accessible/6900992c5e-1769071651/liipgpt-zoom.mp4" type="video/mp4"></video><figcaption>L&ouml;sung: Feststehende Elemente wieder auf statische Positionierung zur&uuml;cksetzen, sobald ein Zoom erkannt wird.</figcaption></figure>
<h2>Screen-Reader-Erfahrung</h2>
<p>Barrierefreiheit für Screen-Reader entsteht nicht automatisch, sie erfordert sorgfältiges Design. Wir konzentrierten uns darauf, klaren Kontext durch eine saubere Seitenstruktur (Landmarks und Überschriften) bereitzustellen. So verstehen Nutzer*innen jederzeit, wo sie sich befinden und was gerade passiert, und erhalten Shortcuts zu den wichtigsten Bereichen der App.</p>
<h4>Kontext bereitstellen</h4>
<p>Wir implementierten eine umfassende Outline-Struktur mit Landmarks für die Hauptnavigation, die Einstellungen und die Eingabebereiche. Jede Nachricht enthält korrekte Überschriften und Labels. Zusätzlich haben wir nach dem Chat-Input (am unteren Seitenrand) einen Skip-Link eingefügt, der Nutzer*innen hilft, schnell zum Seitenanfang zurückzukehren.</p>
<h4>Herausforderungen mit Web Components</h4>
<p>Die Arbeit mit Web Components brachte eigene Herausforderungen mit sich. VoiceOver reagiert besonders empfindlich darauf, wie Bibliotheken implementiert sind. Wir arbeiteten eng mit dem Bits-UI-Team zusammen (das sehr schnell auf Bug-Reports reagierte) und implementierten beispielsweise lokale Portals für Dropdown-Menüs, um Navigationsprobleme mit VoiceOver zu vermeiden.</p>
<h4>Umgang mit Ankündigungen</h4>
<p>Eine der schwierigsten Herausforderungen war das Management von VoiceOver-Ankündigungen, wenn mehrere Ereignisse gleichzeitig auftraten. Da das Queueing von Ankündigungen nicht zuverlässig funktioniert, haben wir Ereignisse sorgfältig sequenziert und zusammengehörige Ankündigungen zusammengeführt. Wenn Nutzer*innen zum Beispiel „Alle Optionen auswählen“ in einer Liste anklicken, würden normalerweise einzelne Ankündigungen für jede Option ausgelöst und sich gegenseitig überschreiben. Stattdessen brechen wir diese einzelnen Ankündigungen ab und ersetzen sie durch eine einzige klare Meldung, die alles zusammenfasst (alle Elemente ausgewählt oder abgewählt, auf die vordefinierte Auswahl zurückgesetzt usw.).</p>
<p>Da der Chat eine SPA ohne Seiten-Reloads ist, war es zudem wichtig, alle Änderungen anzukündigen, die nur visuell sichtbar sind, zum Beispiel: Wechsel zwischen Light- und Dark-Mode, Sprachwechsel usw.</p>
<h4>Chat-Flow für Screen Reader</h4>
<p>Wir haben die Chat-Erfahrung speziell für Screen-Reader-Nutzer*innen gestaltet:</p>
<ul>
<li>Das Eingabefeld enthält sowohl einen Placeholder als auch ein aria-label mit dem Seitentitel. Dadurch wird beim Laden der Seite Kontext bereitgestellt, da das Eingabefeld automatisch fokussiert wird und Nutzer*innen den initialen Seiteninhalt überspringen.</li>
<li>Wenn eine Antwort generiert wird, kündigen wir dies klar an und geben damit dasselbe Feedback wie bei einer visuellen Ladeanzeige.</li>
<li>Sobald eine Antwort bereit ist, wird sie ohne Markdown-Formatierung vorgelesen (kein Kursiv, keine Links usw.), um einen natürlichen Lesefluss zu gewährleisten.</li>
<li>Nach dem Vorlesen einer Antwort weisen wir darauf hin, dass Nutzer*innen direkt eine weitere Frage stellen oder zu den Optionen der letzten Nachricht navigieren können, um Feedback zu geben oder Referenzen anzusehen. Wir fügen diesen interaktiven Abschnitt der letzten Nachricht dynamisch zur Dokument-Outline hinzu und schaffen damit einen schnellen Navigations-Shortcut.</li>
<li>Der Chat-Verlauf ist als Artikel mit Labels strukturiert, sodass frühere Konversationen leicht navigierbar sind.</li>
</ul>
<figure class="video"><video autoplay controls loop muted playsinline><source src="https://www.liip.ch/media/pages/blog/making-liipgpt-accessible/912fd0d7cd-1769018708/screenreader.mp4" type="video/mp4"></video><figcaption>L&ouml;sung: Navigation im Chatbot mit dem Bildschirmleseprogramm VoiceOver auf macOS.</figcaption></figure>
<h2>Selbst ausprobieren</h2>
<p>Du kannst diese Verbesserungen mit <a href="https://www.bs.ch/alva" rel="noreferrer" target="_blank">Alva</a> erleben, dem Chatbot der Verwaltung Basel-Stadt. Versuche, mit <a href="https://www.google.com/search?q=how+to+navigate+a+website+with+voiceover" rel="noreferrer" target="_blank">VoiceOver (MacOS)</a> oder <a href="https://www.google.com/search?q=how+to+navigate+a+website+with+nva+screen+reader" rel="noreferrer" target="_blank">NVA (Windows)</a> zu navigieren, nur deine Tastatur zu verwenden oder auf einem mobilen Gerät stark hineinzuzoomen.</p>
<h2>Eine fortlaufende Reise</h2>
<p>Unser nächstes Ziel ist es, automatisierte Accessibility-Tests in unsere CI-Pipeline zu integrieren. Wie bereits erwähnt, erkennen automatisierte Scans jedoch nur rund 40 % der Accessibility-Probleme. Das bedeutet, dass wir weiterhin jede neue Funktion sorgfältig planen und manuell testen müssen. Nichts ersetzt menschliches Testen, wenn es um Barrierefreiheit geht. Automatisierte Tools können fehlende Labels oder Kontrastprobleme markieren, aber sie können nicht beurteilen, ob eine Oberfläche tatsächlich für jemanden nutzbar ist, der mit Screen-Reader oder Tastatur navigiert.</p>
<p>Barrierefreiheit ist eine fortlaufende Reise, kein Ziel. Wir setzen uns dafür ein, LiipGPT für alle nutzbar zu machen, und werden unseren Ansatz kontinuierlich auf Basis von Praxisfeedback weiterentwickeln.</p>
<h2>Brauchst du Unterstützung bei deiner Accessibility?</h2>
<p>Wir bieten Accessibility-Audits an, um Probleme in deinen Anwendungen zu identifizieren und zu beheben. Wenn du die Barrierefreiheit deines Produkts verbessern möchtest, <a href="https://www.liip.ch/en/contact">kontaktiere uns</a>, wir helfen gerne weiter.</p>]]></description>
    </item>
      </channel>
</rss>