---
title: Blog — Page 5
description: "Page 5 of 6: articles on frontend engineering, AI coding and open-source practice."
image: "https://zengliangyi.com/og/default.png"
---

Page 5 of 6

# Blog

Notes on frontend engineering and AI coding: problems, implementation choices and lessons learned.

[Newest posts](/en/blog)

- [#ChatCrystal](/en/blog/tag/chatcrystal)

- [#Node.js](/en/blog/tag/node-js)

- [#TypeScript](/en/blog/tag/typescript)

- [#SQLite](/en/blog/tag/sqlite)

- [#AI](/en/blog/tag/ai)

- [#Data parsing](/en/blog/tag/data-parsing)

- [#Knowledge management](/en/blog/tag/knowledge-management)

- [#MCP](/en/blog/tag/mcp)

- [#Claude Code](/en/blog/tag/claude-code)

- [#Electron](/en/blog/tag/electron)

[##  LLMs and embeddings: separate tasks, even with one provider

Distinguish text generation from vector generation, then verify ChatCrystal model settings, connection tests, and index rebuilding boundaries.          曾亮懿       October 3, 2026      4 min read

#ChatCrystal

#AI

#Vector search](/en/blog/llm-and-embedding-separation)    [##  Note Relations and Graph Views: Discover, Project, and Verify

Trace ChatCrystal relation APIs, candidate discovery, and graph projections, keeping generated edges and tag co-occurrence within verified boundaries.          曾亮懿       October 3, 2026      3 min read

#ChatCrystal

#Knowledge graph

#Relations](/en/blog/note-relations-and-graph)    [##  Ollama Local Workflow: Generation, Vectors, and Retrieval

Run local LLMs with Ollama: test generation endpoints, embedding dimensions, vector consistency, and ChatCrystal integration boundaries offline.          曾亮懿       October 3, 2026      3 min read

#ChatCrystal

#Ollama

#Local-first](/en/blog/ollama-local-workflow)    [##  Recover a debugging solution: retrieve, read, then verify reuse

Use a constructed debugging scenario to check notes, vectors, and search results, then compare the original conversation with the current project.          曾亮懿       October 3, 2026      4 min read

#ChatCrystal

#Semantic search

#Debugging](/en/blog/recover-debugging-notes)    [##  Semantic Search and Context: Finding Hidden Code Dependencies

Combine vector search with one-hop graph relation expansion in code refactoring, keeping similarity scores, candidates, and sources verifiable on disk.          曾亮懿       October 3, 2026      3 min read

#ChatCrystal

#Semantic search

#Knowledge graph](/en/blog/semantic-search-relation-context)    [##  Semantic Search: Candidate Deduplication and Graph Context

Trace query vectors, candidate growth, lexical boosts, and relation expansion in ChatCrystal, distinguishing list filtering from semantic retrieval.          曾亮懿       October 3, 2026      3 min read

#ChatCrystal

#Semantic search

#RAG](/en/blog/semantic-search-workflow)    [##  Vectra index recovery: separate state, cleanup, and rebuilding

Diagnose semantic-search failures across note status, Vectra files, and cleanup tasks, then choose a single-note or full-index recovery path.          曾亮懿       October 3, 2026      4 min read

#ChatCrystal

#Vectra

#Troubleshooting](/en/blog/vectra-index-recovery)    [##  Integrating PaddleOCR-VL: Building a Document Inspection Tool

Connect to Baidu PaddleOCR-VL using Python standard library: manage async polling, coordinate bounding boxes, and build a document proofreading UI.          曾亮懿       September 19, 2026      8 min read

#Python

#JavaScript

#PaddleOCR-VL

#Document Parsing](/en/blog/paddleocr-vl-api-proofreading)    [##  Why translate: none Failed Only in Production

Debug Lightning CSS transform merging in production. Learn why !important fails and use Tailwind variable overrides and layer orders to fix displacement.          曾亮懿       September 11, 2026      7 min read

#CSS

#Tailwind

#Build

#Debugging](/en/blog/tailwind-translate-minifier-css-layer)    [##  Exporting ChatCrystal Notes to Obsidian

Export every page of ChatCrystal notes, build Obsidian links with stable IDs, and distinguish a readable snapshot from editing and incremental synchronization.          曾亮懿       June 11, 2026      6 min read

#ChatCrystal

#Obsidian

#Node.js

#Knowledge management](/en/blog/chatcrystal-to-obsidian)    [##  Choosing a Local Vector Store: Vectra, Chroma, and hnswlib

Compare Vectra, Chroma, and hnswlib through ChatCrystal’s deployment constraints: integration, retrieval cost, backups, and recovery boundaries.          曾亮懿       June 9, 2026      6 min read

#ChatCrystal

#TypeScript

#Vector search

#Architecture](/en/blog/local-vector-database-selection)    [##  Understanding Five AI Conversation Data Formats

How ChatCrystal parses Claude Code, Codex, Cursor, Trae, and Copilot records, and where JSONL messages, event streams, SQLite KV stores, and snapshots differ.          曾亮懿       June 9, 2026      7 min read

#ChatCrystal

#TypeScript

#AI

#Data parsing](/en/blog/ai-conversation-data-formats)

##  From writing to code

Explore ChatCrystal, developer tools and daily learning notes on my GitHub. Questions about the implementation are welcome.

[Visit my GitHub](https://github.com/ZengLiangYi)

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "ZengLiangYi Blog",
  "alternateName": [
    "Zeng Liangyi",
    "ZengLiangYi",
    "zengliangyi.com"
  ],
  "url": "https://zengliangyi.com",
  "description": "曾亮懿的个人网站。记录 AI Native 探索、开发者工具与全栈产品实践。"
}
```
