← Case studies

Platform engineering · Enterprise

One foundation for employee-built apps.

Teams at a German logistics company were building their own tools with Lovable faster than IT could connect them to sign-in, logging, and governance. Over seven months, Sinumo and the client's platform team built Moshu, a workspace apps platform where employees build tools, apps, and sites on the company's shared services without handling infrastructure, deployments, or pull requests. The platform team took ownership at handover.

ClientRoad freight and contract logistics provider, Germany (name withheld)
ProgramWorkspace apps platform
DurationFebruary 2026 – August 2026
ScopeThe platform, its builder, the review of existing apps, and the apps published during the engagement
Sinumo teamAI Strategist (lead), Platform Engineer, AI Engineer, UX/UI Designer
Client team Executive sponsor (CIO), Head of Platform Engineering, two platform engineers, one identity and access engineer, IT Security, Data Protection Officer (review), works council (review)
Updated

In brief. Moshu gives every app the same sign-in, permissions, organizational context, business data, notifications, observability, and audit trail through one SDK. Employees describe what they need, check a preview, and publish a version. The first app went live in week six. By the August handover, 31 apps from 14 teams ran on the platform, and the client's platform engineers owned it.

Fast to build, hard to trust.

The company's depot, fleet, customer service, and finance teams had discovered that they could build their own tools. Over about a year, people without an engineering background produced dock scheduling boards, damage report forms, rate lookups, and team sites with Lovable and similar tools. The results were useful, and they spread.

Discovery found 38 such apps across 15 teams. Each one solved its own plumbing. Eleven kept their own user tables and passwords. Nine sent email through personal or trial accounts. Most stored records in a database that IT did not know about, and none reported errors to the central observability stack. Eleven processed personal data of employees or customers.

The platform team had tried to steer this with guidance: use single sign-on, log to the shared stack, request data through the API gateway. Builders pasted the guidance into their prompts. The generated code followed it sometimes, partially, and differently each time. A rule that every app must pass a manual security review would have ended the building, which nobody wanted.

The company already operated the components these apps needed: an identity provider with single sign-on, a directory that knew every employee's team, depot, and manager, a notification service, an event bus, an API gateway in front of shipment and order data, an observability stack, and an audit log that fed compliance reporting. Engineering teams used them. The apps did not, because using them required integration work their builders could not do.

The question for the engagement was therefore not whether employees should build. It was how to make the company's platform the easiest path for the apps they were already building.

The platform decides the plumbing.

Moshu is a workspace apps platform. A workspace app is a tool, an internal application, or a site that runs inside the company's identity and reaches the company's services through one SDK. The builder of an app decides what it does. The platform decides how it signs people in, where it stores data, how it sends a message, and where its logs go.

We did not rebuild those services. Each Moshu service is a thin adapter over a component the client already operated. The work was to give the adapters one consistent shape, and to make them the only path an app could take.

Employees send app ideas into Moshu. Inside Moshu, a builder, a publish step, and a runtime sit above a shared SDK. The SDK connects to nine shared services, each an adapter over an existing company component beyond a dashed boundary.
The platform Employees build in Moshu. Apps reach shared services only through the SDK. Each service is an adapter over a component the company already ran.

Context arrives with the request. When an employee opens an app, the platform has already established who they are, their team, their site, their role, their manager, and their language. The app reads this context; it does not collect it. A depot tool built in Hamburg works in Leipzig without changes because the site comes from the directory.

Shared services available to workspace apps
ServiceWhat an app getsExisting component behind it
IdentitySign-in through single sign-on. Apps never handle credentials.Identity provider (OIDC)
AuthorizationRoles and permission checks. An app declares the roles it needs; the platform enforces them.Central policy service, with app-level roles layered on top
Organizational contextThe user's team, site, manager, cost center, and languageDirectory, synchronized from the HR system
Business dataRead access, and approved write access, to shipment, order, customer, fleet, and depot records, scoped to the user's sitesAPI gateway and data products owned by engineering teams
NotificationsEmail, Microsoft Teams messages, and mobile push through one call, honoring each person's preferences and quiet hoursNotification service
EventsSubscriptions to business events such as shipment status changes and gate arrivalsEvent bus
FilesUpload, virus scanning, storage, and retention by data classObject storage with classification labels
JobsScheduled and background tasks with per-app quotasPlatform job runner
ObservabilityLogs, metrics, traces, and errors tagged with the app and versionOpenTelemetry stack
Audit and governanceA record of every data access and every publication, plus data classification and approval routingAudit log feeding compliance reporting
Secrets and configurationManaged per app. No secrets in code or prompts.Secrets manager
Model accessLanguage model calls through the company gateway, with per-app budgetsModel gateway

