KindChat is a native messenger application for iOS and Android in which AI, privacy, software quality and security were designed together from the outset. Each message is checked on the device against a defined civility standard before it is end-to-end encrypted, and checked again on the recipient’s device after decryption. The servers never see the message in plaintext.
The project also demonstrates how far GenAI-assisted software development can go when it is combined with clear architecture, automated quality assurance and human decision-making. 93 percent of all commits were created together with AI coding systems. At the same time, more than 36,000 automated test cases, over 61,000 CI runs, systematic security checks and testing on real devices safeguard the development process.
KindChat therefore also shows how companies can have a custom digital application with AI and GenAI components developed while building software quality into the product from the beginning.
3,419 commits · 1.47 million lines of code · 52% test code · 36,326 automated tests · more than 61,000 CI runs · 421 catalogued threats · 10 app languages
The starting point: a product idea with demanding constraints
The project began with a clear product idea: a messenger should support respectful communication while preserving the confidentiality of private conversations.
The central technical challenge was to combine moderation with end-to-end encryption. The check therefore had to take place where messages already exist in plaintext: on the end devices.
This led to the principle of “Civility by Construction”. The intended product behaviour was treated as part of the architecture from the outset.
This starting point is transferable to many business applications: an organisation has a specific use case while also facing requirements relating to privacy, security, performance, traceability or the responsible use of AI. These requirements need to be translated into architecture and development practices from the beginning.
From product idea to custom application
Key architectural decisions were made before the first screen was built: module boundaries, encryption, moderation logic and core quality principles were defined before the feature set was expanded step by step.
The technical foundation was followed by the iOS and Android apps, then voice and video calls, group functionality, media and further product areas. Later development phases focused on performance, technological sovereignty, security, privacy and production hardening.
Cross-cutting technical decisions are documented as Architecture Decision Records (ADRs). There are now 916 of these records, making it possible to understand why specific architecture, security and product decisions were made.
This documentation is particularly relevant in GenAI-assisted development: speed does not replace traceability. Decisions remain reviewable and can later be changed deliberately.
Using AI and GenAI where they create concrete value
KindChat combines several technical approaches.
On the device, the system uses an extensive weighted lexicon, pattern recognition and a custom multilingual AI model. A second stage is used only when the first stage is uncertain. The system therefore combines local processing, machine learning and an additional self-hosted model.
Development itself is also strongly AI-assisted. Several AI coding sessions work in parallel on clearly separated tasks. A coordinating session organises tasks, CI capacity and merge order and prepares open decisions for the human decision-maker.
GenAI is therefore used deliberately where automation creates speed and scalability. Architecture, quality criteria, sensitive product decisions and releases remain subject to structured control.
An architecture designed for change
KindChat was built as a modular monolith with clearly separated domain modules and replaceable interfaces.
This architecture proved valuable when one moderation component was changed: the second moderation stage could be moved from an external US cloud model to a self-hosted model in the EU without changing the messaging code itself.
This capability is particularly important for companies. AI and GenAI technologies evolve quickly. Models, providers, regulatory requirements and commercial conditions can all change.
A suitable architecture reduces dependency on individual models or providers and makes it possible to evolve or replace components deliberately.
Where can effort be reduced?
A major advantage comes from safeguarding quality during development rather than adding it afterwards.
Automated tests identify regressions before release. Clearly defined interfaces reduce the effort required to replace technical components. Documented architecture decisions make later changes easier. Security and privacy requirements are considered early and therefore need to be retrofitted into an existing architecture less often.
GenAI itself can also accelerate development work. The decisive factor is combining it with automated checks and engineering rules. The project also showed that more parallel AI sessions do not automatically create more speed: CI capacity and shared resources had to be coordinated deliberately.
The central lesson is therefore: efficiency comes from the interaction of GenAI, software architecture, automation and Quality Engineering.
Security and Privacy by Design
Security was likewise treated as a continuous engineering responsibility.
The STRIDE threat model contains 421 catalogued threats and seven attacker profiles. Security-relevant changes are assessed against risks in authentication, cryptography, moderation, permissions, billing, deletion and data export, among other areas.
The technical architecture combines, among other things:
- end-to-end encryption,
- data-minimising server communication,
- push notifications without message content,
- pseudonymised data processing where storage is required and authorised,
- clear role and permission concepts,
- auditability,
- adversarial security testing.
Privacy and security therefore become architectural decisions rather than downstream compliance tasks.
AI results need testing too
With AI and GenAI systems in particular, a plausible-looking result is not sufficient evidence of quality.
The project repeatedly showed that automated systems can produce convincing results even when a test or measurement does not technically verify what it appears to verify.
The project therefore follows principles such as:
- Each relevant error class is first captured by a reproducible test.
- Measurement series contain control cases that are expected to fail.
- A protective measure is considered proven only when its effect has been verified along the actual production path.
- The person or system that creates a change is not solely responsible for its independent verification.
This lesson transfers directly to GenAI applications: an AI function becomes dependable only when its actual effect is tested, rather than merely its configuration or expected behaviour.
Quality Engineering starts with development
One of the key differences from a quick AI prototype is the approach to quality assurance.
KindChat contains around 702,000 lines of production code and 765,000 lines of test code. There are 36,326 automated test cases in total. In the client and server areas, the amount of test code is even greater than the amount of production code.
The development infrastructure includes:
- 17 CI workflows,
- more than 61,000 CI runs,
- automated tests before changes are integrated,
- testing on real devices,
- defined quality gates,
- targeted adversarial checks in security-critical areas,
- at least 90 percent test coverage for the moderation component.
Software quality is therefore systematically safeguarded during development. It is part of the development architecture.
For clients, this means that a custom application can be checked systematically against functional, quality and security requirements while it is being built.
Human in the Loop: people decide where decisions carry weight
The development model clearly separates automatable work from human responsibility.
AI systems can develop, analyse, test and prepare solution options. A human makes the decision wherever the outcome is fundamental, irreversible or publicly consequential.
Examples include product scope, privacy, legal questions, sensitive functions and app-store releases. New releases are also checked on real iOS and Android devices.
This principle is particularly relevant for custom business applications: GenAI can accelerate development substantially, while responsibility and professional judgement remain with people wherever context and consequences require a conscious decision.
Results: a production application rather than an AI prototype
KindChat has developed into a substantial production software platform with mobile apps, backend services, a moderation system, several back-office applications and build, test and operational infrastructure.
Current development figures include:
- 3,419 commits on the main branch
- 1,325 feature commits
- 1,115 bug-fix commits
- 36,326 automated test cases
- 1.47 million lines of production and test code
- more than 61,000 CI runs
- 916 Architecture Decision Records
- 421 catalogued threats
- 10 app languages
- five released versions of the custom ML model
- 93 percent of commits created together with AI.
These figures come from the repository and build infrastructure and therefore reflect the actual development process rather than user data.
Which risks does this development approach address?
software risks.
The KindChat project addresses in particular:
- untested or only apparently correct AI results,
- technical dependency on individual models or providers,
- architecture decisions that are difficult to trace,
- regressions caused by rapid development,
- security and privacy risks,
- poor testability of AI functions,
- errors caused by parallel AI development,
- quality loss caused by high development speed.
The pitfalls documented in the project reveal an important relationship: greater speed increases the value of good engineering structures. Automation, clear interfaces, tests, CI, independent verification and human release decisions make it possible to use GenAI productively without subordinating quality to speed.