Portfolio2026 · Chengdu, China中国成都

Christian.

I build software and the way it feels: the protocol underneath, the app people touch, and the motion and film that explain it.我写软件,也设计它给人的感觉:底层的协议、人手里的应用,以及把它讲清楚的动效和短片。

林光 · two trunks and a beam of light. Click to replay.林光 · 两根树干,一束光。点击重播。

01Hello你好

I take an idea all the way: from the wire protocol to the last frame of the animation.我喜欢把一个想法做到底:从底层协议,一直到动画的最后一帧。

4

Systems系统

Rust and TypeScript services that stay correct when the network does not.网络出问题时,依然算得对的 Rust 和 TypeScript 服务。

3

Apps应用

Desktop, phone and Mac apps that feel native, down to the glass.让人感觉原生的桌面、手机和 Mac 应用,细到玻璃质感。

1

Brand & film品牌与短片

A mark built from one geometry, and a film cut on the beat.从一份几何长出来的标志,和一部踩着节拍剪的短片。

02Selected work作品

Eight projects, each with its own story.八个项目,各有各的故事。

From a one-evening Mac tool to a system that spans three devices. Each page covers the problem, what I built, how it works and what I learned.从一个晚上就能用上的 Mac 小工具,到横跨三台设备的系统。每个详情页都写了问题、我做了什么、怎么做的,以及我学到了什么。

  1. 01MD_readerApps应用Native macOS app · Swift + PythonmacOS 原生应用 · Swift + PythonPrivate repo · personal tool私有仓库 · 自用工具A quiet Markdown reader for the Mac: a native window around an offline renderer, with code, diagrams, math, search and keyboard navigation.一个安静的 Mac Markdown 阅读器:原生窗口里装着离线渲染,支持代码、流程图、公式、全文搜索和键盘导航。
  2. 02llm-provider-kitSystems系统Rust library · open sourceRust 库 · 开源Public · Apache-2.0公开 · Apache-2.0A Rust crate that speaks three LLM wire protocols and turns their streams into one event type, with OAuth and device-code logins.一个 Rust 库:讲三种大模型通信协议,把它们的流统一成一种事件,并支持 OAuth 和设备码登录。
  3. 03Jm2apiSystems系统Full-stack TypeScript · Bun + Hono + React全栈 TypeScript · Bun + Hono + ReactPrivate repo私有仓库A video-generation API protocol adapter. Server and admin panel share one zod type contract; load balancing and an asset-mapping layer sit in between.一个视频生成 API 协议适配器。服务端和管理面板共用一份 zod 类型契约,中间是负载均衡和素材映射层。
  4. 04accc-LibraSystems系统Java · Spring Boot · SQLiteJava · Spring Boot · SQLitePrivate repo私有仓库A Spring Boot web app: a captcha-verified public page, a password-protected admin page with single entry and CSV batch import, and SQLite storage created on startup.一个 Spring Boot Web 应用:带人机验证的公开页、有口令保护的管理页(单条录入和 CSV 批量导入),以及启动时自动建表的 SQLite 存储。
  5. 05LynShen GatewayLynShen 网关Systems系统 · LynShenRust service · React consoleRust 服务 · React 控制台Private repo私有仓库A Rust gateway that translates between three AI API dialects by meaning, not field names, and routes each request with retries and health checks.一个 Rust 网关:在三种 AI API 协议之间按含义转换,而不是按字段名;每条请求都有重试和健康检查的路由。
  6. 06Aogiri Desktop + CLIAogiri 桌面端 + CLIApps应用 · LynShenTauri + Svelte · Rust engineTauri + Svelte · Rust 引擎Shipped · desktop v0.10.4 · CLI v0.7.8已发布 · 桌面端 v0.10.4 · CLI v0.7.8A desktop workbench for coding agents and the Rust engine behind it: plans, subagents, approvals, and a phone that can answer them.给编程智能体用的桌面工作台,以及背后的 Rust 引擎:计划、子智能体、审批,还能在手机上回复审批。
  7. 07Aogiri for iPhone & AndroidAogiri 手机端Apps应用 · LynShenReact Native · Swift · KotlinReact Native · Swift · KotlinIn development · v0.1.0开发中 · v0.1.0A pocket companion called Lumen that sets real alarms, writes to your calendar, and approves your computer’s next step.口袋里的伙伴 Lumen:能定真的闹钟、写日历,也能替你批准电脑的下一步。
  8. 08Brand, motion & film品牌、动效与短片Brand & film品牌与短片Logo system · launch animation · 60-second film标志系统 · 开屏动画 · 60 秒短片Shipped in desktop v0.10已随桌面端 v0.10 发布The 林光 mark (two trunks and a beam of light), its launch animation, and a 60-second film cut to a 100 BPM grid.「林光」标志(两根树干和一束光)、它的开屏动画,以及一部按 100 BPM 节拍剪辑的 60 秒短片。

