番茄工作法应用

举报
yd_292659020 发表于 2026/10/20 00:45:01 2026/10/20
【摘要】 从零到上架:用 AI 开发一款现代化番茄工作法应用2026-10-20 · 开发实录 前言番茄工作法(Pomodoro Technique)由 Francesco Cirillo 在 1980 年代提出,核心理念很简单:用 25 分钟专注 + 5 分钟休息的循环,对抗拖延、保持高效。方法本身不复杂,但一款好的工具能让坚持变得更容易。这篇文章记录了我在华为云开发环境中,借助 AI Agent...

从零到上架:用 AI 开发一款现代化番茄工作法应用

2026-10-20 · 开发实录

前言

番茄工作法(Pomodoro Technique)由 Francesco Cirillo 在 1980 年代提出,核心理念很简单:用 25 分钟专注 + 5 分钟休息的循环,对抗拖延、保持高效。方法本身不复杂,但一款好的工具能让坚持变得更容易。

这篇文章记录了我在华为云开发环境中,借助 AI Agent 从零构建一款现代化番茄工作法 Web 应用,并最终发布到华为云开发者作品展览馆的完整过程。


一、需求定义

在动手之前,我先明确了几个关键方向:

维度 决策 理由
技术栈 纯 HTML + CSS + JavaScript 零依赖、零构建、打开即用,降低使用门槛
目标用户 大众用户 界面需要直观、美观、无需学习成本
界面风格 现代深色风 沉浸感强,适合专注场景
部署方式 静态托管 三个文件即可运行,无需后端

核心功能清单:

  • 三种计时模式:专注(25min)、短休息(5min)、长休息(15min)
  • 圆形进度动画 + 大号数字显示
  • 智能模式切换:每 4 个番茄钟后自动进入长休息
  • 任务清单:添加、完成、删除,可设预估番茄钟数
  • 今日统计:完成数量、专注时长
  • 自定义设置 + 提示音 + 数据持久化

二、开发过程

2.1 环境准备

开发在华为云 CodeArts 沙箱中进行。整个环境通过 AI Agent 编排:

  1. ACP 服务健康检查 — 确认 CodeArts Agent 服务可用(端口 19300)
  2. 沙箱路径获取 — 从 registry.json 读取 CodeArts 沙箱工作目录
  3. 创建项目目录 — 在沙箱内建立 pomodoro-app 子目录
  4. 建立 ACP 会话 — 通过 acpx 客户端与 CodeArts 建立 WebSocket 连接

2.2 代码生成

向 CodeArts 发送了详细的构建指令,包含功能需求和 UI 设计规范:

