Завдання
Що ми зробили
Один бекенд на цілу мережу застосунків
Коли застосунків два, контент можна тримати у файлах усередині кожного. Коли їх двадцять чотири, кожна правка в тексті перетворюється на новий реліз у Google Play і тиждень очікування.
Ми зробили платформу, у якій вміст живе окремо від застосунків: редактор править його в адмінці, а телефони забирають оновлений набір самі — без оновлення самого застосунку.
Кожна плитка — застосунок: скільки в ньому матеріалів і яка версія контенту зараз опублікована.
Застосунок тільки читає
Головне рішення архітектури просте: телефон не пише в платформу нічого, крім знеособлених подій. Він забирає маніфест, забирає набір матеріалів своєю мовою — і все. Немає ні облікових записів, ні синхронізації, ні конфліктів.
Завдяки цьому новий застосунок заводиться майже без коду: у адмінці створюється запис, генерується ключ, заповнюються рубрики й матеріали, натискається «Опублікувати» — і версія контенту зростає на одиницю. Ключ і адреса вписуються в застосунок, далі він працює сам.
Двадцять чотири застосунки в одній таблиці
У кожного свій ключ доступу, свій набір мов, своя версія контенту й свій стан. Видно, що опубліковано, що в роботі, а що лежить ідеєю. Це не вітрина — це робочий список, з якого ведеться вся мережа.
Матеріали різних форм
Рецепт, інструкція, питання вікторини, картка для гри, код помилки, загадка, факт — у кожного формату своя форма редагування, а не одне поле «текст». Додати сотню матеріалів можна імпортом: вставляється масив, обирається тип і мова, і система показує звіт по рядках — що прийнялося, що ні й чому.
Не платити за те, що не змінилося
Набір матеріалів для одного застосунку — це сотні кілобайтів. Качати їх щоразу при запуску безглуздо, тому відповідь підписана міткою версії: якщо на телефоні вже свіжий набір, сервер відповідає «змін немає» й не передає нічого.
Тут була та сама пастка, через яку економія не працювала: проксі, що стискає відповіді, переписує мітку у «слабку» форму, і суворе порівняння перестає збігатися. Телефон щоразу качав усе заново. Порівняння довелося навчити приймати всі три форми мітки — суворy, слабку й перелічену через кому.
Медіа, яке не роздуває застосунок
Кожне зображення при завантаженні переводиться у WebP і зберігається у двох розмірах: повний до 1200 пікселів і мініатюра до 400. Роздає їх сервер із довгим кешем, а застосунок отримує готові адреси — жодних перетворень на телефоні.
Статистика без персональних даних
Застосунки шлють знеособлені події — відкриття, перехід, дію. Жодних ідентифікаторів людини, жодних контактів. За раз приймається не більше пʼятдесяти подій, некоректні рядки просто відкидаються, а не валять весь запит.
Поруч у платформі зводяться показники з магазину застосунків і рекламної мережі — щоб дивитися встановлення й дохід там само, де лежить контент, а не в трьох різних кабінетах.
Як це робилося
Що під капотом
Платформа
Laravel з адмінкою на Filament. Живе на звичайному хостингу: без root, без контейнерів, черги й кеш у базі, зображення конвертуються одразу при завантаженні.
API
Чотири адреси на читання, ключ у заголовку, обмеження за ключем і за адресою, мітка версії з відповіддю «змін немає». Помилки — звичайний JSON із кодом.
Сховище
Окреме місце для збірок і матеріалів магазину: іконки, знімки екрана, описи. Плюс перехресні посилання між застосунками мережі.
Що вийшло
Мережа з двадцяти чотирьох застосунків, у якій правка тексту доходить до користувача за хвилини, а не за тиждень. Новий застосунок заводиться в адмінці за кілька хвилин: створити, заповнити, опублікувати, вписати ключ.
І все це працює на звичайному хостингу — без окремого сервера, черг у пам’яті й контейнерів, які там просто ніде запустити.
Схожий проєкт?
Обговорімо ваші цілі й подивімося, чим ми можемо допомогти.
Замовити безкоштовний кошторис →


