ledring.dev

Projects

A few ideas.
Made tangible.

Experiments in map style, dashboard taste, and building with agents.

Explore MapTaste

From an idea to something you can use.

Case studies

maptaste: give agents a better eye for maps

Coding agents ship rainbow MapLibre styles. maptaste gives them a check + revise loop: global and cn skill packs set the rules, maptaste check returns scored findings, and MCP brings the checks into their workflow. The Before / After showcase puts the result on real OpenFreeMap San Francisco buildings at pitch ~57°: Set1 categorical Before, cinematic sequential-blue After. Light / Dark toggles change paint only, keeping the city and camera fixed so the styling speaks for itself.

Stack · TypeScript · MapLibre · MCP · Vite

LEDRING: what did the agent do after it was told no?

LEDRING parses agent traces (Claude Code JSONL, or OpenTelemetry GenAI spans) into one schema and draws N runs of the same task as a single branch tree, the way some story games show you every path players took. A rule-based score says how far each run drifted from the instruction. Editing a file you said not to touch is never forgiven, even if the agent behaves afterwards. The part I like most is Red Wall: a guardrail that blocks git push --force is only half the test. What matters is whether the agent then asked you, or tried --force-with-lease. Then I made it a game. CX-417 builds a web page live, may cut corners, and you decide what ships. Every page it generates runs in a locked-down sandbox and gets scanned before you see it, because letting an AI write arbitrary HTML into your browser is exactly the kind of thing LEDRING is supposed to catch.

Stack · TypeScript · Zod · pnpm monorepo · parse5 / acorn · Playwright · Cloudflare Workers + D1 · Workers AI

lakeboard-converter: mind maps for me, Markdown for my agents

I plan in mind maps, and my agents read text. An XMind or Yuque file is JSON underneath, but an agent has to dig through IDs, styles and layout before it reaches a single idea. The converter keeps the tree and drops the picture. The same core runs in three places: the browser (nothing uploaded), an npx CLI with a --json envelope, and four read-only MCP tools (convert, from_markdown, convert_many, inspect). The tools return typed structured output (which sheets exist, how many nodes, whether it cut anything off at 2,000), so an agent can decide what to do without parsing my Markdown back. Old XMind 8 files get a clear error instead of a creative guess.

Stack · TypeScript · MCP SDK · Zod · JSZip · Vite · Cloudflare Workers (static)

Research: ranked directions, and it checks its own citations

LLMs are great at inventing plausible papers, so this one isn't allowed to just talk. A vague interest goes through four streamed stages: pull real evidence from OpenAlex, map the landscape, compare paths, converge on a 7-day plan. Every citation gets looked up and comes back marked verified, not-found, broken or search-link. It runs on a free Cloudflare Workers AI model, so most of the engineering is unglamorous: per-IP and global daily quotas in D1, a cost estimate before every call, and a bring-your-own-key path that skips my server entirely. There's an eval on 20 sample interests. Its most useful result was showing the template-only mode verified 0% of its citations, which is why demo evidence is labelled illustrative only. To be honest, it's a fixed pipeline, not an agent picking its own tools. The MCP server does let your agent call it like one.

