妈妈日历 – 跨平台提醒应用程序

Written by

in

Mama Calendar 是一个用 React Native (Expo) 编写的跨平台事件和提醒应用程序,具有两个后端实现:Node.js + MongoDB 和 PHP + MariaDB。

该应用程序允许您创建带有表情符号分类的事件,选择重复类型(一次、每年、每月、每周、每天),并在单独的“重要事件”选项卡中查看接下来 3 天的重要事件。

技术栈

前端是通过带有 TypeScript 的 Expo SDK 57 用 React Native 0.86 编写的,用于导航的 Expo Router 和用于动画的 react-native-reanimated 。 Expo-symbols 用于图标(iOS 上的 SF 符号,Android/Web 上的 Material 图标)。

后端有两个版本实现:

  • Node.js: Express 4、通过本机驱动程序的 MongoDB 8、使用 scrypt + salt 的自定义身份验证、手动令牌管理。 Docker Compose 会启动客户端 (nginx)、服务器和 MongoDB。
  • PHP: 无框架的 PHP 8.2、PDO + MariaDB 11、用于密码散列的 bcrypt、您自己的路由器以及通过 Composer 自动加载的 PSR-4。

应用功能

  • 注册和授权:带有用户名/密码和不记名令牌的简单系统
  • CRUD 事件:创建、查看、编辑和删除包含日期、表情符号和重复类型的事件
  • 智能过滤:“重要事件”选项卡显示未来 3 天的事件,并考虑重复规则。例如,年度事件显示最近的年度事件、每月 – 按月中的日期、每周 – 按星期的日期
  • 表情符号选择器: 20 个预设表情符号,用于对事件进行快速分类
  • 突出显示今天的活动:今天的活动以红色背景突出显示 (#B71C1C)
  • 深色主题:自动检测系统配色方案,并使用单独的浅色和深色主题调色板
  • 国际化:通过 React Context 实现俄语和英语
  • Анимации: анимированный сплэш-скрин с Keyframe API и упругой интерполяцией, анимированная иконка приложения с вращающимся свечением
  • 管理端点:管理用户、令牌并通过主令牌清除数据库

为什么有两个后端实现?

Node.js 版本是主要版本,但 PHP 版本作为更经典托管的替代方案存在。 API 完全相同,允许您在不更改客户端代码的情况下在它们之间进行切换。

基础设施

整个堆栈是通过 Docker Compose 构建的:客户端通过多阶段构建(Expo export → nginx alpine)进行组装,服务器位于 Node.js、MongoDB 8 上。对于 PHP 版本,有一个单独的包含 MariaDB 11 和 phpunit 的 compose 文件用于测试。

Web 版本的组装由 PowerShell 脚本自动完成,该脚本会在 expo 导出 之前修补 API_URL,并在之后恢复原始版本。

输出

Mama Calendar 是一款功能齐全的跨平台应用程序,涵盖整个周期:从 React Native 上的移动和 Web 前端到两个服务器端选项。该项目因其架构、现代 Expo SDK 功能的使用和双后端实现而有趣。

链接

https://github.com/zefir1990/Mama-Calendar
https://demensdeum.com/software/mama-calendar/events

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

DemensDeum
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.