WORKS / SOFTWARE & EXPLORATIONS

Ideas,made tangible.

AI workspaces, file tools, device interactions, games, and short films. See the work in use, then follow its design and implementation to learn more or start a conversation.

Let’s collaborate

01 / A look at the work

Products, tools & games

AI workspace /01

Weft

Select a passage.Ask about it.

Manage feeds, reading, and favorites in one workspace. Configure translation or AI chat services to ask about selected passages. The reader, tool packages, and video canvas run on the same modular runtime.

Open source · Development preview

The Weft RSS reader, with a feed sidebar, fetched articles, and an open GitHub Blog article
RSS reader · Subscriptions, reading, and favorites

RSS reader · Subscriptions, reading, and favorites

The Weft RSS reader, with a feed sidebar, fetched articles, and an open GitHub Blog article

On small screens, scroll sideways for details · Esc to close

More interfaces: AI reading and a video canvas
Reader capture included in the current GitHub version: an article alongside AI translation and chat
Project capture · Selected passages, translation, and AI chat

Project capture · Selected passages, translation, and AI chat

Reader capture included in the current GitHub version: an article alongside AI translation and chat

On small screens, scroll sideways for details · Esc to close

Weft video canvas development interface, organizing shots as image and video nodes
Project capture · Video canvas shot nodes and generation parameters

Project capture · Video canvas shot nodes and generation parameters

Weft video canvas development interface, organizing shots as image and video nodes

On small screens, scroll sideways for details · Esc to close

AI × Interface design /02

What to Pick Today

Compare interface options.Choose one to try.

This is an interface comparison experiment. Connect a model API to generate candidates, compare and try them, then decide whether to apply one to the current page. Earlier versions remain available, and built-in candidates demonstrate the flow.

Open source · Browser application

What to Pick Today comparing two timer interfaces, with one marked as the current choice
Interface comparison · Two candidates for the same timer

Interface comparison · Two candidates for the same timer

What to Pick Today comparing two timer interfaces, with one marked as the current choice

On small screens, scroll sideways for details · Esc to close

Files & storage /03

RestoreWeave

Organize by content.Restore the original paths.

Add files from different sources to a library and find them by tags, notes, or search. Identical content is stored once, original paths can be restored, and files are checked again during restoration.

Open source · Local file management

The live RestoreWeave library filtered to three imported public READMEs, with the selected file’s verification state and original text preview on the right
Content library · Tagged project documents and an original-file preview

Content library · Tagged project documents and an original-file preview

The live RestoreWeave library filtered to three imported public READMEs, with the selected file’s verification state and original text preview on the right

On small screens, scroll sideways for details · Esc to close

Device management × Cross-platform system /04

ManagementCloud

Send a wake commandfrom a mobile device.

The admin manages devices and groups; the mobile client sends Wake-on-LAN (WOL) commands to wake a computer. The images show the admin interface and recorded wake-up sequence.

Personal project · Go / Vue / Flutter

The Vue admin interface, with device, group, sharing and scheduling controls and an empty device list
Admin interface · Device and group controls

Admin interface · Device and group controls

The Vue admin interface, with device, group, sharing and scheduling controls and an empty device list

On small screens, scroll sideways for details · Esc to close

  1. 01 Mobile interaction

    Original recording frame: the WOL computer wake-up card and button on a tablet
    Wake-on-LAN control

    Wake-on-LAN control

    Original recording frame: the WOL computer wake-up card and button on a tablet

    On small screens, scroll sideways for details · Esc to close

  2. 02 Screen lights up

    Later frame from the same recording: the computer monitor shows the Windows lock screen
    Windows lock screen

    Windows lock screen

    Later frame from the same recording: the computer monitor shows the Windows lock screen

    On small screens, scroll sideways for details · Esc to close

Engineering choices: connecting devices in one system

This is a device platform I built for my own use. Beyond the interface and wake-up controls, I worked on connection management, data ownership, and scheduled tasks.

Device connections
The Go connection layer supports short-lived connections, a bounded connection pool, and persistent outbound connections indexed by device ID. Reads and writes have deadlines, and the connection registry handles concurrent access.
Data ownership
Queries include ownership conditions in the data layer, filtering devices and tasks by their owner.
Tasks and recovery
Scheduled tasks are persisted, restored after a service restart, and recorded in an audit log.
Deployment
go:embed bundles the frontend assets into the Go program, producing a single binary to deploy.

Collaborative game /05

ECHO · 回声庭园

Your actions from three seconds agobecome stepping stones.

