返回作品

Anycast

AI 播客播放器。任何播客、任何语言、任何场景——三个 any 拼起来的产品。

AI 播客播放器——任何播客、任何语言、任何场景。RSS/OPML 自由订阅,端上语音问答,把一集变成可以提问的对象。iOS 端从产品、视觉到工程由我独立实现。

AI Chat 不是套壳聊天:一个 LLM→工具→LLM 的 agent 循环,模型能直接操作 app——播放、加队列、剪藏、订阅。背后的 LLM provider 是一层可插拔抽象,任何 OpenAI-compatible endpoint 填 base URL 与 key 即用,换模型零改动。

转写/翻译按成本选型:对比 6 套 ASR 与多套翻译后,选 iOS 26 端上 SpeechAnalyzer + Translation,把边际成本压到接近 $0、离线且隐私。iOS 端从 SwiftUI 起步快速验证,再为 60fps 转场精修整体重写为 UIKit。

年份
2026
角色
产品 + 视觉 + iOS 开发
工具
Figma · SwiftUI · UIKit · Xcode 26 · xcodegen
01

AI Chat

把单集变成可提问的对象——要摘要、找一句原话、回到一个观点的来源。

02

AI Transcription

把英语、法语、德语、西语、意语、日语、中文以及更多语言实时转成可读字幕。

  • 双语对照适合语言学习
  • 全文一键导出到 notes 应用
03

RSS & OPML

不锁仓——任何 feed 可订阅,任何订阅可 OPML 导出。

04

Global Access

把几十个国家的内容仓库装进同一个 app。

工程实现

AI Chat 背后是一个会调工具的 agent 循环 + 一层可插拔的模型抽象——下面是关键链路与取舍。

链路

RSS/OPML 订阅
AVPlayer 播放
端上转写 + 翻译
双语 transcript
AI Chat · agent 循环

AI Chat 背后的 LLM 是可插拔的:任何 OpenAI-compatible endpoint 即插即用。

工程决策

决策
可插拔 LLM provider

不写死某一家模型。

LLMProvider 协议 + OpenAIProvider;OpenRouter / Azure / 自建 proxy 填 base URL + key 即用,换模型零改动。

决策
会操作 app 的 agent

回答不够,要能真的执行。

AgentSession 跑 LLM→工具→LLM 循环,ToolRegistry 暴露 6 类工具(播放 / 队列 / 剪藏 / 订阅 / 历史 / 收件箱),带流式、可中断、最大迭代保护。

决策
端上转写,边际成本 ~$0

按成本 / 隐私 / 离线选型,不追新。

对比 6 套 ASR + 多套翻译,选 iOS 26 端上 SpeechAnalyzer + Translation;实算全端上 ~$0、云 LLM 翻译变体 ~$24–44/月。

决策
SwiftUI → UIKit 重写

多手势 + 多层 shadow 顶不住 60fps 转场的命中测试 / 重绘成本。

精修阶段下沉到 UIKit 拿回逐帧控制,可逆交互式转场 mid-morph 不糊。

iOS 交互的 web 复刻

同一套交互物理,我用 React + Motion 在浏览器里复刻了一遍——可调参,并与 SwiftUI 源码对照。

设计 token

数值直接来自仓库内 DesignTokens.swift 与 Spacing.swift。

颜色

Sand · 10 阶

1
#FDFDFC
2
#F9F9F8
3
#F1F0EF
4
#E9E8E6
6
#DAD9D6
7
#CFCECA
9
#8D8D86
10
#82827C
11
#63635E
12
#21201C

Gold

9
#978365
10
#8C7A5E

Orange · accent

accent
#EF5F00

Player 暗色

bg
#222221
warm
#867D75

字体

  • display
    Anycast
    48px · SF · 加粗 · 加宽
  • screenTitle
    Continue listening
    32px · 屏幕标题
  • rowLabel
    Continue listening
    17px · 列表行 · 主文本
  • body
    Continue listening
    14px · 正文
  • caption
    Continue listening
    12px · 辅助

间距 · 4pt 网格

xs
4
sm
6
md
8
row
10
gap
12
chip
14
pageH
16
cardInner
20
pageHeader
24
sectionGap
28
large
32
xl
40
xxl
48