Access to a service is not access to everything behind it. Business data is scoped by the user's sites and by the app's declaration, and the owning engineering team approves write access. The controls described here cover what apps can reach; they do not replace the permission model of each underlying system.

Describe, preview, publish.

Employees build in Moshu with an AI-assisted builder. They describe the tool they need, check a draft in a preview, and refine it. The builder generates code against the Moshu SDK and a library of patterns: a form with an approval step, a board, a scheduled report, a site with pages. People who want to edit the code can. Most do not.

Every app declares what it uses. A declaration lists the services, data products, and audience of an app. The builder writes it, the publish step checks it against the code, and the runtime issues credentials only for what is declared. An app that does not declare shipment data cannot read it, whatever its code says. This was the difference from guidance: the constraint moved from the prompt into the platform.

One line of development. Each app has one draft and a list of published versions. There are no branches and no pull requests. Two people can edit the same draft; the editor shows who is present and what changed. Publishing creates an immutable version. Rolling back means publishing an earlier one. Builders never see a server, a container, or a deployment pipeline.

Review depends on the declaration, not the code. The review tier follows from the audience and the data classes an app declares.

Publication tiers
TierApplies whenWho reviewsTypical wait
TeamThe audience is the builder's team and no personal data is processedNobody. The app is published immediately.None
OrganizationThe audience is the whole company, or the app processes personal dataA named reviewer for the data class. Employee data follows the works council path.One to five working days
SystemsThe app writes to a business system or subscribes to its eventsThe team that owns the system, and a platform engineer for the declarationAbout a week

Reviewers see the declaration, the preview, and the audit trail from the draft. They do not read generated code line by line, which would not have scaled. The platform team's involvement per app moved from integration work to reviewing a declaration.

Technical note: how the runtime and publish checks work

Each published version is built into an immutable image and runs on the client's existing Kubernetes clusters with its own service identity, network policy, and resource quota. Apps can reach the platform services and nothing else; there is no direct network egress. Secrets are injected at start from the declaration. Preview drafts run the same way under a short-lived identity.

Publish-time checks include the declaration comparison, a dependency allowlist, static checks for direct network calls and credential handling, and a smoke test of the preview. A failed check returns the app to draft with a message the builder can act on.

These descriptions follow the engagement account. They do not independently verify the client's deployment or its results.

Thirty-one apps on the same services.

By August, fourteen teams had published apps on the platform. The examples below show the range. Their common pattern was a small tool, owned by the team that needed it, using services it would otherwise have had to rebuild.

Selected apps published during the engagement
TeamAppShared services used
Depot operationsDock slot board for yard and dock scheduling at each depotContext, business data, events, notifications
FleetDamage report intake, where drivers photograph vehicle damage and a manager decides the follow-upFiles, context, notifications, audit
Customer serviceDelay notice drafts prepared from shipment status and sent after a person approves themBusiness data, model access, notifications, audit
Site managementShift swap requests between drivers, with supervisor approvalContext, authorization, notifications
FinanceFreight invoice dispute trackerBusiness data, files, audit
SalesRate card lookup and tender response workspaceBusiness data, files, authorization
Safety and complianceSafety briefing attendance and sign-offContext, audit
Internal communicationsDepot sites with local notices, contacts, and opening hoursContext, files
ITHardware and access request formsContext, notifications, audit

Twenty-one of the 31 apps replaced tools found in discovery. Ten were new. The delay notice app is the only one that uses model access; a customer service agent still approves every message before it is sent.

From a photo in the yard to a manager's decision.

The damage report app shows how the pieces fit together. A driver finds damage on a trailer during the pre-departure check. Before Moshu, the depot used a Lovable form with its own login, an email to a shared mailbox, and photos in a personal cloud folder.

  1. 01 · Sign in Open the app on a phone

    The driver opens the app from the workspace and is signed in through single sign-on. There is no separate account and no password.

  2. 02 · Context Know the driver and the vehicle

    The platform supplies the driver's depot and shift. The app reads the assigned vehicle from fleet data, scoped to that depot.

  3. 03 · Capture Record the damage

    The driver takes photos and marks the location on a trailer outline. Files go to platform storage under the retention class for vehicle records.

  4. 04 · Decide Keep the decision with the fleet manager

    The fleet manager receives a Teams message through the notification service, checks the report, and decides whether the vehicle leaves or is blocked.

  5. 05 · Record Keep the trail

    The decision, the evidence, and every access are written to the audit log. Errors and usage appear in the observability stack under the app's name and version.