03Lab试一试

Don’t take my word for it. Touch it.别光听我说,动手试试。

Three small, real behaviours from my projects, rebuilt to run in your browser. Sample data only; nothing leaves this page.从我的项目里挑了三个真实的小行为,重写成能在浏览器里跑的版本。只用示例数据,什么都不会离开这个页面。

Break an upstream. Watch the request find a way.弄坏一个上游,看请求自己找到出路。

Click an upstream to take it down. Requests try the waterfall in order with bounded retries; after three failures a circuit breaker opens and the upstream is skipped until a probe succeeds.点一下上游就能把它弄坏。请求按瀑布顺序尝试,重试次数有上限;连续失败三次,熔断器打开,这个上游会被跳过,直到探测成功。

Sample · runs in your browser示例 · 在你的浏览器里运行
Your app你的应用POST /v1/responses
Gateway网关Router路由器

    04Craft手艺

    Make it clear. Then make it move.先让它清楚,再让它动起来。

    From a warm brown box to floating glass.从暖棕色方块,到浮起来的玻璃。

    My redesign of the Aogiri phone app. Drag the handle, or focus it and use the arrow keys. A neutral base, one accent colour for one meaning, lighter type, and a rim of light on every glass control: bright on top, fading down the sides.我对 Aogiri 手机端做的一次改版。拖动把手,或者聚焦后用方向键。中性底色,一种强调色只表达一种含义,字更轻,每个玻璃控件都有一圈光边:上沿亮,往两侧渐暗。

    The full phone story →手机端的完整故事 →
    After: the Today page
    Before: the Today page
    After: the companion chat
    Before: the companion chat

    Lumen notices you.Lumen 会注意到你。

    The ember companion from the phone app. Move your pointer and it leans and looks; tap it and it squishes. It breathes on a 4-second cycle and blinks at random, never on a timer you can see.手机端里那团小小的光。移动指针,它会侧身去看;点它一下,它会缩一缩。它按 4 秒一次呼吸,眨眼的间隔是随机的,不会让你看出规律。

    Two trunks and a beam of light.两根树干,一束光。

    The beam never touches a trunk, so it reads as light, not as the third stroke of an N. One geometry drives every icon, the launch animation, this site’s mark and Lumen’s colours. Click a mark to replay it.光不碰树干,所以读作「光」,而不是 N 的第三笔。同一份几何驱动所有图标、开屏动画、本站的标志和 Lumen 的配色。点击标志可以重播。

    The promo film I storyboarded and directed: 60 seconds, 25 bars at 100 BPM, built in Remotion from real screen recordings with demo data. A review cut; a few screens still show the earlier logo.我画分镜、做导演的宣传片:60 秒,100 BPM 下 25 小节,用 Remotion 搭建,素材是真实录屏和演示数据。这是审片版,部分画面里还是旧标志。

    05Notes札记

    What building has taught me.做东西教会我的事。

    “Done” and “good” are far apart.「能用」和「好」,隔得很远。

    Getting something to work takes a day. Getting it to feel right takes weeks, and almost nobody notices those weeks. They only notice when it’s missing. I’ve come to love that last stretch. It’s where a thing stops being mine and starts being something someone else can trust.

    把一个东西做到「能用」,也许一天就够;做到「对了」,要好几个星期,而且几乎没人会注意到这几个星期,只有缺了的时候才会被发现。我慢慢喜欢上了这最后一段路:一个东西就是在这里,从「我的作品」变成了「别人可以放心用的东西」。

    Honesty is a feature.诚实,本身就是一种功能。

    It’s tempting to report only good news. But when I started saying plainly what didn’t work yet, people trusted my good news more. I would rather show an honest “not yet” than a confident “done” that isn’t true.

    只报喜不报忧是很诱人的。可当我开始坦白地说出「这里还没做好」,别人反而更相信我说的好消息。我宁愿给出一个诚实的「还没好」,也不愿给一个看起来很自信、却不真实的「完成了」。

    Listen longer than feels necessary.多听一会儿,比你觉得需要的更久。

    I have been sure about what people needed many times, and wrong almost as often. What they actually wanted was simpler and more human than my plan. A plan is my guess. What people say is the closest thing I have to the truth.

    我很多次笃定地以为自己知道别人需要什么,又几乎同样多次地错了。他们真正想要的,往往比我的计划更简单,也更贴近生活。计划只是我的猜测,别人说出口的话,才是我能拿到的、最接近真相的东西。

    Limits are where the ideas come from.限制,是好点子的来处。

    Small budgets, slow machines, rules I can’t change. Each limit first felt like a wall. Each one later turned out to be the reason the final idea was cleaner. I’ve stopped asking “what would I do without this limit?” and started asking “what is the best thing I can do inside it?”

    预算少、电脑慢、改不了的规则,每一个限制一开始都像一堵墙,后来却都成了最终方案更干净的原因。我不再问「如果没有这个限制我会怎么做」,而是问「在这个限制里,我能做到的最好是什么」。

    Courage comes from being able to go back.勇气,来自能退回去。

    I used to hesitate before big changes. Now I make sure every step can be undone, and then I move quickly. Being brave isn’t about not being afraid of mistakes. It’s about making mistakes cheap.

    以前做大改动之前我会犹豫很久。现在我会先确保每一步都能退回来,然后放心地快走。勇敢不是不怕犯错,而是让犯错变得不那么昂贵。

    The tools changed. The responsibility didn’t.工具变了,责任没有变。

    I build a lot of my work together with AI. It makes me faster, but it doesn’t decide for me. Knowing what is worth making, saying no when something is almost right, and owning the result are still my job. If anything, they matter more now.

    我的很多作品是和 AI 一起完成的。它让我更快,却不会替我做决定。判断什么值得做、在「差一点」的时候说不、为最后的结果负责,这些仍然是我的事。甚至可以说,这些比以前更重要了。

    06About关于我

    Christian

    I’m a student builder in Chengdu. I work across the whole stack, from Rust services to native apps, and I care most about the details people feel but rarely name: an honest error message, a control that answers your hand, an animation that explains what just happened.我是成都的一名学生开发者。我的工作横跨整个技术栈,从 Rust 服务到原生应用;我最在意的,是那些人能感觉到、却很少说出口的细节:一句诚实的报错、一个跟手的控件、一段把刚才发生了什么讲清楚的动画。

    These days I also lead a small team of AI coding agents: I write the brief, set what “done” means, and review every result before it ships. Each project page states exactly what my role was.现在我还带着一个由 AI 编程助手组成的小团队:任务说明由我来写,「做完」的标准由我来定,每个结果上线前都由我检查。每个项目页都写清楚了我具体负责什么。

    Location所在地
    Chengdu, China中国成都
    Email邮箱
    crislynn063@gmail.com
    GitHub
    github.com/Libra1337