A collaborative game in which a character’s actions from three seconds earlier reappear as an Echo that can help the player move forward. The garden, levels, and world tree connect this mechanic with environmental storytelling.

Collaborative project · Godot

ECHO world-tree interior, with pale violet leaves, a light blue trunk, luminous roots, and starlight reflected in the water
Collaborative project · In-game world-tree interior

Collaborative project · In-game world-tree interior

ECHO world-tree interior, with pale violet leaves, a light blue trunk, luminous roots, and starlight reflected in the water

On small screens, scroll sideways for details · Esc to close

More scenes and the Echo mechanic
In-game garden with floating islands at night, a central tree, luminous bridges, and level entrances
Collaborative project · In-game garden capture

Collaborative project · In-game garden capture

In-game garden with floating islands at night, a central tree, luminous bridges, and level entrances

On small screens, scroll sideways for details · Esc to close

Echo replay level with the character standing on an airborne Echo anchored with Q, ready to jump
Collaborative project · Anchor an Echo, then jump

Collaborative project · Anchor an Echo, then jump

Echo replay level with the character standing on an airborne Echo anchored with Q, ready to jump

On small screens, scroll sideways for details · Esc to close

02 / Beyond the screen

From a camera image to a physical interaction.

I also explore connecting computer vision to device control. These gesture samples and an agricultural robotics competition scene show the connection between recognition and devices.

MediaPipe / 21 LANDMARKS

Original gesture sample: Open palm, with detected hand landmarks overlaidOpen palm
Original gesture sample: Hand down, with detected hand landmarks overlaidHand down
Original gesture sample: Thumb up, with detected hand landmarks overlaidThumb up
CaptureLandmarksClassifyControl

Original samples · Reprocessed with MediaPipe; switch to the original photos

Make a gesture an input.

Read hand landmarks with OpenCV and MediaPipe, train a gesture classifier, and explore connecting it to Dobot arm controls.

OpenCV / MediaPipe / Python
Agricultural warehouse competition equipment demonstration: two robot arms, a conveyor, an overhead camera, and the material-recognition window in one scene
Competition demo capture · Camera → Recognition → Robotic sorting

Competition demo capture · Camera → Recognition → Robotic sorting

Agricultural warehouse competition equipment demonstration: two robot arms, a conveyor, an overhead camera, and the material-recognition window in one scene

On small screens, scroll sideways for details · Esc to close

Bring recognition into a device workflow.

Agricultural warehousing exercises in camera capture, image classification, weighing, and device communication, connecting a detected object to robotic picking and sorting.

Python / PyTorch / Dobot / Serial / TCP
Early explorationsPersonal tools and fundamentals

Connecting to a campus network, working with files, and exploring processes: these tools and experiments trace my path from foundational code to building systems.

Personal tool · Two implementations

Campus network sign-in

I made two tools for connecting to my campus network. A Go CLI reads configuration, parses the sign-in page, and signs in again on a timer. A later Flutter client with Rust FFI reads redirect parameters and reproduces the quickauth flow, taking the same problem from network requests to a cross-platform interface.

Go / Flutter / Rust / FFI

work_dir · Cross-language exercise

One QR task, several implementations

I implemented the same QR-code sending and receiving task with wxWidgets, Flutter, Rust + FLTK, and C++ FFI. I also tried a small wxWidgets process manager and a configuration-driven conversion CLI. Rebuilding one feature with different tools was a way to explore UI components, language boundaries, and build systems.

wxWidgets / Flutter / Rust + FLTK / C++ FFI / xmake / CLI

Fundamentals exercise

C++ fundamentals and builds

I wrote a big-integer class and practiced constructors, operator overloading, and introductory templates. I also worked through gcc/g++ compile and link options, rpath, and builds with xmake and CMake.

C++ / gcc / g++ / rpath / xmake / CMake

Several iterations

Go backend skeleton

I iterated on a management backend skeleton around JWT, Casbin, and RBAC, and also worked with WebSockets, a separate TCP service, and Swagger. The Go backend in ManagementCloud continues this line of practice.

Go / JWT / Casbin / RBAC / WebSocket / TCP / Swagger

Verification and cryptography exercise

VerificationKeyService

A historical exercise in TOTP, RSA signatures, AES encryption, key handling, and expiry rules, used to learn the concepts and organize the code.

Go / Gin / TOTP / RSA / AES

Personal exercise

Excel workflow automation

I connected Excel parsing, QR-code generation, and form filling, with both a desktop GUI and an HTTP entry point. As the requirements shifted, the main exercise was separating the interfaces and workflow.

