Mama Calendar is a cross-platform events and reminders application written in React Native (Expo) with two backend implementations: Node.js + MongoDB and PHP + MariaDB.
The application allows you to create events with emoji categorization, select the type of repetition (once, annually, monthly, weekly, daily) and view important events for the next 3 days in a separate “Important Events” tab.
Technology stack
The frontend is written in React Native 0.86 via Expo SDK 57 with TypeScript, Expo Router for navigation and react-native-reanimated for animations. Expo-symbols are used for icons (SF Symbols on iOS, Material icons on Android/Web).
The backend is implemented in two versions:
- Node.js: Express 4, MongoDB 8 via native driver, custom authentication with scrypt + salt, manual token management. Docker Compose brings up the client (nginx), server and MongoDB.
- PHP: PHP 8.2 without frameworks, PDO + MariaDB 11, bcrypt for password hashing, your own router and PSR-4 autoloading via Composer.
Application functions
- Registration and authorization: simple system with username/password and Bearer tokens
- CRUD events: create, view, edit and delete events with date, emoji and repeat type
- Smart filtering: The Important Events tab shows events for the next 3 days, taking into account repetition rules. For example, annual events show the nearest annual occurrence, monthly – by day of the month, weekly – by day of the week
- Emoji picker: 20 preset emoji for quick categorization of events
- Highlighting today’s events: Today’s events are highlighted with a red background (#B71C1C)
- Dark theme: Automatic detection of system color scheme with separate palettes for light and dark theme
- Internationalization: Russian and English languages via React Context
- Анимации: анимированный сплэш-скрин с Keyframe API и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
- Admin endpoints: managing users, tokens and clearing the database through master tokens
Why two backend implementations?
The Node.js version is the main one, but the PHP version exists as an alternative for more classic hosting. The API is completely identical, which allows you to switch between them without changing the client code.
Infrastructure
The entire stack is raised through Docker Compose: the client is assembled through a multistage build (Expo export → nginx alpine), a server on Node.js, MongoDB 8. For the PHP version there is a separate compose file with MariaDB 11 and phpunit for tests.
The assembly of the web version is automated by a PowerShell script that patches the API_URL before expo export and restores the originals after.
Output
Mama Calendar is a full-featured cross-platform application that covers the full cycle: from mobile and web frontend on React Native to two server-side options. The project is interesting for its architecture, use of modern Expo SDK capabilities and dual backend implementation.
Links
https://github.com/zefir1990/Mama-Calendar
https://demensdeum.com/software/mama-calendar/events










