Chendi Wu
Chendi WuMediaPhotographyProjectsBlog

Projects

A collection of tools, apps, and experiments I've built — most are open source, privacy-first, and run entirely in the browser.

Plot preview 1
Plot preview 2
Plot
Project management, simplified

A streamlined project and issue tracker: list and board layouts over one manual order, subtasks, markdown task threads with mentions, a realtime inbox with direct messages, and AI agents confined to the projects they are put to work in. One Hono API with an OpenAPI contract runs on Bun, as a single binary, in Docker, or on Cloudflare Workers with D1.

BunHonoReactDrizzleCloudflare WorkersTypeScript
LiveCode
IKUI preview
IKUI
React UI Component Library

Beautiful, sophisticated UI components designed for modern React and Tailwind CSS applications. A collection of pre-built, refined components to streamline web app development.

Next.jsBase UITailwind CSS v4shadcnTypeScript
LiveCode
fingerprintd preview
fingerprintd
Server-authoritative Device Fingerprinting Service

Server-authoritative device fingerprinting for anti-fraud: the browser SDK (@cdlab/fingerprintd) only gathers evidence, the server burns a one-time nonce, scores it with blocking-key recall + Fellegi–Sunter matching and cross-checks the UA against JA4/IP it observed itself, then your backend fetches the result by request_id. One Rust engine (fingerprintd on crates.io), compiled to WASM, runs as a native Axum server and a Cloudflare Worker on libSQL or D1.

RustWebAssemblyAxumCloudflare WorkersTypeScriptlibSQL
LiveCode
ActorLab preview 1
ActorLab preview 2
ActorLab
Browser-based Infinite Canvas & 3D Director Stage

A browser-only infinite canvas for previsualisation: media, text and generation nodes linked by rule-checked connections, with cropping, audio trimming and frame capture done in the node itself. Any node can open a real-time WebGL director stage — pose characters joint-by-joint, direct cameras with cinematography presets, and send captured shots back to the canvas as linked nodes. Nothing leaves the browser: the document and its assets live in IndexedDB.

React 19React FlowThree.jsViteTailwind CSS v4
LiveCode
cdhub preview
WeChat Mini Program
cdhub
Personal Hub WeChat Mini Program

A uni-app + Vue 3 + UnoCSS personal hub that mirrors wcd.pages.dev and layers on self-contained tools: a blog mirror (posts / projects / media), Flox aggregated video search (SSE multi-source), an RTMP viewer/pusher, and a habit-log calendar. Hand-rolled UI with a green "ledger / terminal" theme, no third-party component library.

uni-appVue 3UnoCSSWeChat Mini ProgramTypeScript
Code
Flnk preview
Flnk
Privacy-first Link Shortener

A privacy-respecting URL shortener with edge-based redirect logic (KV cache + D1 fallback), geo/device routing, password protection via Argon2id, and cookieless analytics powered by Cloudflare Analytics Engine. AI slug generation, social login, and a full dashboard with export/import/backup.

Next.js 16DrizzleD1 / LibSQLbetter-authWorkers AICloudflare Workers
LiveCode
Clearify preview 1
Clearify preview 2
Clearify preview 3
Clearify preview 4
Clearify preview 5
Clearify
Image & Video Processing Toolbox

One-click background removal, batch compression (AVIF / WebP / JXL and more), and video compression with up to 90% size reduction. Everything runs locally in your browser — no uploads, no servers.

Next.jsTransformers.jsWebGPUFFmpeg.wasm
LiveCode
Dropply preview
Dropply
Local Encryption & Encrypted File Sharing

Encrypt and decrypt files and text locally with XChaCha20-Poly1305 — password or public-key mode, all in a Web Worker. Optionally share the finished ciphertext via a retrieval code (no key in the link); the server never sees plaintext. Decoupled into a Next.js web app and a Cloudflare Workers API.

Next.jsCloudflare WorkersXChaCha20-Poly1305Argon2idECIESWeb Workers
LiveCode
ByCut preview
ByCut
Browser-based Video Editor

A fully client-side, open-source video editor — a privacy-first alternative to CapCut. All editing happens locally in your browser with zero server uploads.

Next.jsZustandFFmpeg.wasmTransformersWaveSurfer.js
LiveCode
Flox preview
pwd: aa.2026
Flox
Video Aggregation & Playback Platform

Multi-source parallel video search with real-time streaming results (SSE) and 38+ built-in sources. Built-in HLS/M3U8 playback with ad filtering and Service Worker caching.

Next.jsZustandTanStack QueryHLS.jsTailwind CSS v4
LiveCode
byplay preview
byplay
Online Video Player

A versatile online video player with HLS adaptive bitrate support, configurable buffering, and seamless integration with vidl for one-click video download.