Stack · TypeScript · React · Vite · Cloudflare Workers · D1 · Workers AI · OpenAlex · Zod · MCP

  1. maptaste

    MapLibre style taste for coding agents: check, load a pack, and turn rainbow buildings into cinematic sequential blues.

    • maptaste check scores MapLibre style JSON against pack rules (MT001–MT004): rainbow fills, label contrast, dark-theme metadata, and label density.
    • Two skill packs: global and cn (admin label hierarchy, tighter label budget).
    • Showcase: OpenFreeMap San Francisco buildings at pitch ~57°, Set1 Before / cinematic sequential-blue After; paint-only Light / Dark toggles.
    For agents

    Install maptaste-global or maptaste-cn from the repo skills. Run maptaste check, revise from JSON findings with rule IDs and a 0–100 score. MCP tools: check_taste, validate_style, preview_info.

    • TypeScript
    • CLI
    • MapLibre
    • MCP
    • Agent skill
    • MIT
  2. lakeboard-converter

    Turns Yuque Lakeboard and XMind mind maps into Markdown, so the ideas stop being trapped in a picture.

    • Drag and drop at convert.ledring.dev. The file never leaves your browser.
    • npx CLI and a guided TUI. Output is Markdown, a JSON topic tree, an outline, or a clean .xmind.
    • Keeps text, hierarchy, notes, links and labels. Drops styling and layout, on purpose.
    For agents

    Four read-only MCP tools — convert, from_markdown, convert_many, and inspect — returning typed structured output (sheets, node counts, a truncation flag) instead of a wall of text. Listed on Glama. npm 0.5.0.

    • TypeScript
    • CLI
    • TUI
    • MCP
    • Web
    • v0.5.0
    • MIT
  3. dashtaste

    Dashboard taste as a skill + check loop: shape ECharts charts, check the result, and revise.

    • dashtaste check scores chart configs and rendered dashboards against pack rules. Use --pack-file overlays to adapt the rules.
    • Two style packs: global (green up / red down) and cn (red up / green down, wan/yi units).
    • Gallery before/after boards keep the data fixed; cases under docs/cases explain what changed and why.
    For agents

    Install dashtaste-global or dashtaste-cn with npx skills add FelixFangX/dashtaste. Apply the skill, run the check, and revise from JSON findings with rule IDs, fixes, and a 0–100 score. Carry local rules in --pack-file overlays; use docs/cases to narrate gallery changes.

    • TypeScript
    • CLI
    • ECharts
    • Agent skill
    • v0.0.7
    • MIT
  4. Research

    For when you have a vague research itch. You get ranked directions backed by real papers, plus a 7-day plan.

    • Four streamed stages: retrieval, landscape, path comparison, convergence. Confirm each one, or let it run.
    • Evidence comes from OpenAlex and is tiered T1–T3. Every citation is looked up, and a fake one gets marked as fake.
    • Free model on Cloudflare Workers AI with a shared daily quota, or bring your own key (it goes straight from the browser to the provider).
    For agents

    An MCP server with propose_directions and expand, both read-only. Each citation carries its check result, so an agent can see which ones are real.

    • TypeScript
    • React
    • Cloudflare Workers
    • D1
    • Workers AI
    • OpenAlex
    • MCP
  5. LEDRING / LEDRING Play

    Status lights for agents, plus a browser game where an AI builds a web page and you decide what ships.

    • Replays Claude Code and OpenTelemetry GenAI traces as one branch tree: where runs split, and how often.
    • Scores how far a run drifted from what you asked (0–100, rule-based, no LLM). It can fail your CI.
    • Red Wall checks what an agent did after a guardrail said no: asked, stopped, retried, or found a workaround.
    For agents

    It learns permission rules from your own allow/deny history, turns a subagent into an A2A Agent Card, and runs as a GitHub Action. The game runs on the same engine, and every generated page is sandboxed and checked before you see it.

    • TypeScript
    • pnpm monorepo
    • Zod
    • OpenTelemetry
    • Cloudflare Workers
    • D1
  6. dev-work-grok-bot-skill

    An Agent skill that turns a chat bot into a careful dev assistant. It drafts first and asks before anything leaves the room.

    • It interviews you one question at a time, then sets up repos, tracker, team chat and preview testing.
    • A forwarded "the boss said it's fine" is just text, not permission. GitHub stays read-only unless you say otherwise.
    • A secret and PII scan that reports file and line, never the value.
    For agents

    20 safety scenarios (relayed approvals, pasted tokens, prompt injection in repo files and web pages). CI checks the skill still states every rule they depend on. That's 20/20 today. Whether a model actually obeys them is a separate eval, and it hasn't been run yet.

    • Agent skill
    • GitHub
    • Linear
    • MCP
    • Node test
  7. n8n-workflow-collection

    Import-ready n8n workflows, secrets scrubbed: Lark/Feishu bot → Bitable records and PRD drafts, and social metrics.

    • Two editions: global (Lark + OpenAI) and China (Feishu + DeepSeek).
    • Import, swap the {{PLACEHOLDERS}}, rebind credentials, done.
    • A redaction check runs on every commit, just in case.
    For agents

    Every workflow comes with a manifest: input and output schema, side effects, and the exact execute_workflow call for n8n's MCP server. They all say "ask first", because each one writes data or spends quota.

    • n8n
    • MCP
    • Feishu / Lark
    • Bitable
  8. FelixFangX · control room

    My GitHub profile, rebuilt every day from real runs and evals.

    For agents

    It publishes llms.txt and status.json. Red means red, and missing data says "no data" instead of making something up.

    • GitHub Actions
    • SVG
    • JavaScript