AI Calendar 是一款融合了实用日历功能与 AI 艺术生成的个人应用。它不仅仅是一个查看日期的工具,更是一个每日更新的数字艺术画廊,旨在通过 AI 技术为每一天赋予独特的视觉体验和知识价值。
核心理念:每一天,都是一幅新的画卷。
- 多视图支持:提供清晰的日视图(Today)和月视图(Month Grid)。
- 信息展示:包含公历日期、星期,并预留农历/节气显示位置。
- 交互:简单直观的日期切换与跳转。
- 每日一图:深度集成 NanoBananaPro 生图 API,每天自动展示一张高质量插画。
- 知识科普:每张插画下方配有相关的科普小知识(涵盖历史、自然、艺术等领域),实现“图文并茂”。
- 强关联性:日期(如节日、节气)、插画内容、科普文字三者之间具有强逻辑关联,形成统一的叙事。
- 设定明日:用户可以掌握未来,提前选定“明天”及以后的主题关键词(如:赛博朋克、印象派、极简主义)和绘画风格。
- API 配置:支持用户自行输入和管理 NanoBanana API Key,保障服务的灵活性。
- 提前准备 (Pre-generation):系统采用 T-1 策略,提前一天在后台生成次日所需的内容。
- 无感体验:用户第二天打开应用时,内容已准备就绪,无需等待加载,体验流畅。
- 风格:扁平简洁 (Flat & Minimalist)。去除多余装饰,强调内容本身。
- 体验:流畅舒适,久看不累。配色柔和,排版考究,适合长期日常使用。
采用 “双轴沉浸式”布局,结合了传统的日历工具与现代的流媒体浏览体验。
位置:屏幕上半部分 (Mobile) 或 左侧栏 (Desktop)
- 设计:纯净背景,内容垂直水平居中。
- 元素:大号日期、月历网格,视觉重心稳重。
位置:右侧主区域 (Desktop),采用水平滚动 (Scroll Snap)
-
Page 1: 今日聚焦 (Peek View)
- 布局:拍立得卡片位于中间偏右的位置,营造视觉张力。
- 右侧预览:屏幕右边缘隐约显示(虚化处理)“最近三天”的插画列表,暗示用户可以向左滑动。
- 交互:点击卡片可查看详情/科普。
-
Page 2: 历史画廊 (Gallery View)
- 位置:位于 Page 1 右侧,滑动进入。
- 布局:由上到下的瀑布流/网格展示过往所有日历产出。
- 交互:点击任意历史图片,自动跳转回该日期的详情卡片。
graph TD
Start[启动应用] --> CheckConfig{检查 API 配置}
CheckConfig -- 未配置 --> SetupPage[API 配置页]
CheckConfig -- 已配置 --> HomePage[主页 - 今日视图]
subgraph HomePage_Layout [主页布局]
CalendarArea[日历功能区]
ContentCard[内容卡片区]
end
HomePage --> CalendarArea
HomePage --> ContentCard
CalendarArea -->|切换日期| HistoryView[历史/未来预览]
ContentCard -->|浏览| ImageView[查看大图]
ContentCard -->|点击设置| CustomizePage[定制明日主题]
CustomizePage -->|选择风格/标签| UserPrefs[(用户偏好存储)]
%% 后台逻辑
HomePage -.->|后台触发| GenService[生图调度服务]
GenService -->|读取 T+1 设置| UserPrefs
GenService -->|调用| NanoBananaAPI[NanoBanana API]
NanoBananaAPI -->|返回图片| LocalStorage[(本地缓存)]
- 前端框架:React / Vue (Web) 或 React Native / Flutter (Mobile)。
- 状态管理:简单的 Context API 或 Pinia。
- 持久化:LocalStorage 或 SQLite (用于存储 API Key、用户偏好、图片缓存)。
为了实现“内容生成的机制是提前一天”,建议采用以下逻辑:
- 触发时机:每次 App 启动 (
onLaunch) 或从后台进入前台 (onResume)。 - 检查逻辑:
const tomorrow = getTomorrowDate(); const cachedContent = storage.get(tomorrow); if (!cachedContent) { // 1. 读取明日的主题设置 (默认为随机或用户指定) const theme = userSettings.getTheme(tomorrow); // 2. 构建 Prompt const prompt = buildPrompt(tomorrow, theme); // 3. 异步调用 API (不阻塞 UI) api.generateImage(prompt).then(img => { storage.save(tomorrow, img); }); }
- Prompt 构建:结合日期特征(如“周五”、“中秋”)和用户主题。
- 在首次启动时引导用户输入 NanoBanana API Key。
- 密钥仅存储在本地设备,确保安全性。
- 基础日历界面搭建(日视图+月视图)。
- NanoBanana API 配置与联调。
- 每日一图功能(基于默认 Prompt)。
- “提前一天”的静默生成逻辑。
- “定制明日”功能界面开发。
- 科普文案的展示(初期可使用静态库或简单的规则生成)。
- 插画卡片的分享功能。
- 接入 LLM 自动生成与图片匹配的科普文案。
- 历史画廊(Gallery)回顾模式。