Next.jsHLS.js
LiveCode
vidl preview
vidl
Online Video Downloader

A browser-based video downloader that auto-detects URL format and handles M3U8/HLS, MP4, WebM, MKV, FLV, and more, with near-zero memory stream download via the Streams API.

Next.jsmux.jsStreams API
LiveCode
byTTS preview
byTTS
Browser-based Text-to-Speech Tool

Convert text to natural-sounding speech via Microsoft Azure Cognitive Services. Supports SSML synthesis, streaming audio output, and fine-grained voice controls.

Next.jsEdge RuntimeAzure Cognitive Services
LiveCode
byshot preview
byshot
Personal Photography Collection

A Cloudinary-backed photography gallery with a responsive masonry layout and a full-screen lightbox. Deep-linkable photos and last-viewed scroll restore make browsing feel native.

Next.jsCloudinaryZustandmotionTailwind CSS v4
LiveCode
text2img preview
text2img
Browser-based Text-to-Image Generator

Generate images from text prompts using multiple AI models including FLUX, SDXL, and DreamShaper. Supports random prompts and rich parameter controls with real-time preview.

Next.jsTanStack QueryCloudflare AICloudflare Workers
LiveCode
values preview
values
Crypto / Fiat / Commodity Value Comparison Tool

Compare cryptocurrencies, fiat currencies, and commodities side by side on a unified scale. Enter any asset or amount and instantly see what it is equivalent to.

Next.jsTailwind CSS
LiveCode
LiveUser preview
LiveUser
Real-time Online User Counter

Embed a single script tag to display real-time online user count and total visits on any webpage. Backed by the WebSocket Hibernation API and Durable Objects SQLite.

HonoCloudflare WorkersDurable ObjectsSQLite
LiveCode
repo-changelog preview 1
repo-changelog preview 2
repo-changelog preview 3
repo-changelog preview 4
repo-changelog preview 5
repo-changelog
GitHub Release / Changelog Aggregation Dashboard

Track releases and changelogs from multiple GitHub repositories in a single dashboard. Search by repository, user, or organization and sort by stars or update time.

NuxtVercelTailwind CSS
LiveCode
wepush preview
wepush
WeChat Template Message Push Console

A database-backed web console for managing and sending WeChat template messages — recipient management, template editing, scheduling, and permanent push logging.

Next.jsDrizzleD1 / LibSQLTanStack QueryCloudflare Workers
LiveCode
argo2id-wasm preview
argo2id-wasm
High-Performance Argon2id Password Hashing

High-performance Argon2id password hashing powered by a WebAssembly module compiled from Rust, runnable in browsers and on Cloudflare Workers.

RustWebAssemblyArgon2idCloudflare Workers
LiveCode
jsc preview
jsc
JavaScript → WebAssembly Compiler

An ahead-of-time compiler that turns JavaScript/TypeScript directly into WebAssembly, running on Wasmtime with no JIT or interpreter. NaN-boxed values, a bump-allocated linear-memory heap, and closures with capture-by-reference, with support for generators, async/await, try/catch, and classes.

RustWebAssemblyCompilersSWCWasmtime
Code
@cdlab/image preview
@cdlab/image
Unified Image Processing Library

One image library, three runtimes: decode/encode PNG, JPEG, WebP, JPEG XL, AVIF, and Radiance HDR; resize, crop, rotate, and flip; QR code generation/detection; and visible/blind watermarking. Each capability ships as its own lazy-loaded WASM artifact, with an optional native N-API addon for faster Node.js processing.

RustWebAssemblyTypeScriptImage Processing
Code
Baccarat preview 1
Baccarat preview 2
Baccarat preview 3
Baccarat preview 4
Baccarat
Telegram Group Baccarat Platform

Telegram group baccarat on one Cloudflare Worker — Durable Objects hold the live round (state machine, alarms, WebSocket fanout), D1 holds an append-only integer ledger, and one pre-rendered Nuxt build serves the landing site, the Mini App table and the operations console. Source is private; the repo is the public design write-up.

HonoGrammyNuxtCloudflare WorkersDurable ObjectsCloudflare D1TypeScript
LiveCode
Lowcode Engine Vue preview
Lowcode Engine Vue
Vue 3 Low-Code Engine Demo

A low-code engine demo built on top of Vue 3 — drag-and-drop component composition and visual page editing.

Low-CodeVue 3
LiveCode
Lowcode Engine Vue 2.7 preview
Lowcode Engine Vue 2.7
Vue 2.7 Low-Code Engine Demo

A Vue 2.7-compatible low-code engine demo, adapted for projects still running on the Vue 2 line.

Low-CodeVue 2.7
LiveCode
Copyright (c) 2023-PRESENT All Rights Reserved. Powered by wudi