07LynShenReact Native · Swift · KotlinReact Native · Swift · Kotlin

Aogiri for iPhone & AndroidAogiri 手机端

A pocket companion called Lumen that sets real alarms, writes to your calendar, and approves your computer’s next step.口袋里的伙伴 Lumen:能定真的闹钟、写日历,也能替你批准电脑的下一步。

My role我的角色
Sole author. I designed and built it end to end.独立作者。从设计到实现,都由我一个人完成。
Status状态
In development · v0.1.0开发中 · v0.1.0
The Today page: a two-line headline, mood and weather chips, and today's agenda.
The Computer tab: paired computer status and sessions.
22native modules (Swift, Kotlin)个原生模块(Swift、Kotlin)
312312unit tests (Vitest)个单元测试(Vitest)
1010design changes in the glass redesign项「通透」改版改动

01The problem问题

An assistant that talks, but can’t do.会聊天,却办不了事的助手。

Chat ends at text聊天停在文字

Asking an assistant to “wake me at 7” usually ends with instructions, not an alarm.让助手「明早 7 点叫我」,通常得到的是操作说明,而不是一个闹钟。

Actions need receipts动作需要回执

When an app acts for you, you need to see exactly what it did, and undo it in one tap.应用替你做事时,你得清楚看到它做了什么,并且一下就能撤销。

Your computer is elsewhere电脑不在手边

The desktop agent needs a person for risky steps. The phone is the one device that is always with you.桌面智能体在有风险的步骤上需要人来拍板,而手机是唯一一直在你身边的设备。

02What I built我做了什么

A companion with hands.一个能动手的伙伴。

Three swipeable tabs: 伙伴 (companion), 今天 (Today) and 电脑 (Computer). Lumen, a glowing ember you can name and reshape, lives in every top bar and reacts to what it is doing.三个可以左右滑动的标签:伙伴、今天和电脑。Lumen 是一团可以取名、可以换形状的光,待在每个页面的顶栏里,并随着它在做的事变换神态。

  • Real alarms and timers through AlarmKit (iOS 26+), calendar events, system reminders, maps hand-off, calls, SMS and mail.通过 AlarmKit(iOS 26+)设置真正的闹钟和计时器,写日历、系统提醒,交给地图导航,打电话、发短信和邮件。
  • On Android, screen control through Shizuku: read the screen, tap, type, swipe, toggle settings, with confirmation first.在 Android 上通过 Shizuku 控制屏幕:读屏、点按、输入、滑动、切换设置,先确认再执行。
  • Every action becomes a ledger line under the reply, with Undo.每个动作都会在回复下面记成一行账本,可以撤销。
  • The computer remote: QR pairing with a 6-digit check code, live sessions, the plan sheet, approvals with Face ID, and push with Allow/Deny actions.电脑遥控:扫码配对加 6 位校验码,实时会话、计划面板、需要 Face ID 的审批,以及带「允许 / 拒绝」按钮的推送。

03How it works怎么做的

JavaScript for the product, native code where the OS insists.产品逻辑用 JavaScript,系统要求的地方用原生代码。

  1. STEP 01

    “Wake me at 7”「明早 7 点叫我」

    Said to the companion.对伙伴说一句话。

  2. STEP 02

    Tool call工具调用

    set_alarm with a time.带时间的 set_alarm。

  3. STEP 03

    Native module原生模块

    Swift → AlarmKit.Swift → AlarmKit。

  4. STEP 04

    Ledger line账本行

    What was done, with Undo.做了什么,可撤销。

04Interface and details界面与细节