Go / fasthttp / Excel / QR code / GUI / HTTP

Environment exploration and troubleshooting

Android / Linux environment experiments

I explored permissions and module integration across Termux, KernelSU, and Zygisk, along with rclone mounts and scripts. This work was mainly about trying out environments, integration, and troubleshooting.

Termux / KernelSU / Zygisk / rclone / scripts

Fundamentals exercise

Networking and concurrency in C++

Starting with a TCP client and server, I tried a multithreaded server and future/async tasks, then used locks and condition variables to coordinate threads. Small runnable programs helped connect the ideas of networking, waiting, and synchronization.

C++ / Socket / Thread / Future / Mutex

Personal low-level experiment

PVZ memory modifier

A memory experiment with Plants vs. Zombies: I used C++, x86 assembly, and Windows APIs to reproduce a game function call, write and execute code in the game process, and change the sun value. It was a way to follow a number on screen down to processes, memory, and functions.

C++ / x86 ASM / Windows API
More about me

03 / VISUALS & STORYTELLING

Another way to tell a story.

AI-assisted narrative short 2:07

Finding an interest.Finding the words again.

A short film about someone rediscovering an interest and the motivation to speak and learn. The images shift from a cold blue room to the warm light of a computer screen as the character’s mood changes.

If the player is unavailable, watch on Bilibili.

Open the film on Bilibili

Production creditsI made the script, shot plan, generated visuals, sound, and final edit with AI assistance. Team members supplied the live-action footage and appeared on camera.

04 / PUBLIC PROJECTS / 10

