Levi Lei

iOS · Full-stack TypeScript · Shanghai

雷子康

I build native iOS and macOS apps in Swift, and the TypeScript services behind them. Three years of iOS. Two years of full-stack TypeScript. Six Mac apps shipped, five of them on the Mac App Store. Looking for iOS or full-stack roles in Shanghai, Hangzhou, Suzhou, or remote in China.

Open to new roles · Shanghai / Hangzhou / Suzhou / Remote

6 Mac apps Five on the Mac App Store, one notarized direct download. SwiftUI, AppKit, WidgetKit, IOKit.
3 yrs iOS Swift, UIKit, SwiftUI, Swift Concurrency. Banking and retail apps, large mixed Swift / Objective-C codebases.
2 yrs TypeScript Three shipped client projects with Next.js, Node.js, Prisma, PostgreSQL and Redis / BullMQ.
4 agent tools Open source, built on Claude Code and Codex: multi-agent job search, shared project memory, Claude-to-Codex delegation.

Shipped apps

Six Mac apps I build and maintain myself, using AI coding tools (Claude Code, Codex). Five are live on the Mac App Store; Linger ships as a free, notarized download. Glasswitch and Voltyn build on open-source code, credited on their cards.

Linger floating lyrics window, from the website demo Menu bar

Linger

v0.9 public beta · macOS 14+ · Apple silicon & Intel · free

Synced desktop lyrics for NetEase Cloud Music, Spotify and Apple Music. A floating lyrics window that takes its colors from the album art, with word-by-word highlighting and translations when the source provides them.

How it's built

Written in Swift 6 with strict concurrency. Spotify and Music are read over AppleScript. macOS 15.4 blocks third-party apps from reading Now Playing directly, so NetEase playback comes from a long-running JXA helper process that the app supervises and restarts with backoff. Lyrics come from LRCLIB and NetEase, and the first synced result wins.

Shipped outside the Mac App Store: Developer ID signing, notarization, Sparkle auto-updates, and a GitHub Actions release pipeline that publishes a new version from a git tag. From first prototype to public beta in two weeks.

  • Swift 6
  • AppKit
  • SwiftUI
  • JXA
  • Sparkle
  • GitHub Actions
Voltyn screenshot from the Mac App Store listing Menu bar

Voltyn

v2.0 · macOS 14+ · Apple Silicon MacBooks · paid

Menu bar power monitor. Live system power with a 60-second trend, power flow, battery health and charging details, local history, and a desktop widget.

How it's built

Reads battery and power-source data through IOKit, keeps history in SQLite, and hands a snapshot to the WidgetKit extension through an App Group. No account, no telemetry. The IOKit reading layer is derived from the MIT-licensed PowerTop and credited in the app.

  • SwiftUI
  • AppKit
  • IOKit
  • WidgetKit
  • SQLite
Glasswitch screenshot from the Mac App Store listing Menu bar

Glasswitch

v1.1 · macOS 26+ · paid

Shows your Mac's default browser in the menu bar and switches the system HTTP / HTTPS handler to any installed browser. Stays in sync when the default is changed elsewhere.

How it's built

Built on the open-source default-browser-switcher (MIT). My changes: a macOS 26 Liquid Glass interface, a sandboxed Mac App Store variant that uses only the public NSWorkspace API, English / Simplified Chinese UI, background sync with the system default, and the App Store release, website and support site.

  • SwiftUI
  • AppKit
  • NSWorkspace
  • App Sandbox
  • SMAppService
  • Combine
Codex Session Viewer screenshot from the Mac App Store listing Developer tools

Codex Session Viewer

v1.0 · macOS 26+ · free

Browses local Codex CLI session logs. Built in 2025, when Codex was CLI-only: it finds and parses the JSONL session archives, groups them by month and renders the full conversation timeline.

How it's built

Asks for folder access once and keeps security-scoped bookmarks, so it does not prompt again. Source is public.

  • SwiftUI
  • JSONL parsing
  • Security-scoped bookmarks
UTC Time Looker screenshot from the Mac App Store listing Developer tools

UTC Time Looker

v1.0 · macOS 15.5+ · paid

Converts UTC dates, ISO 8601 strings and Unix timestamps into local and other time zones as you type. I wrote it for reading UTC times in backend logs.

How it's built

SwiftUI front end over a Foundation-based parser. The repo has unit tests for parsing, DST and UTC offsets. Open source (MIT).

  • SwiftUI
  • Foundation
  • Unit tests
MindNotes screenshot from the Mac App Store listing Productivity

MindNotes

v1.0 · macOS 15+ · free · released Oct 2026

A floating quick-capture button for the Mac: open it, write a thought, save, and get back to work. Drafts are kept automatically; saved notes can be searched, edited and copied.

How it's built

Notes are stored as plain Markdown files on disk, viewable in Finder. English / Simplified Chinese, light / dark / system appearance, optional launch at login. No account, no network, no data collection.

  • SwiftUI
  • AppKit
  • Markdown files