Ask once. See exactly what happened.说一次,就看清发生了什么。

  1. Companion chat: an alarm was set, shown as a ledger line with Undo.
    01 / 06

    A real alarm, with a receipt真的闹钟,带回执

    The companion calls the system alarm and writes what it did under the reply. One tap undoes it.伙伴调用系统闹钟,并把做了什么写在回复下面。点一下就能撤销。

  2. A calendar event created from the chat.
    02 / 06

    Into your calendar写进你的日历

    Events land in the system calendar, not a private list, so every other app sees them too.事件写进系统日历,而不是应用自己的列表,所以其他应用也能看到。

  3. The Today page with reminders and open to-dos.
    03 / 06

    Today, in two lines今天,两行写完

    A calm headline (mood, then weather and weekday) over an agenda of reminders and to-dos, plus a check-in calendar.安静的标题(心情,然后是天气和星期),下面是提醒和待办,还有签到日历。

  4. Android: a confirmation before turning on airplane mode through Shizuku.
    04 / 06

    Android can go furtherAndroid 能走得更远

    With Shizuku the companion can change settings or operate another app, and always asks first.有了 Shizuku,伙伴能改设置、操作别的应用,而且每次都先问你。

  5. Computer remote: an approval card for the desktop agent.
    05 / 06

    Your computer, in your pocket口袋里的电脑

    Sessions stream live from the paired computer. Approvals arrive as a deck of cards; risky ones require Face ID.已配对电脑上的会话实时同步过来。审批以一叠卡片的形式出现;有风险的需要 Face ID。

  6. The plan sheet for a running session.
    06 / 06

    The same plan, everywhere同一份计划,到处都一样

    The plan you saw on the desktop opens as a sheet on the phone, step by step, with who is doing what.电脑上看到的计划,在手机上以面板打开,逐步列出,谁在做什么一目了然。

✦The glass redesign通透改版

Before and after. Drag the light.改版前后。拖动这道光。

Ten changes, each with a reason, checked on an iOS simulator and an Android emulator in dark and light. Drag the handle, or focus it and use the arrow keys. Pick a screen below.十项改动,每项都写了理由,在 iOS 模拟器和 Android 模拟器的深浅两种模式下检查过。拖动把手,或者聚焦后用方向键。在下面选一个页面。

Before改版前

  • Warm brown surfaces everywhere到处是暖棕色底
  • 40 pt bold headline, three lines三行 40pt 粗体标题
  • Flat grey edges on every control每个控件都是平平的灰边
  • Amber used for five different meanings琥珀色同时表达五种意思
After: Today
Before: Today

After改版后

  • A neutral base, so content leads中性底色,让内容先说话
  • 26 pt medium, two lines两行 26pt 中等字重
  • A rim of light: bright on top, fading down一圈光边:上沿亮,往下渐暗
  • Amber only for the companion and the one primary action琥珀色只留给伙伴和唯一的主操作

Three tabs you can swipe.三个能滑动的标签。

The tab bar is an icon-only glass capsule next to an amber “talk to companion” button that becomes the message field on the chat tab. Android has no system blur, so it gets a translucent chrome with a top-lit gradient instead.标签栏是一枚只有图标的玻璃胶囊,旁边是琥珀色的「和伙伴说」按钮,在对话页会变成输入框。Android 没有系统模糊,所以改用半透明底加顶光渐变。

05Tech used用到的技术

What it’s made of.用什么做的。

App应用
  • Expo 57
  • React Native 0.86
  • React 19
  • Expo Router
  • Reanimated 4
  • react-native-svg
  • zustand 5
  • TypeScript 6
Native原生
  • Swift · AlarmKit
  • App Intents
  • Kotlin · Shizuku
  • 5 config plugins5 个配置插件
Security安全
  • Noise IK (@noble)
  • Keychain
  • Face ID / passcode
  • APNs · FCM
Design设计
  • Night Lamp design system「夜灯」设计规范
  • 3 glass materials3 种玻璃材质
  • 4 pt grid4pt 网格
  • System fonts, 3 weights系统字体,3 种字重
Quality质量
  • 312 Vitest tests312 个 Vitest 测试
  • iOS simulator + Android emulator shotsiOS 模拟器 + Android 模拟器截图验收

06What I learned我学到了什么

Lessons I’ll keep.会一直记得的几件事。

  1. Show the work. The ledger line with Undo did more for trust than any wording. People relax when they can see and reverse an action.把做了什么摆出来。带「撤销」的账本行,比任何措辞都更能建立信任。能看到、能撤回,人就放心了。
  2. Restraint is a feature. The redesign removed colour more than it added it: amber now means “the companion” or “the one thing to press”.克制本身就是功能。这次改版删掉的颜色比加的多:现在琥珀色只代表「伙伴」或「唯一该点的那个按钮」。
  3. Platforms differ; respect it. Android has no system blur and iOS has no Shizuku. Each platform got its own best version instead of a lowest common denominator.平台不同,就尊重不同。Android 没有系统模糊,iOS 没有 Shizuku。每个平台都做到自己最好的版本,而不是取最低公约数。