返回项目列表
Sincronario 标志

Sincronario

将公历转换为 13 月亮银河历的自动化转换工具。

AstroTypeScriptPWA

现代世界中的时间概念几乎完全由公历(格里高利历)支配,这是一种由十二个不对称且不规则的月份组成的系统。这一结构虽然是全球标准,但缺乏精确的几何或天文学和谐。另一方面,“13月亮同步历”提出了一种替代范式:基于 13 个循环(每期恰好 28 天,共 364 天)的永续历法,外加一个“无时间日”以与太阳年同步。

我在本项目中处理的问题不是哲学的,而是计算上的:如何在保持最佳 Web 性能和通用可访问性的同时,将公历模型的不规则性动态翻译并同步到 13 月亮历模型的确定性与周期性结构中?

该工具的真实实用价值在于将这一复杂的计算自动化。通过输入或检测日期,系统将公历时间坐标映射到静态参考日期(2013年7月26日,Kin 164),并立即计算出相应的 Kin、太阳图腾 (Solar Seal)、银河音阶 (Galactic Tone)、月亮 (Moon)、该月的具体日期以及 径向等离子 (Radial Plasma)。

工作流非常直观:

  1. 用户访问 Web 应用。
  2. 系统捕获当前本地日期。
  3. 业务规则引擎执行转换算法。
  4. 界面返回一张时间身份卡片 (Kin) 及其在 13 月亮矩阵中的位置。 这使得不了解同步历数学的人能够即时且易懂地获得其时间坐标。

深入架构分析(技术视角)

作为该解决方案的架构师,我优先考虑了交付速度、客户端极小的开销,以及领域逻辑与呈现层之间的清晰分离。

整体架构与设计模式

项目在 Server-Side Rendering (SSR) 范式下构建为轻量级单体应用,使用的是 Astro。

使用 SSR 代替静态站点 (SSG) 的技术决策建立在应用的本质上:主要内容内在依赖于时间 (new Date())。通过在服务端(在这种情况下,是在 Edge 或通过 Vercel 适配器的 Serverless Functions)进行渲染,我确保客户端接收到带有计算好的日期的纯 HTML,消除了因浏览器执行 JavaScript 带来的加载延迟,并改善了 SEO 和 First Contentful Paint (FCP)。

底层的架构模式遵循 职责分离 (Separation of Concerns) 方法:

  • 领域/逻辑层 (src/lib/): 包含纯粹且独立于框架的算法。
  • 呈现层 (src/pages/ 与 src/components/): 专门负责消费领域层并构建标记。

数据建模与业务逻辑

系统的核心是同步逻辑。我将主要实体 DreamspellDate 设计为一旦计算便不可变。没有全局响应式状态管理,因为应用在其当前的主要工作流中,计算并展示时间的静态快照。

规则引擎处理同步历特有的数学边界情况 (edge cases):

  • 年度的开始固定在公历 7 月 26 日。
  • 7 月 25 日从标准月亮流中抽象出来,被处理为 无时间日 (Day Out of Time)。
  • 2月29日(公历闰年日)从常规 kin 计数中隔离出来,在功能上被处理为 0.0 Hunab Ku,从而避免永续历法的错位。
flowchart TD
    A[目标公历日期] --> B{是 2 月 29 日吗?}
    B -- 是 --> C[返回 Hunab Ku 对象]
    B -- 否 --> D{是 7 月 25 日吗?}

    D -- 是 --> E[分配无时间日]
    D -- 否 --> F[计算自年初以来的天数]

    F --> G[计算月亮索引与月之日]
    E --> H[计算基础 Kin]
    C --> END[计算结束]
    G --> H

    H --> I[计算自参考日期的偏移量]
    I --> J[确定太阳图腾 1-20]
    I --> K[确定银河音阶 1-13]
    I --> L[确定径向等离子 1-7]

    J --> M[构建 DreamspellDate 实体]
    K --> M
    L --> M
    E --> M

    M --> END

由此产生的数据实体结构如下:

classDiagram
    class DreamspellDate {
      +Date gregorianDate
      +number kin
      +string seal
      +number sealIndex
      +string tone
      +number toneIndex
      +string moon
      +number moonIndex
      +number dayOfMoon
      +string plasma
      +boolean isDayOutOfTime
      +string color
    }

技术栈

工具链生态系统严格因其效率、强类型和开发体验而被选择。

技术架构角色技术考量
AstroMeta-framework 与渲染提供快速 SSR 并默认发送 Zero-JS。非常适合高度静态或依赖于单次服务端请求的内容。
TypeScript静态类型确保领域实体 (DreamspellDate) 的完整性,并在复杂的日期数学运算中预防错误。
Tailwind CSS基于实用程序的样式允许直接在组件中进行敏捷设计,而不会膨胀全局 CSS 文件的体积。与 Vite 打包工具协同工作。
Vite PWA渐进式 Web 应用配置在 Astro 编译过程中透明地实现离线功能和原生安装能力。
Vercel Adapter部署与基础设施方便直接在 Vercel 的 Serverless 基础设施上执行由 Astro 生成的 SSR 函数。

Astro SSR 模式、TypeScript 强类型逻辑领域以及解耦界面的结合形成了一个高性能的解决方案。系统抽象了历法转换的算法复杂性,将数学逻辑封装在纯函数中,交付了一个在毫秒内响应且客户端执行开销极小的最终产品。

拖动可移动图示。按 + 和 − 缩放,方向键移动,0 重置视图。

一起合作

软件工程师、高级全栈开发工程师,常驻玻利维亚Santa Cruz,远程办公。欢迎新的工作机会。