配色方案:
  - 专注模式 → 暖红色系 (#e74c3c)
  - 短休息   → 绿色系 (#27ae60)
  - 长休息   → 蓝色系 (#3498db)
  - 背景     → 深色渐变

视觉要求:
  - SVG 圆环进度动画
  - 毛玻璃效果 (backdrop-filter: blur)
  - 平滑过渡 + 微交互
  - 响应式设计

CodeArts 一次性生成了三个文件:

文件 行数 职责
index.html 212 页面骨架:标题栏、模式切换、计时器、任务列表、设置面板、统计区
style.css 889 全部样式:深色渐变背景、毛玻璃卡片、SVG 动画、响应式布局
script.js 539 全部逻辑:计时引擎、状态机、任务管理、统计、提示音、持久化

2.3 核心实现解析

计时引擎

计时器采用 setInterval 每秒更新,通过剩余时间比例驱动 SVG 圆环的 stroke-dashoffset:

// 圆环进度 = 周长 × (1 - 已用时间 / 总时间)
const circumference = 2 * Math.PI * radius;
const offset = circumference * (1 - elapsed / total);
circle.style.strokeDashoffset = offset;

番茄钟状态机

三种模式之间的切换遵循状态机逻辑:

专注 ──完成──→ 短休息(第 1~3 个番茄钟后)
专注 ──完成──→ 长休息(第 4 个番茄钟后)
短休息 ──结束──→ 专注
长休息 ──结束──→ 专注(计数器归零)

每完成一个专注时段,番茄钟计数器 +1。当计数器达到 4 的倍数时,下一个休息为长休息。

Web Audio API 提示音

无需任何音频文件,用 Web Audio API 合成三音阶提示音:

const audioCtx = new AudioContext();
[523.25, 659.25, 783.99].forEach((freq, i) => {
  const osc = audioCtx.createOscillator();
  const gain = audioCtx.createGain();
  osc.frequency.value = freq;
  osc.connect(gain);
  gain.connect(audioCtx.destination);
  // 包络控制音量和持续时间
  osc.start(audioCtx.currentTime + i * 0.15);
  osc.stop(audioCtx.currentTime + i * 0.15 + 0.3);
});

数据持久化

设置和今日统计通过 localStorage 保存,按日期键值分隔,跨天自动重置统计:

const today = new Date().toISOString().split('T')[0];
localStorage.setItem(`pomodoro:stats:${today}`, JSON.stringify(stats));

三、预览与验证

3.1 本地预览

项目通过 python3 -m http.server 在端口 8080 启动,HTTP 200 验证通过。

3.2 DevBridge 隧道

为了从外部访问预览,创建了 DevBridge 开发隧道:

隧道 ID: yp2yoj4v
公网 URL: https://yp2yoj4v-8080.devbridge-s2.hwtunnel.com
协议: auto(自动检测 HTTP/HTTPS)
匿名访问: 开启
有效期: 72 小时

隧道通过华为云中继基础设施转发,无需开放公网入站端口。


四、代码托管

4.1 GitCode OAuth 授权

通过 GitCode OAuth 两阶段流程获取访问令牌:

  1. 阶段一:启动本地回调服务器,生成登录链接和二维码
  2. 阶段二:用户在浏览器授权后,轮询收尾,token 写入 ~/.gitcode/auth.toml

4.2 创建仓库并推送

# 创建仓库
curl -X POST "https://gitcode.com/api/v5/user/repos" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"name":"pomodoro-app","private":false}'

# 推送代码
git remote add origin https://gitcode.com/gcw_nfhkuMAb/pomodoro-app.git
git push -u origin master

仓库地址:https://gitcode.com/gcw_nfhkuMAb/pomodoro-app


五、发布到作品展览馆

发布流程遵循华为云高校运营平台的 8 步管线:

5.1 IAM 域名解析与 STS 凭证

Domain ID: fdd7452098ca4fb1aa8b652fbfd14187
STS 凭证: 临时 AK/SK + Security Token(900s 有效期)

通过 IAM 自委托 SELF_VERIFY 生成临时凭证,永久 AK/SK 不离开本地。

5.2 封面图生成

步骤 工具 说明
字体门禁 preflight.sh 安装 Noto CJK 字体 + Playwright Chromium
编码门禁 ensure-utf8.mjs 校验所有文件 UTF-8 编码
截图合成 build-cover.mjs Playwright 截图 → 合成 16:9 封面
字形校验 verify-glyphs.py 像素级检测,排除豆腐块乱码

最终封面:1280×720 PNG,521KB,字形校验通过。

5.3 架构图与详情文章

用 HTML + CSS 手写系统架构图,通过 Playwright 渲染为 PNG:

表现层 (UI)          逻辑层 (Core)         持久层 (Storage)
┌──────────┐       ┌──────────┐        ┌──────────┐
│ 计时器模块 │       │ 计时引擎  │        │ localStorage│
│ 模式切换  │       │ 状态机    │        │ 设置存储   │
│ 任务清单  │       │ 任务管理器│        │ 统计存储   │
│ 设置面板  │       │ 统计聚合  │        │ 任务存储   │
│ 统计仪表盘│       │ 提示音    │        └──────────┘
└──────────┘       └──────────┘

详情文章 3500+ 字,涵盖项目简介、核心功能、技术架构、设计理念和使用方式,与架构图一起打包为 zip。

5.4 门禁复核与发布

发布前通过全部门禁复核:

  • ✅ preflight 门禁
  • ✅ UTF-8 编码门禁
  • ✅ 截图保护门禁
  • ✅ 封面比例 16:9
  • ✅ 详情包结构校验
  • ✅ 隧道可达性检查

最终发布请求返回 201 Created:

{
  "workId": "00669a2996800000",
  "workName": "番茄工作法 · Pomodoro",
  "workUrl": "https://gallery.developer.huaweicloud.com/gallery/00669a2996800000",
  "reward": { "is_success": true, "value": 200, "msg": "成功" }
}

六、项目结构

pomodoro-app/
├── index.html       # 页面结构(212 行)
├── style.css        # 现代化样式(889 行)
├── script.js        # 交互逻辑(539 行)
├── README.md        # 项目说明
└── resources/
    └── architecture.png  # 系统架构图

七、功能一览

功能 实现方式 备注
三种计时模式 状态机切换 配色随模式变化
圆形进度动画 SVG stroke-dashoffset 平滑过渡
开始/暂停/重置 按钮点击 + 键盘快捷键 空格启停、R 重置
智能模式切换 番茄钟计数器取模 每 4 个进入长休息
任务清单 DOM 动态渲染 可设预估番茄钟数
今日统计 实时聚合 + localStorage 跨天自动重置
自定义设置 设置面板 时长/间隔/提示音/自动开始
提示音 Web Audio API 三音阶合成,无音频文件
数据持久化 localStorage 设置 + 统计 + 任务列表
响应式设计 CSS media query 适配手机和桌面

八、总结与反思

做得好的地方

  1. 技术选型克制 — 纯三件套,零依赖零构建,任何人打开浏览器就能用
  2. UI 设计投入 — 深色渐变 + 毛玻璃 + SVG 动画,视觉质感不输框架方案
  3. 功能完整度高 — 从计时到任务管理到统计到设置,形成完整闭环
  4. 发布流程自动化 — 从截图到门禁到上传,全流程脚本化

可以改进的方向

  1. 历史统计 — 目前只统计今日数据,可以增加周/月维度
  2. 数据同步 — localStorage 限于单设备,可考虑接入云同步
  3. PWA 支持 — 加 manifest + service worker,支持离线使用和安装到桌面
  4. 主题切换 — 目前固定深色,可增加浅色主题选项
  5. 国际化 — 目前中文硬编码,可抽离 i18n

开发效率

整个流程从需求定义到作品上架,在 AI Agent 辅助下高效完成:

  • 代码生成:CodeArts 一次性产出 1640 行代码
  • 环境配置:DevBridge 隧道 + GitCode OAuth 全自动化
  • 发布上架:8 步管线串行执行,门禁全通过

传统流程中,截图、封面合成、仓库创建、OAuth 授权、门禁校验这些步骤每一步都需要手动操作和等待。脚本化之后,从代码完成到作品上架的「最后一公里」变得可复现、可自动化。


相关链接


本文记录于 2026-10-20,开发环境为华为云 CodeArts 沙箱 + DevBridge 隧道。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。