Layout — the launcher's home screen¶
Which apps appear on the Gerege App launcher's home screen, in what order and under which headings, is decided by the operator (a server-driven layout, a port of openpay's layout). Developers do not change the layout — agree with the operator where your app appears on the home screen. This page is meant to help developers understand what is shown, and for implementers on the host/operator side.
1. Versions¶
The layout is versioned: draft → published → archived. Only one is published at a time. Publishing makes the
previous one archived; a rollback republishes an archived version as a new version — the history only grows,
and "what did people see on Tuesday?" always has an answer.
2. Sections¶
type |
Meaning | Fields |
|---|---|---|
featured |
A strip of hand-picked apps, in the order given | items (slugs) |
grid |
A titled grid, in the order given | title, items, columns (default 4) |
category |
The apps of one category: those named in items first, the rest by name |
category, items?, limit? |
categories |
A row of category tiles, each showing how many apps it has | items (category codes) |
Every section has an id (^[a-z0-9][a-z0-9-]{0,39}$). Limits: ≤ 30 sections, ≤ 24 items per section, title ≤ 80,
body ≤ 64 KB. An unknown field → an error (a typo is not saved and silently ignored).
Slugs are checked at publish (and rollback) — a draft may name an app that is in review. After publishing, a suspended app drops out of everyone's reads by itself.
3. The person's side — GET /api/v1/miniapp/layout?channel=ios|android|web¶
With the person's session. Returns the published layout, filtered to the apps that person can open on that
device (published + matching channel; the person's own drafts are not included). When no layout is published,
default: true — a default layout containing every category that has apps.
{ "version": 7, "default": false, "sections": [
{ "id": "top", "type": "featured", "title": "Онцлох", "apps": [ { "slug": "esim", "name": "Аяллын eSIM", "…": "…" } ] },
{ "id": "cats", "type": "categories", "title": "Ангилал",
"categories": [ { "category": "travel", "title": "Аялал", "count": 3 } ] } ] }
apps[] is the same publicApp as in the launcher's list (slug, name, icon, category, status, scopes, whether
connected …). Cache-Control: private, no-cache.
4. The operator's side — /api/v1/miniapp/review/layouts¶
Only the MINIAPP_OPERATOR_TENANT_ID organisation (the same as review).
| Method | Path | |
|---|---|---|
| GET | /review/layouts |
Every version |
| POST | /review/layouts |
{sections, note?} → a new draft |
| GET · PATCH · DELETE | /review/layouts/{id} |
Read / edit / delete a draft |
| POST | /review/layouts/{id}/publish |
Publish a draft (every slug a published app; those pinned in a category belong to that category) |
| POST | /review/layouts/{id}/rollback |
Publish an archived version as a new version |
| GET | /review/layouts/{id}/preview?channel= |
Any version (a draft too) as a person would see it |