Agent tooling

Open-source tools from how I work with Claude Code and Codex every day.

job-agent-kit

HTML/Python

Agent workflow kit for a job search with Claude Code / Codex. You approve every outward action.

  • Parallel scouting subagents with a manager review
  • Tracker CLI and weekly review
  • Read-only patrols, human approval gates

agent-memory

Shell

Plain-file project memory shared by Claude Code and Codex.

  • About 25 lines of rules
  • Session-start hook
  • Linter for bloat and stale state

codex-delegate

Shell

Claude Code skill: Claude writes the brief and reviews, the local Codex CLI builds.

  • Brief, build, review loop
  • Saves Claude usage

clawd-usage-weather

TypeScript

A hopping Clawd and a usage forecast above the Claude Code prompt.

  • Status-line extension
  • Usage forecast from local data

Client work

At a Hong Kong tech company, delivering for Hong Kong clients with two to three projects in parallel. Clients are not named and no client code or screenshots are shown.

Native iOS

Retail commerce app

iOS Developer · UIKit, MVVM, RxSwift
  • One of the primary iOS developers on a long-lived codebase: product detail, cart, checkout, payment handoff and order history.
More
  • Handled the commerce edge cases that only show up in production: items that become invalid, inventory changes mid-session, coupon validation, zero-total checkout, recovery from cancelled payments.
  • Extracted local Swift Packages in a CocoaPods codebase: a queue for competing alerts, and a wrapper for notification permissions and settings deep-links. The client later brought me back for a second phase.

Mobile banking app

iOS Developer · short project · Swift, Objective-C, SwiftSyntax
  • Built a reusable WKWebView PDF download-and-share component for a large mixed Swift / Objective-C codebase, extracted as a Swift Package usable from both languages.
More
  • Added configurable app-wide duplicate-tap prevention through the Objective-C runtime.
  • Wrote static-analysis tooling with a Swift CLI and SwiftSyntax to turn code findings into a triageable report.

Full-stack TypeScript

E-commerce backend and push service

Backend Developer · TypeScript, Express, Prisma, PostgreSQL, BullMQ / Redis
  • Primary developer of the App and CMS APIs: members, messaging, e-coupons and reporting.
More
  • Sole developer of the push-notification service, using BullMQ / Redis for asynchronous delivery, retries, event auditing and language-aware topic subscriptions.
  • Designed and ran JMeter smoke, load, stress and soak suites to find the breaking point before release. Also batch data flows and Docker / Azure multi-environment deployment.
App / CMS Express API BullMQ + Redis Queue Push worker Push providers Devices Retry Event auditing Language-aware topic subscriptions App / CMS Express API BullMQ + Redis Queue Push worker Push providers Devices Retry Event auditing Language-aware topic subscriptions
Generic push delivery schematic, not a production topology.

Event registration platform

Full-stack Developer · Next.js, Express, Prisma, PostgreSQL
  • Primary developer across a multilingual public site, an internal CMS and the APIs behind them.
More
  • Individual and group registration, scheduling and capacity control, with online payments and deferred offline-payment confirmation.
  • Permission-aware event management, check-in, CSV export and rescheduling, with bot protection on the public entry points.

Also contributed to a hospitality enquiry and CMS platform (Next.js, Express, Prisma), and built Cloudflare and GitHub Actions deployment pipelines for the full-stack projects.

Writing

Engineering notes from client work and my own projects.

iOS / Mobile

Backend / Infrastructure

Skills

iOS / macOS
Swift, UIKit, SwiftUI, AppKit, MVVM, RxSwift, Swift Concurrency (async/await, Task, TaskGroup), Swift Package Manager, CocoaPods, WidgetKit, XCTest, Swift Testing, Crashlytics.
Working knowledge
Objective-C (reading and interop in mixed codebases), Combine, SwiftSyntax.
Full-stack
TypeScript, React, Next.js, Node.js, Express, Prisma, PostgreSQL, Redis / BullMQ, REST APIs.
Delivery
Docker, Azure, Cloudflare, GitHub Actions, JMeter, Git. Multi-environment iOS release scripts (DEV / SIT / UAT / PROD) and Mac App Store submission.
Languages
Mandarin (native). English: professional reading and writing, conversational spoken.

Ship log

Mac app launches, newest first.

  1. Linger 0.9 · new app · free desktop lyrics, public beta (direct download)
  2. MindNotes – Quick Capture 1.0 · new app · floating quick-capture notes
  3. Voltyn 2.0 · new app · power and battery monitor with a desktop widget
  4. Glasswitch · new app · default-browser switcher, 1.1 followed Sep 12
  5. UTC Time Looker 1.0 · new app · one-click UTC timestamp converter
  6. Codex Session Viewer 1.0 · new app · GUI for browsing Codex / Claude Code sessions

Contact

Open to iOS (Swift) and TypeScript full-stack roles in Shanghai, Hangzhou, Suzhou, or remote in China. The fastest way to reach me is a LinkedIn message or email.