Mama Calendar — это кроссплатформенное приложение для событий и напоминаний, написанное на React Native (Expo) с двумя реализациями бэкенда: Node.js + MongoDB и PHP + MariaDB.
Приложение позволяет создавать события с эмодзи-категоризацией, выбирать тип повторения (однократно, ежегодно, ежемесячно, еженедельно, ежедневно) и просматривать важные события на ближайшие 3 дня на отдельной вкладке «Important Events».
Стек технологий
Фронтенд написан на React Native 0.86 через Expo SDK 57 с TypeScript, Expo Router для навигации и react-native-reanimated для анимаций. Для иконок используется expo-symbols (SF Symbols на iOS, Material иконки на Android/Web).
Бэкенд реализован в двух вариантах:
- Node.js: Express 4, MongoDB 8 через нативный драйвер, самописная аутентификация с scrypt + salt, ручное управление токенами. Docker Compose поднимает клиент (nginx), сервер и MongoDB.
- PHP: PHP 8.2 без фреймворков, PDO + MariaDB 11, bcrypt для хеширования паролей, свой роутер и PSR-4 автолоадинг через Composer.
Функции приложения
- Регистрация и авторизация: простая система с username/password и Bearer-токенами
- CRUD событий: создание, просмотр, редактирование и удаление событий с датой, эмодзи и типом повторения
- Умная фильтрация: вкладка Important Events показывает события на ближайшие 3 дня с учетом правил повторения. Например, ежегодные события показывают ближайшее годовое вхождение, ежемесячные — по дню месяца, еженедельные — по дню недели
- Эмодзи-пикер: 20 предустановленных эмодзи для быстрой категоризации событий
- Подсветка сегодняшних событий: события на сегодня выделяются красным фоном (#B71C1C)
- Тёмная тема: автоматическое определение системной цветовой схемы с отдельными палитрами для светлой и тёмной темы
- Интернационализация: русский и английский языки через React Context
- Анимации: анимированный сплэш-скрин с Keyframe API и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
- Админ-эндпоинты: управление пользователями, токенами и очистка базы через мастер-токены
Почему две реализации бэкенда?
Node.js версия является основной, но PHP вариант существует как альтернатива для более классического хостинга. API полностью идентичен, что позволяет переключаться между ними без изменения клиентского кода.
Инфраструктура
Весь стек поднимается через Docker Compose: клиент собирается через мультистейдж билд (Expo export → nginx alpine), сервер на Node.js, MongoDB 8. Для PHP-версии есть отдельный compose-файл с MariaDB 11 и phpunit для тестов.
Сборка веб-версии автоматизирована PowerShell-скриптом, который патчит API_URL перед expo export и восстанавливает оригиналы после.
Вывод
Mama Calendar — это полнофункциональное кроссплатформенное приложение, которое покрывает полный цикл: от мобильного и веб-фронтенда на React Native до двух вариантов серверной части. Проект интересен своей архитектурой, использованием современных возможностей Expo SDK и двойной реализацией бэкенда.
Ссылки
https://github.com/zefir1990/Mama-Calendar
https://demensdeum.com/software/mama-calendar/events
Добавить комментарий