Home » Portfolio » Content platform for a network of Android apps
CRM Mobile apps / In-house product

Content platform for a network of Android apps

Seganiko
Client Seganiko
Industry Mobile apps / In-house product
Type CRM
Technologies used Laravel, Filament admin, read-only REST API, keys and rate limits, version tags, WebP conversion, store and ad-network sync
Context

The challenge

Manage the content of twenty-four apps without turning every text edit into a new store release — and fit the whole thing onto shared hosting, with no root and no containers.
Our approach

What we delivered

The app only reads: it fetches a manifest and a bundle of items in its own language, and writes nothing but anonymous events. A version tag on the response avoids re-downloading what has not changed — all three shapes of the tag had to be accepted, because a compressing proxy rewrites it. Images are converted to WebP on upload, and store and ad-network figures are pulled in beside the content.
Project details

One backend for a whole network of apps

With two apps you can keep the content in files inside each one. With twenty-four, every edit to a line of text turns into a new release on Google Play and a week of waiting.

We built a platform where the content lives apart from the apps: an editor changes it in the admin, and the phones pull the updated bundle themselves — without updating the app.

Apps platform dashboard: item count and content version for each app

Each tile is an app: how many items it holds and which content version is currently published.

What it is

  • Product: built in-house at Seganiko
  • Purpose: a content platform for a network of Android apps
  • Scale: 24 apps, hundreds of thousands of items
  • Environment: ordinary hosting, no root and no containers

Objectives

  • Edit content without releasing the app.
  • Stand up a new app in minutes rather than a week.
  • Stop paying in traffic for what has not changed.
  • Collect statistics without collecting personal data.

What is inside

  • An admin with an item type for every format.
  • A read-only API with a key and rate limits.
  • A media pipeline: original and thumbnail in WebP.
  • Store and ad-network figures pulled into one place.

The app only reads

The central architectural decision is simple: the phone writes nothing to the platform except anonymous events. It fetches the manifest, fetches the bundle of items in its own language, and that is all. No accounts, no synchronisation, no conflicts.

Because of that, a new app is set up almost without code: create a record in the admin, a key is generated, fill in categories and items, press Publish — and the content version goes up by one. The key and the address go into the app, and from then on it runs by itself.

App stages are visible in the list: idea, concept ready, in development, published. The platform holds not only what is already in the store but also what is still in the backlog — together with the categories and items being prepared for it.

Twenty-four apps in one table

Each has its own access key, its own set of languages, its own content version and its own state. You can see what is published, what is in progress and what is still an idea. This is not a showcase — it is the working list the whole network is run from.

App list with stages, categories, API keys and content versions

Items of different shapes

A recipe, a guide, a quiz question, a party-game card, an error code, a riddle, a fact — each format has its own editing form, not one field called “text”. A hundred items can be added by import: paste an array, choose the type and the language, and the system reports row by row — what was accepted, what was not and why.

Items section: recipes, quizzes, cards and reference entries across apps

Not paying for what has not changed

A bundle for one app runs to hundreds of kilobytes. Downloading it on every launch makes no sense, so the response carries a version tag: if the phone already has the current bundle, the server answers “nothing changed” and sends nothing.

And here was the trap that quietly defeated the saving: a proxy that compresses responses rewrites the tag into its “weak” form, and a strict comparison stops matching. The phone re-downloaded everything, every time. The comparison had to be taught to accept all three shapes of the tag — strong, weak and comma-separated.

Media that does not bloat the app

Every image is converted to WebP on upload and kept in two sizes: full up to 1200 pixels and a thumbnail up to 400. The server hands them out with a long cache, and the app receives ready-made addresses — no conversion on the phone.

Platform media library with WebP conversion and thumbnails

Statistics without personal data

The apps send anonymous events — an open, a navigation, an action. No identifiers of a person, no contacts. At most fifty events per request, and malformed rows are simply dropped rather than failing the whole call.

Alongside that, the platform pulls in figures from the app store and the ad network — so installs and revenue are read in the same place the content lives, not across three separate consoles.

How it was done

1
Phase 1
Content model
App, category, item, language. An item type for each format, each with its own editing form.
2
Phase 2
API
Read-only, a key per app, rate limits, a version tag on the response, and a Publish action that raises the content version.
3
Phase 3
Media and import
WebP conversion with thumbnails, a long cache, and array import with a row-by-row report.
4
Phase 4
Figures
Anonymous events from the apps, plus installs and revenue pulled from the store and the ad network.

Under the hood

Platform

Laravel with a Filament admin. It lives on ordinary hosting: no root, no containers, queue and cache in the database, images converted the moment they are uploaded.

API

Four read endpoints, a key in the header, limits per key and per address, a version tag with a “nothing changed” response. Errors are plain JSON with a code.

Vault

A separate place for builds and store material: icons, screenshots, descriptions. Plus cross-links between the apps in the network.

How it turned out

A network of twenty-four apps in which a text edit reaches the user in minutes rather than a week. A new app is set up in the admin in a few minutes: create, fill, publish, paste the key.

And all of it runs on ordinary hosting — with no separate server, no in-memory queues and no containers, none of which there is anywhere to start.


Have a similar project?

Let's discuss your goals and see how we can help.

Request a free quote →
Any questions?

Let's discuss
your project.

Free first consultation, no strings attached.