Рустем Тухбетов

MotiVane

2026

Идея без срока. Вместо срока у неё условия, и приложение следит за миром, пока они не сойдутся.

Формат
Приложение на React Native: браузер, iOS и андроид
Моя роль
Всё: замысел, движок, интерфейс, код
Инструменты
TypeScript · React Native · Expo · Reanimated · Open-Meteo · Vitest

Заметка здесь несёт не срок, а условия: дождь, светло на улице, выходной, я в трёх километрах от дома. Записал идею, отметил, что ей нужно, и забыл. Приложение смотрит на часы и на погоду и зажигает заметку, когда всё, чего она ждала, сошлось.

Движок отвечает на каждое условие одним из трёх значений: да, нет и спросить не у кого. На третьем всё и держится. Откажи приложению в геопозиции — двузначный движок обязан либо счесть условие выполненным, и заметка объявит, что пора, когда не пора, либо счесть невыполненным, и заметка замолчит навсегда, не объяснив почему. Заметка созрела, когда все условия ответили «да», ждёт, когда хоть одно ответило «нет», и не уверена, когда «нет» не сказал никто, но что-то проверить нечем.

Открой заметку — и увидишь каждое условие со своим вердиктом: приложение показывает рассуждение, а не объявляет итог. Ядро не трогает ни сеть, ни хранилище, ни React: разрешения, геопозиция и запросы собраны в одном хуке, который отдаёт движку готовый снимок мира, где неизвестное — просто отсутствующее поле. Поэтому весь движок покрыт тестами, идущими меньше секунды и без устройства.

Два решения изменились против первого плана. Погода берётся у Open-Meteo, а не у OpenWeatherMap: любой ключ в этом приложении уезжает в браузерный бандл, откуда его видно всем, а Open-Meteo ключа не требует. Заметки живут в AsyncStorage, а не в SQLite: заметок у человека десятки, весь список всё равно читается на каждый пересчёт, и один вызов покрывает и телефон, и браузер.

На телефоне приложение должно будить уведомлением в ту минуту, когда заметка созрела. Вкладка браузера так не умеет, поэтому веб-версия отвечает на вопрос в момент, когда её открыли. Уведомление — дело нативной сборки, и тот же код доходит до неё без переписывания.

← Все работы