The app processes employee data, so it was published in the Organization tier. The Data Protection Officer reviewed the declaration and the retention class. The works council was informed that the app records who reported damage and when, and that it does not evaluate driver performance. That review took four working days.

The builder, a dispatcher at the depot, produced the first draft in an afternoon. What took longer was agreeing the retention period and the wording of the notice to drivers, which no platform can shorten.

Delivery, adoption, and the limits of the figures.

  • 31 apps published by 14 teams by August 2026, 21 replacing tools found in discovery and 10 new.
  • First app published in week six, in mid-March 2026.
  • Twelve shared services behind one SDK, each an adapter over a component the client already operated.
  • Of the 38 apps found in discovery, 21 were rebuilt on Moshu, 10 were retired, and 7 remained outside the platform at handover with a named owner and a migration date.
  • Client ownership at handover, including code, infrastructure, the builder's pattern library, operating guides, and the publication policy.

Approximate figures from the engagement account

The original account recorded the estimates below. The underlying samples, complete comparison periods, and calculation records are no longer available. These figures describe reported observations; they are not independently verified or normalized benchmarks.

Reported estimates and what they measure
MeasureEstimate in the original accountInterpretation
Idea to first published version About three working days in the reported sample From draft creation to first publication for Team-tier apps. Apps that needed review are excluded. The sample size and the use of a mean or median are unavailable.
Platform team effort per app Roughly two days per app before the platform and under an hour by July Before: single sign-on integration, hosting review, and log forwarding for individual apps. After: review of a declaration. Self-reported by the platform team without time tracking.
Publications per week About twelve by July Counts new versions, not new apps. A small number of active builders account for most of them.

Several things changed at the same time: the tooling, the review process, and the visibility of the existing apps. The figures cannot separate the effect of the platform from the effect of having an inventory and a policy. Adoption also does not establish that the apps are correct, or that they were the right tools to build.

This account makes no quantified claim about cost savings, incidents avoided, licence spend, or return on investment.

The constraints had to live in the platform.

The builder followed the contract only when the runtime enforced it. Early versions of the builder still generated direct network calls, embedded credentials, and local user tables when a prompt hinted at them. Prompt changes helped and did not settle it. The publish checks and the runtime without egress did. Guidance alone had already failed before the engagement; the platform had to make the shared path the only path.

Directory groups did not match how teams worked. The directory organized people by cost center. Depot teams shared people across shifts and sites. Workspace groups owned by team leads, mapped onto directory groups, solved most cases. Keeping those memberships current became a maintained task with an owner.

Employee data needed a defined path. Under German co-determination rules, the works council has a say in technical systems that can monitor employee behavior or performance. The Data Protection Officer and the works council agreed a review path with the platform team, triggered by the declaration. Two apps that could rank individual drivers by performance were not published; they require a works agreement that was still under discussion at handover.

Some apps outgrew the model. Two apps grew into products with several contributors, integration tests, and change requests from other departments. They moved to engineering-owned repositories, still using the Moshu SDK and runtime. One draft, one owner, and immediate publication suit tools; they do not replace product engineering.

Ownership had to be explicit. When a builder left the company, two apps had nobody responsible for them. Every app now has an owner and a deputy. Apps whose owner leaves are flagged, and are unpublished after a grace period if nobody claims them.

The platform team took ownership.

Two client platform engineers paired with Sinumo from the first sprint and had commit ownership by June. At handover, the team owned the platform, the builder, the service adapters, and the review tooling. The identity and access engineer owned the group model. Reviewers for each data class were named.

  • Code and infrastructure for the platform, the runtime, and the service adapters, as infrastructure as code.
  • The builder's pattern library and evaluation suite, which checks that generated apps use the SDK correctly and pass the publish checks.
  • Operating guides for the runtime, quotas, service adapters, and incident handling.
  • A written publication policy covering tiers, data classes, the works council path, and app ownership.

The account also records two services added by the client after August: label printing at depots and electronic signatures. Both followed the adapter pattern. They are separate from the twelve services counted at handover and reflect the objective of giving the platform team a system it could extend.