Projects & source

  1. 01WeftBring reading, AI chat, and tools into one workspace. The core handles model connections and capability calls; replaceable modules provide the rest.Rust · WASM · Flutter · crates.ioRead source
    Design & implementation

    Weft keeps model protocols and capability dispatch in the core, while replaceable packages provide chat, an RSS reader, an AI video canvas, and multi-agent orchestration. packages/index.toml maps capabilities to packages; packages are classified as providers, foundations, or products, and can run as WASM, native, embedded, or service processes. Calls deny permissions by default, upgrades check permission changes, and 11 permission classes are enforced at call sites. Each package has an Ed25519 signature over its name, version, SHA-512 digest, and source. When a tool fails, its Closed/Open/HalfOpen circuit breaker controls whether calls continue. Local CPU tool routing uses ONNX INT8 cosine top-k without model-token use. The RSS reader first shortlists items with TF-IDF profiles, then asks an LLM to rank them. weft-core is published on crates.io, and the project provides a Windows installer; macOS and Linux releases have not been verified.

  2. 02codejevEnumerate real AST candidates before editing code. The model returns a candidate ID; the host assembles and validates the change.Python · AST 候选枚举 · 选择器Read source
    Design & implementation

    Direct code generation can produce output that runs and looks plausible in a diff, with errors that appear only during execution. CodeJev instead has the host enumerate AST-based code candidates and assign IDs; the model returns an ID or NONE, then the host assembles and verifies the result deterministically. In this comparison, which changed only the output format and used the same model, candidate selection succeeded in 5/5 cases and free generation in 0/5. In a separate selector comparison, the 350M model always returned the same ID, the local 1.5B model scored 2–3/4, Jev 4/4, and DeepSeek 5/5. These results describe small experiments only.

  3. 03LatticeExplore messaging with history held by personal nodes. The center exchanges address/IP information; distributed nodes handle communication, storage, and synchronization.RUST · PERSONAL STORE · DAG · OLMRead source
    Design & implementation

    Separate identity, address discovery, and message history. The information-exchange service only provides account address/IP information; users can choose a real or relay IP, while each person runs or trusts a Store to retain, verify, and forward messages. The prototype connects nodes over WebSocket and Protobuf and uses a hash DAG to handle concurrent and out-of-order messages. Messages with missing parents wait until their parents arrive. Sorting uses DAG depth, local receive time, and hash; this does not guarantee the same total order across Stores. Signatures include parent references, and one-to-one Olm ciphertext has completed a round trip through real Stores. Group state, shared ordering, and new-device recovery rules are still being designed. Checks led to fixes in message signatures, ROOM_EVENT verification, device registration, and admission, but REST reads and inter-node WebSockets still default to no authentication or TLS. This is a research prototype, not a production product. Implementation is mainly AI-assisted; I make the design choices and assess the results.

    Design decisions behind Lattice
  4. 04RestoreWeaveWhen organizing files from multiple sources, RestoreWeave identifies identical content by SHA-256 and length, previews a write plan, and checks files again on restore.Go · TypeScript · SQLite · BGE 语义检索Read source
    Design & implementation

    RestoreWeave is self-hosted storage for NAS and files from multiple sources. It identifies content by full-file SHA-256 and logical length, so identical bytes share one stored copy while filenames and original paths remain distinct. Before writing, it shows a read-only plan with file count, logical size, estimated additional space, duplicates, and blockers; writing starts only after confirmation. Exports and restores recheck paths, lengths, and SHA-256. The index locates data but does not prove byte integrity; exact content can still be read and restored if the index or model is unavailable. Search supports keywords, structured conditions, tags, and notes. Semantic search requires explicitly installing and checking a local BGE model. This is an unreleased core preview with an API designed for loopback use.

  5. 05GlassBoxGlassBox isolates agent sessions by user, removes container capabilities by default, limits networking and local port mappings, and reclaims idle sessions.Go · Python · React · DockerRead source
    Design & implementation

    GlassBox isolates agent execution by user and consists of nine application services. Containers drop all capabilities, add back only those needed, enable no-new-privileges, and use three network layers. Agent ports map only to temporary ports on 127.0.0.1. Idle sessions are reclaimed after 30 minutes, and orphaned containers are removed by label. Browser observation uses headless Xvfb and Chromium CDP without streaming the full desktop.

  6. 06workflow-to-skillTurn a goal and existing CLI, MCP, or HTTP tools into a reviewable SKILL.md for the host to run with its own tools and permissions.Agent Skill · DSH · MCPRead source
    Design & implementation

    workflow-to-skill turns a goal and existing CLI, MCP, or HTTP tools into a reviewable SKILL.md; execution remains with the host’s existing tools and runtime. A real persistent session in DeepSeek Harness records one flow from generating a Skill to reusing it in a new session and obtaining a result. The repository keeps the related evidence map and use-case records.

  7. 07LoomLet AI select existing components and the client assemble an application by rule, exploring a development process that is easier to verify and bring to a working result.Python · TypeScript · fastembed · tree-sitter · MCPRead source
    Design & implementation

    Loom splits ideas into capability seams such as auth, CRUD, and tables, retrieves existing code from a personal component library, asks AI to select components, then has the client assemble a T3 project deterministically without calling an LLM. In one small experiment, all four assembled ideas were brought to a compilable state; all four from-scratch versions were stopped after repairs made them less coherent. The assembly runs used about one eighteenth as many output tokens. The experiment used only deepseek-chat and a small sample; “converged” means only zero TypeScript errors. loom-memory-mcp is published on PyPI.

  8. 08siftlineSiftline uses a Skill to plan research questions and search scope. Its CLI returns structured results with provenance for the caller to assess.Python · Agent Skill · CLIRead source
    Design & implementation

    Siftline separates research planning from search execution. Its Skill defines relationships to investigate, channels, queries, and stopping conditions. The CLI runs searches and returns schema-shaped JSON with provenance plus a machine-readable ledger. It performs no LLM inference, ranking, or conclusion-making; the caller assesses the returned material.

  9. 09plate-redactRedact plates in dashcam footage by combining detector results; if the output contains an unexplained plate region, mark it UNKNOWN and block publication.Python · OpenCV · 多引擎并集 · 可插拔适配器Read source
    Design & implementation

    plate-redact masks plates in dashcam footage by combining results from multiple detection or recognition engines. Extra detections may leave extra solid blocks; a missed plate could expose it. The system predicts vehicle motion to apply masks early and uses solid fills. Its fail-closed publishing flow freezes input, takes an exclusive lease, publishes atomically, then decodes the output and checks whether vehicle tracks explain the masked regions. An unexplained region is marked UNKNOWN and blocks publication (test_fail_closed.py contains 17 checks). The repository includes no footage or model weights; third-party engines are loaded lazily when needed.

  10. 10ModSpecModSpec manages LSPosed settings with reusable rules and profiles. After ADB pairing, it checks configuration and drift before applying changes.Rust · Kotlin · LSPosed · DexKit · JS/Lua 脚本引擎Read source
    Design & implementation

    ModSpec uses .mspec.toml profiles to describe configuration and reusable .rule.toml files to define Hooks. A Rust CLI on the PC pairs with a phone agent over ADB. Validate checks the configuration, while verify checks device drift; changes apply only after both pass. The Hook scripting engine supports Frida-style before, after, and replace operations, plus structured events. It requires root access and LSPosed and remains a developer preview without a stable release.