fuzzy symantic search , hashtags, tags, keywords, content, points, naming, obsidian show grphraph knowledge based like foam on vscode.

Knowledge Graph — All Files & Code

Core Files

File Purpose
farshid-ai-cv-llm-graph.md Main graph page (/graph/) — D3.js force-directed knowledge graph
farshid-ai-cv-llm-graph-tags.md Hashtag graph page (/graph-tags/) — tag co-occurrence graph
assets/js/graph-view.js D3.js graph engine — force simulation, zoom, drag, rendering
assets/css/graph.css Graph page styles — filters, tooltips, minimap, mobile
assets/graph.json Main graph data — 79 nodes, 144 edges, 12 categories
assets/graph-hashtags.json Hashtag graph data — tags and co-occurrence edges

Layout References

File Line Purpose
_layouts/farshid_default.html 124 Bottom toolbar “Graph” link
_layouts/farshid_page.html 90 Bottom toolbar “Graph” link
_layouts/farshid_base.html 40 Bottom toolbar “Graph” link
_layouts/farshid_atlas.html 41 “Knowledge Graph” nav link
File Purpose
contents/pkm/graph.html Standalone mini graph (6 nodes, hardcoded)
contents/pkm/graph.json PKM graph data

Architecture

farshid-ai-cv-llm-graph.md
  ├── loads: d3.v7.min.js (CDN)
  ├── loads: fuse.js (CDN)
  ├── loads: assets/js/graph-view.js
  ├── loads: assets/css/graph.css
  ├── loads: assets/graph.json
  └── inline: CONTENT_INDEX (search), graphSearch(), filter buttons

graph-view.js
  ├── d3.forceSimulation (center, charge, link, collide, x, y)
  ├── d3.zoom (pan/zoom with extent)
  ├── d3.drag (node repositioning)
  ├── Canvas rendering (curved edges, glow, labels)
  ├── Category filtering
  ├── Search highlighting
  └── Mini-map

Node Categories & Colors

Category Color Count
hub #0a84ff (blue) 6
cv #30d158 (green) 5
ai #bf5af2 (purple) 4
cuda #ff9f0a (orange) 4
paper #5ac8fa (light blue) 10
journal #64d2ff (cyan) 6
book #ffd60a (yellow) 7
patent #ff375f (red) 3
keynote #ff6482 (pink) 1
course #00c7be (teal) 17
pkm #ac8e68 (brown) 3
business #8e8e93 (gray) 12

Edge Types

Strength Meaning
1.0 Direct parent-child (Hub → Category)
0.8 Strong topic match
0.5 Related content
0.3 Weak but notable connection

Interaction Features


How can I add fuzzy/semantic search and a knowledge graph (like Obsidian/Foam) to my Jekyll GitHub Pages site without any build step, plugin, or installation? / Wie kann ich Fuzzy/Semantic-Suche und einen Wissensgraphen (wie Obsidian/Foam) in meine Jekyll-GitHub-Pages-Site einbauen — ohne Build-Schritt, Plugin oder Installation?


Here is the full research. I organized it by problem area, then specific patterns and tools.


The core constraint

You are on standard GitHub Pages. That means:

Everything must either be generated by Jekyll’s own Liquid at build time (via .json files with frontmatter layout: none) or loaded client-side from CDN.

Your current setup (assets/graph.json, graph-view.js, Fuse.js from CDN) is already the right architecture. The question is how to make each layer better.


1 — Generating graph.json automatically from frontmatter (no manual editing)

Right now you maintain assets/graph.json by hand. This is the first thing worth fixing.

The pattern: Create a .json file with layout: none (or layout: null) and use Liquid to loop site.pages or a collection. Jekyll lets you output each page as a JSON file using frontmatter for data — with layout: none you get a pure JSON page without any HTML styling, and the jsonify filter converts data straight to JSON without worrying about for loops or JSON syntax.

A minimal assets/graph.json generator:

---
layout: none
---
{
  "nodes": [
    
    
    {
      "id": "/contents/publications/10Years/",
      "label": "10 Years of CV Debugging Lessons",
      "url": "/contents/publications/10Years/",
      "tags": ["computer-vision","debugging","lessons-learned","opencv"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/publications/Journals/3d-slam-humanoid-robots/",
      "label": "3D SLAM and Humanoid Robot Linkages",
      "url": "/contents/publications/Journals/3d-slam-humanoid-robots/",
      "tags": ["slam","humanoid-robots","3d-mapping","robotics"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/cv/3d/",
      "label": "3D Vision & Real-Time Multi-Camera Systems",
      "url": "/contents/public/cv/3d/",
      "tags": ["computer-vision","3d-vision","depth-sensing","multi-camera"],
      "category": null
    },
    
    
    
    
    
    
    
    {
      "id": "/contents/publications/CV/",
      "label": "CV — Dr. Farshid Pirahansiah",
      "url": "/contents/publications/CV/",
      "tags": ["computer-vision","resume","publications","patents"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/public/Resources/",
      "label": "Portfolio & Publications",
      "url": "/contents/public/Resources/",
      "tags": ["portfolio","publications","patents","research"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/pkm/TOC/",
      "label": "PKM Methods & Website Structure",
      "url": "/contents/pkm/TOC/",
      "tags": ["pkm","knowledge-management","productivity"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/adaptive-image-segmentation-psnr/",
      "label": "PSNR-Based Segmentation for LPR",
      "url": "/contents/publications/Papers/adaptive-image-segmentation-psnr/",
      "tags": ["image-segmentation","psnr","thresholding","license-plate-recognition"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Journals/adaptive-thresholding-psnr/",
      "label": "Adaptive Thresholding Based on PSNR",
      "url": "/contents/publications/Journals/adaptive-thresholding-psnr/",
      "tags": ["thresholding","psnr","adaptive-thresholding","image-segmentation"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/ai-llm/advanced-llm-concepts/",
      "label": "Advanced LLM Concepts",
      "url": "/contents/public/ai-llm/advanced-llm-concepts/",
      "tags": ["ai","llm","rag","multimodal"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/ai-hardware/",
      "label": "AI Hardware Accelerators",
      "url": "/contents/ai2026/ai-hardware/",
      "tags": ["AI-hardware","accelerators","NPU","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Journals/ant-colony-optimization/",
      "label": "Ant Colony Optimization for Image Processing",
      "url": "/contents/publications/Journals/ant-colony-optimization/",
      "tags": ["ant-colony-optimization","image-processing","thresholding","optimization"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/ai-llm/avatar-generator/",
      "label": "Local Video Avatar Generator with Ollama",
      "url": "/contents/public/ai-llm/avatar-generator/",
      "tags": ["ai","llm","video-generation","ollama"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/ai-llm/blog/",
      "label": "Blog: AI, LLMs, and Computer Vision",
      "url": "/contents/public/ai-llm/blog/",
      "tags": ["ai","llm","rag","multi-agent"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/book-summary/",
      "label": "Book Summaries",
      "url": "/contents/ai2026/book-summary/",
      "tags": ["books","summaries","PKM","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/camera-calibration-multi-modal/",
      "label": "Camera Calibration for Multi-Modal Vision",
      "url": "/contents/publications/Papers/camera-calibration-multi-modal/",
      "tags": ["camera-calibration","multi-modal","robotics","image-quality"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/publications/Journals/character-object-recognition/",
      "label": "Character & Object Recognition via Features",
      "url": "/contents/publications/Journals/character-object-recognition/",
      "tags": ["character-recognition","object-recognition","feature-extraction","glcm"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/character-recognition-global-feature/",
      "label": "Character Recognition via Global Features",
      "url": "/contents/publications/Papers/character-recognition-global-feature/",
      "tags": ["character-recognition","feature-extraction","glcm","ocr"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/classification-geometrical-topological/",
      "label": "Classification with Geometrical Features",
      "url": "/contents/publications/Papers/classification-geometrical-topological/",
      "tags": ["classification","geometrical-features","pattern-recognition","machine-learning"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/cloud-native/",
      "label": "Cloud-Native with Kubernetes",
      "url": "/contents/ai2026/cloud-native/",
      "tags": ["Docker","Kubernetes","cloud-native","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/coaching/",
      "label": "CV Coaching & Teaching Roadmap",
      "url": "/contents/public/coaching/",
      "tags": ["computer-vision","coaching","teaching","curriculum"],
      "category": null
    },
    
    
    
    
    
    
    
    
    
    {
      "id": "/contents/public/cpp/",
      "label": "C++ Quick Reference",
      "url": "/contents/public/cpp/",
      "tags": ["cpp","programming","debugging","memory-management"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/edge-ai-summit/",
      "label": "Edge AI Summit 2020",
      "url": "/contents/ai2026/edge-ai-summit/",
      "tags": ["edge-AI","summit","tinyML","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/embedded-iot/",
      "label": "Embedded IoT",
      "url": "/contents/ai2026/embedded-iot/",
      "tags": ["IoT","embedded","edge-AI","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/enter/",
      "label": "Dr. Farshid Pirahansiah — CV & AI",
      "url": "/contents/public/enter/",
      "tags": ["computer-vision","ai","portfolio","about"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Patents/face-image-augmentation/",
      "label": "Face Image Augmentation WO2021060971A1",
      "url": "/contents/publications/Patents/face-image-augmentation/",
      "tags": ["patent","face-augmentation","gan","data-augmentation"],
      "category": null
    },
    
    
    
    
    
    
    
    
    
    {
      "id": "/contents/ppt/farshid-ai-cv-llm-presentation/",
      "label": "Reducing Token Usage in AI-Assisted Development",
      "url": "/contents/ppt/farshid-ai-cv-llm-presentation/",
      "tags": ["presentation","ai","llm","token-optimization"],
      "category": null
    },
    
    
    
    
    
    
    
    {
      "id": "/contents/ai2026/fsdl-2022/",
      "label": "FSDL 2022 Notes",
      "url": "/contents/ai2026/fsdl-2022/",
      "tags": ["FSDL","deep-learning","MLOps","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/full-stack-deep-learning/",
      "label": "Full Stack Deep Learning",
      "url": "/contents/ai2026/full-stack-deep-learning/",
      "tags": ["FSDL","full-stack-deep-learning","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/publications/Journals/gsft-psnr-fuzzy-threshold/",
      "label": "GSFT-PSNR: Fuzzy Threshold Method",
      "url": "/contents/publications/Journals/gsft-psnr-fuzzy-threshold/",
      "tags": ["fuzzy-logic","thresholding","psnr","image-segmentation"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/public/optimization/",
      "label": "CV, DL & ML Optimization Guide",
      "url": "/contents/public/optimization/",
      "tags": ["optimization","deep-learning","machine-learning","computer-vision"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/seo/",
      "label": "SEO for LLM-Powered Search",
      "url": "/contents/public/seo/",
      "tags": ["seo","llm","ai","web-optimization"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/python/",
      "label": "Python Configuration & C++ Integration",
      "url": "/contents/public/python/",
      "tags": ["python","cpp","configuration","development"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/projects/Solutions/",
      "label": "Solutions",
      "url": "/contents/public/projects/Solutions/",
      "tags": ["portfolio","computer-vision","ai","projects"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/prompts/",
      "label": "Prompt Engineering Templates",
      "url": "/contents/public/prompts/",
      "tags": ["prompt-engineering","llm","ai","nlp"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/",
      "label": "Content Hub",
      "url": "/contents/public/",
      "tags": ["computer-vision","ai","llm","edge-ai"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Books/",
      "label": "Books & Book Chapters",
      "url": "/contents/publications/Books/",
      "tags": ["book","opencv","computer-vision","ai"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Journals/",
      "label": "Journal Publications",
      "url": "/contents/publications/Journals/",
      "tags": ["journal","image-processing","thresholding","pattern-recognition"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Keynotes/",
      "label": "Keynotes",
      "url": "/contents/publications/Keynotes/",
      "tags": ["keynote","ai","computer-vision","multimodal"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Patents/",
      "label": "Patents",
      "url": "/contents/publications/Patents/",
      "tags": ["patent","face-detection","vehicle-detection","augmented-reality"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/",
      "label": "Conference Papers",
      "url": "/contents/publications/Papers/",
      "tags": ["research","paper","image-processing","computer-vision"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/ai2026/iot-scholarship/",
      "label": "IoT Scholarship: Edge AI with OpenVINO",
      "url": "/contents/ai2026/iot-scholarship/",
      "tags": ["IoT","OpenVINO","edge-AI","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/license-plate-recognition-entropy/",
      "label": "Entropy-Based Multi-Threshold LPR",
      "url": "/contents/publications/Papers/license-plate-recognition-entropy/",
      "tags": ["license-plate-recognition","entropy","thresholding","image-segmentation"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/linkedin-top-posts/",
      "label": "Top LinkedIn Posts 2024",
      "url": "/contents/public/linkedin-top-posts/",
      "tags": ["linkedin","camera-calibration","cpp","robotics"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/links/",
      "label": "Curated Links & Resources",
      "url": "/contents/public/links/",
      "tags": ["resources","tools","tutorials","references"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/pkm/links/",
      "label": "Curated Links & Resources",
      "url": "/contents/pkm/links/",
      "tags": ["curated-links","ai-tools","resources"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/ai2026/machine-learning-specialization/",
      "label": "Machine Learning Specialization",
      "url": "/contents/ai2026/machine-learning-specialization/",
      "tags": ["ML","Coursera","machine-learning-specialization","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/ai2026/metaverse/",
      "label": "Metaverse & XR",
      "url": "/contents/ai2026/metaverse/",
      "tags": ["metaverse","XR","spatial-computing","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/mlops/",
      "label": "MLOps",
      "url": "/contents/ai2026/mlops/",
      "tags": ["MLOps","machine-learning-engineering","Coursera","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/cuda-gpu/mlx-coreml-metal/",
      "label": "MLX, CoreML, and Metal for Apple Silicon",
      "url": "/contents/public/cuda-gpu/mlx-coreml-metal/",
      "tags": ["apple-silicon","coreml","metal","mlx"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/modern-cpp/",
      "label": "Modern C++ for Image Processing",
      "url": "/contents/ai2026/modern-cpp/",
      "tags": ["C++","C++23","image-processing","design-patterns","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/cv/multi-camera-systems/",
      "label": "Real-Time Multi-Camera Vision Systems",
      "url": "/contents/public/cv/multi-camera-systems/",
      "tags": ["computer-vision","multi-camera","real-time","edge-ai"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/public/cuda-gpu/numba-jit/",
      "label": "Accelerate Python with Numba's @jit(nopython=True)",
      "url": "/contents/public/cuda-gpu/numba-jit/",
      "tags": ["python","numba","jit","performance"],
      "category": null
    },
    
    
    
    
    
    
    
    
    
    {
      "id": "/contents/publications/Books/AI/opencv5-chapter3-advanced/",
      "label": "OpenCV 5 — Chapter 3: Advanced Topics",
      "url": "/contents/publications/Books/AI/opencv5-chapter3-advanced/",
      "tags": ["opencv","computer-vision","image-processing","filtering"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/openvino/",
      "label": "OpenVINO Deep Learning",
      "url": "/contents/ai2026/openvino/",
      "tags": ["OpenVINO","Intel","inference","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/cv/optical-flow/",
      "label": "Optical Flow: Challenges and Solutions",
      "url": "/contents/public/cv/optical-flow/",
      "tags": ["computer-vision","optical-flow","motion-analysis","opencv"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/ai-llm/orchestrating-agents/",
      "label": "Mind Map: Orchestrating AI Agents",
      "url": "/contents/public/ai-llm/orchestrating-agents/",
      "tags": ["ai","llm","agents","multi-agent"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/parallel-programming/",
      "label": "Parallel Programming for Computer Vision",
      "url": "/contents/ai2026/parallel-programming/",
      "tags": ["parallel-programming","Python","computer-vision","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/pattern-image-calibration/",
      "label": "Pattern Image for Camera Calibration",
      "url": "/contents/publications/Papers/pattern-image-calibration/",
      "tags": ["camera-calibration","pattern-recognition","robotics"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/public/product/",
      "label": "Product — Embedded CV & Edge AI",
      "url": "/contents/public/product/",
      "tags": ["computer-vision","edge-ai","embedded-systems","product"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/pkm/proof/",
      "label": "Site Link Index",
      "url": "/contents/pkm/proof/",
      "tags": ["site-index","links","documentation"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Journals/psnr-threshold-segmentation/",
      "label": "PSNR Threshold for Image Segmentation",
      "url": "/contents/publications/Journals/psnr-threshold-segmentation/",
      "tags": ["psnr","thresholding","image-segmentation","image-processing"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/cuda-gpu/pycuda-kernels/",
      "label": "How PyCUDA Reads and Runs C Kernels",
      "url": "/contents/public/cuda-gpu/pycuda-kernels/",
      "tags": ["cuda","gpu","python","parallel-computing"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/research/",
      "label": "Research — Publications & Patents",
      "url": "/contents/public/research/",
      "tags": ["research","publications","patents","computer-vision"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/risc-v/",
      "label": "RISC-V for AI",
      "url": "/contents/ai2026/risc-v/",
      "tags": ["RISC-V","edge-AI","processor","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/ros/",
      "label": "ROS: Robot Operating System",
      "url": "/contents/ai2026/ros/",
      "tags": ["ROS","robotics","ETH-Zurich","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    
    
    
    
    {
      "id": "/contents/public/setup/",
      "label": "Developer Tools & Setup Guide",
      "url": "/contents/public/setup/",
      "tags": ["developer-tools","docker","github","productivity"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/shell-vim-quickref/",
      "label": "Shell & Vim Quick Reference",
      "url": "/contents/public/shell-vim-quickref/",
      "tags": ["shell","vim","cli","developer-tools"],
      "category": null
    },
    
    
    
    {
      "id": "/assets/site-map/",
      "label": "Sitemap",
      "url": "/assets/site-map/",
      "tags": "indexing, sitemap",
      "category": null
    },
    
    
    
    
    
    
    
    {
      "id": "/contents/public/solutions/",
      "label": "Solutions — AI Courses & Workshops",
      "url": "/contents/public/solutions/",
      "tags": ["ai","courses","workshops","deep-learning"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/startup/",
      "label": "Startup Guide: Edge AI Business",
      "url": "/contents/public/startup/",
      "tags": ["startup","business","fundraising","ai"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Papers/tafreshgrid-grid-computing/",
      "label": "TafreshGrid: Grid Computing",
      "url": "/contents/publications/Papers/tafreshgrid-grid-computing/",
      "tags": ["grid-computing","distributed-systems","high-performance-computing"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/tensorflow-deployment/",
      "label": "TensorFlow Deployment Specialization",
      "url": "/contents/ai2026/tensorflow-deployment/",
      "tags": ["TensorFlow","TF.js","TF-Lite","mobile-ML","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    
    
    {
      "id": "/contents/ai2026/tesla/",
      "label": "Tesla AI",
      "url": "/contents/ai2026/tesla/",
      "tags": ["Tesla","autonomous-driving","AI","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/ai2026/topics/",
      "label": "Topics & Projects",
      "url": "/contents/ai2026/topics/",
      "tags": ["AI","OpenCV","camera-calibration","DRL","FarshidPirahansiah"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/pkm/use-cases/",
      "label": "Complete Portfolio",
      "url": "/contents/pkm/use-cases/",
      "tags": ["portfolio","computer-vision","edge-ai","github-projects"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/publications/Patents/vehicle-detection/",
      "label": "Moving Vehicle Detection WO2021107761A1",
      "url": "/contents/publications/Patents/vehicle-detection/",
      "tags": ["patent","vehicle-detection","image-processing","traffic-surveillance"],
      "category": null
    },
    
    
    
    {
      "id": "/contents/public/cuda-gpu/vscode-cuda-windows/",
      "label": "CUDA Development Environment in VS Code on Windows",
      "url": "/contents/public/cuda-gpu/vscode-cuda-windows/",
      "tags": ["cuda","gpu","development","visual-studio-code"],
      "category": null
    },
    
    
    
    
    
    
    
    
    
    
    
    
  ]
}

The approach works by decoupling the data source — storing data in YAML/frontmatter and generating JSON with Liquid — making it easy to swap in different visualizations while keeping data management in one place.

For tag co-occurrence edges (your graph-hashtags.json), loop all pairs of pages that share a tag:


This approach works on GitHub Pages because it uses only Liquid to do the counting and build the JSON string — no additional plugins needed.


2 — Fuzzy search: what you have vs. what you can add

You already use Fuse.js from CDN. That is the right call.

Fuse.js is a JavaScript library focused on “fuzzy” searching — approximate string matching — finding strings that are approximately equal to a given pattern rather than exactly. It initializes with index data and a configuration object, then the search() method returns an array of results each containing a reference to the original item.

The gap in your current setup is probably the CONTENT_INDEX. Right now it likely has title + tags. You can improve it by including:

Fuse.js config for multi-field weighted search:

const fuse = new Fuse(CONTENT_INDEX, {
  keys: [
    { name: 'title',    weight: 0.4 },
    { name: 'tags',     weight: 0.4 },
    { name: 'category', weight: 0.2 }
  ],
  threshold: 0.35,  // 0 = exact, 1 = anything
  includeScore: true,
  useExtendedSearch: true  // enables prefix/suffix/exact operators
})

Fuse.js provides a weighting system, allowing developers to assign different importance levels to fields. In real-world applications, searching across multiple fields with varying relevance is a common requirement, and Fuse.js handles this with per-field weights.

True semantic search (meaning-based, not character-based) requires an embedding model and vector DB. Semantic search converts text into high-dimensional vectors using a language model, then finds items whose vectors are close together in that space — it runs server-side, while Fuse.js runs entirely in the browser. You cannot do real semantic search on static GitHub Pages without a backend. Fuse.js is the correct answer for your constraint.

For hashtag search, extend Fuse’s index with a hashtags field populated from frontmatter:

---
tags: [computer-vision, edge-ai, onnx]
hashtags: "#cv #edge #hailo #mlops"
---

Then include hashtags as a Fuse.js key with moderate weight.


3 — Obsidian/Foam-style graph: what those actually do

Foam uses shortcuts and autocompletions to link thoughts together with [[wikilinks]], and provides a Graph Visualisation to get an overview of the workspace and discover relationships between thoughts using backlinking. The actual graph rendering in Foam is done in VS Code — it is not a static site feature.

For a published static version, what you want is exactly what you already built: D3 force-directed graph + JSON data. The key missing pieces vs. Obsidian are:

a) Backlink-based edges, not manually defined edges. Obsidian links pages by [[wikilink]]. You can mimic this with Jekyll by scanning page content for links (harder) or by adding a links: array to each page’s frontmatter and generating edges from that.

b) Node size = connectivity. Obsidian makes frequently-linked nodes bigger. In D3:

node.attr('r', d => 4 + Math.sqrt(d.linkCount || 1) * 2)

c) Hover preview. This is pure CSS + JS, no backend needed.


4 — D3 canvas rendering: what you already have is correct

For massive data sets, canvas rendering should be used instead of SVG — while SVG is great for small to moderate visualizations, canvas can handle thousands of elements with better performance. Your graph-view.js uses canvas, which is the right choice for 79+ nodes.

The D3 force simulation can be loaded purely from CDN:

<script src="https://cdn.jsdelivr.net/npm/d3@7/+esm" type="module"></script>

D3’s d3-force module: create a simulation for an array of nodes, apply the desired forces, then listen for tick events to render the nodes in your preferred graphics system, such as Canvas or SVG.


5 — What jekyll-graph (wikibonsai) does — and why you should NOT use it

jekyll-graph generates data and renders a graph that allows visitors to navigate a Jekyll site by clicking nodes. Nodes come from the site’s markdown files. Links for the web graph come from jekyll-wikilinks. It requires a Ruby plugin, so it does not work on standard GitHub Pages without GitHub Actions. Skip it.


6 — Specific architecture recommendations for your setup

Your current file split is good. Here is what to change or add:

Auto-generate assets/graph.json with Liquid (no more manual maintenance):

assets/graph.json        ← Liquid template, layout: none
assets/graph-hashtags.json ← Liquid template, layout: none

Add a search-index.json file for Fuse.js (separate from graph data, optimized for search):

---
layout: none
---
[


{
  "id": "/contents/publications/10Years/",
  "title": "10 Years of CV Debugging Lessons",
  "tags": ["computer-vision","debugging","lessons-learned","opencv"],
  "hashtags": "#cv #debugging #lessonslearned #opencv",
  "category": null,
  "url": "/contents/publications/10Years/"
},



{
  "id": "/contents/publications/Papers/2d-3d-map-movement/",
  "title": "2D vs 3D Mapping for Moving Objects",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Papers/2d-3d-map-movement/"
},



{
  "id": "/contents/publications/Journals/3d-slam-humanoid-robots/",
  "title": "3D SLAM and Humanoid Robot Linkages",
  "tags": ["slam","humanoid-robots","3d-mapping","robotics"],
  "hashtags": "#slam #humanoidrobots #3dmapping #robotics",
  "category": null,
  "url": "/contents/publications/Journals/3d-slam-humanoid-robots/"
},



{
  "id": "/contents/public/cv/3d/",
  "title": "3D Vision & Real-Time Multi-Camera Systems",
  "tags": ["computer-vision","3d-vision","depth-sensing","multi-camera"],
  "hashtags": "#cv #3dvision #depthsensing #multicamera",
  "category": null,
  "url": "/contents/public/cv/3d/"
},



{
  "id": "/404.html",
  "title": "Page Not Found",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/404.html"
},



{
  "id": "/contents/pkm/AboutMe/",
  "title": "Dr. Farshid Pirahansiah — AI & Computer Vision Engineer",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/pkm/AboutMe/"
},



{
  "id": "/contents/publications/CV/",
  "title": "CV — Dr. Farshid Pirahansiah",
  "tags": ["computer-vision","resume","publications","patents"],
  "hashtags": "#cv #resume #publications #patents",
  "category": null,
  "url": "/contents/publications/CV/"
},



{
  "id": "/contents/publications/Papers/My_Conference_Paper/",
  "title": "Conference Paper on Computer Vision",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Papers/My_Conference_Paper/"
},



{
  "id": "/contents/public/Resources/",
  "title": "Portfolio & Publications",
  "tags": ["portfolio","publications","patents","research"],
  "hashtags": "#portfolio #publications #patents #research",
  "category": null,
  "url": "/contents/public/Resources/"
},



{
  "id": "/contents/pkm/TOC/",
  "title": "PKM Methods & Website Structure",
  "tags": ["pkm","knowledge-management","productivity"],
  "hashtags": "#pkm #knowledgemanagement #productivity",
  "category": null,
  "url": "/contents/pkm/TOC/"
},



{
  "id": "/contents/publications/Papers/adaptive-image-segmentation-psnr/",
  "title": "PSNR-Based Segmentation for LPR",
  "tags": ["image-segmentation","psnr","thresholding","license-plate-recognition"],
  "hashtags": "#imagesegmentation #psnr #thresholding #lpr",
  "category": null,
  "url": "/contents/publications/Papers/adaptive-image-segmentation-psnr/"
},



{
  "id": "/contents/publications/Journals/adaptive-thresholding-psnr/",
  "title": "Adaptive Thresholding Based on PSNR",
  "tags": ["thresholding","psnr","adaptive-thresholding","image-segmentation"],
  "hashtags": "#thresholding #psnr #adaptivethresholding #imagesegmentation",
  "category": null,
  "url": "/contents/publications/Journals/adaptive-thresholding-psnr/"
},



{
  "id": "/contents/public/ai-llm/advanced-llm-concepts/",
  "title": "Advanced LLM Concepts",
  "tags": ["ai","llm","rag","multimodal"],
  "hashtags": "#ai #llm #rag #multimodal",
  "category": null,
  "url": "/contents/public/ai-llm/advanced-llm-concepts/"
},



{
  "id": "/contents/ai2026/ai-hardware/",
  "title": "AI Hardware Accelerators",
  "tags": ["AI-hardware","accelerators","NPU","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/ai-hardware/"
},



{
  "id": "/contents/publications/Journals/ant-colony-optimization/",
  "title": "Ant Colony Optimization for Image Processing",
  "tags": ["ant-colony-optimization","image-processing","thresholding","optimization"],
  "hashtags": "#aco #imageprocessing #thresholding #optimization",
  "category": null,
  "url": "/contents/publications/Journals/ant-colony-optimization/"
},



{
  "id": "/contents/public/ai-llm/avatar-generator/",
  "title": "Local Video Avatar Generator with Ollama",
  "tags": ["ai","llm","video-generation","ollama"],
  "hashtags": "#ai #llm #videogeneration #ollama",
  "category": null,
  "url": "/contents/public/ai-llm/avatar-generator/"
},



{
  "id": "/contents/public/ai-llm/blog/",
  "title": "Blog: AI, LLMs, and Computer Vision",
  "tags": ["ai","llm","rag","multi-agent"],
  "hashtags": "#ai #llm #rag #multiagent",
  "category": null,
  "url": "/contents/public/ai-llm/blog/"
},



{
  "id": "/contents/ai2026/book-summary/",
  "title": "Book Summaries",
  "tags": ["books","summaries","PKM","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/book-summary/"
},



{
  "id": "/contents/publications/Papers/camera-calibration-multi-modal/",
  "title": "Camera Calibration for Multi-Modal Vision",
  "tags": ["camera-calibration","multi-modal","robotics","image-quality"],
  "hashtags": "#cameracalibration #multimodal #robotics #iqa",
  "category": null,
  "url": "/contents/publications/Papers/camera-calibration-multi-modal/"
},





{
  "id": "/contents/publications/Journals/character-object-recognition/",
  "title": "Character & Object Recognition via Features",
  "tags": ["character-recognition","object-recognition","feature-extraction","glcm"],
  "hashtags": "#characterrecognition #objectrecognition #featureextraction #glcm",
  "category": null,
  "url": "/contents/publications/Journals/character-object-recognition/"
},



{
  "id": "/contents/publications/Papers/character-recognition-global-feature/",
  "title": "Character Recognition via Global Features",
  "tags": ["character-recognition","feature-extraction","glcm","ocr"],
  "hashtags": "#characterrecognition #featureextraction #glcm #ocr",
  "category": null,
  "url": "/contents/publications/Papers/character-recognition-global-feature/"
},



{
  "id": "/contents/publications/Papers/classification-geometrical-topological/",
  "title": "Classification with Geometrical Features",
  "tags": ["classification","geometrical-features","pattern-recognition","machine-learning"],
  "hashtags": "#classification #geometricalfeatures #patternrecognition #ml",
  "category": null,
  "url": "/contents/publications/Papers/classification-geometrical-topological/"
},



{
  "id": "/contents/ai2026/cloud-native/",
  "title": "Cloud-Native with Kubernetes",
  "tags": ["Docker","Kubernetes","cloud-native","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/cloud-native/"
},



{
  "id": "/contents/public/coaching/",
  "title": "CV Coaching & Teaching Roadmap",
  "tags": ["computer-vision","coaching","teaching","curriculum"],
  "hashtags": "#cv #coaching #teaching #curriculum",
  "category": null,
  "url": "/contents/public/coaching/"
},







{
  "id": "/contents/publications/Books/AI/computer-vision-meets-llm/",
  "title": "Computer Vision Meets LLM",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Books/AI/computer-vision-meets-llm/"
},



{
  "id": "/contents/public/cpp/",
  "title": "C++ Quick Reference",
  "tags": ["cpp","programming","debugging","memory-management"],
  "hashtags": "#cpp #programming #debugging #memorymanagement",
  "category": null,
  "url": "/contents/public/cpp/"
},



{
  "id": "/contents/ai2026/edge-ai-summit/",
  "title": "Edge AI Summit 2020",
  "tags": ["edge-AI","summit","tinyML","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/edge-ai-summit/"
},



{
  "id": "/contents/ai2026/embedded-iot/",
  "title": "Embedded IoT",
  "tags": ["IoT","embedded","edge-AI","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/embedded-iot/"
},



{
  "id": "/contents/public/enter/",
  "title": "Dr. Farshid Pirahansiah — CV & AI",
  "tags": ["computer-vision","ai","portfolio","about"],
  "hashtags": "#cv #ai #portfolio #about",
  "category": null,
  "url": "/contents/public/enter/"
},



{
  "id": "/contents/publications/Patents/face-image-augmentation/",
  "title": "Face Image Augmentation WO2021060971A1",
  "tags": ["patent","face-augmentation","gan","data-augmentation"],
  "hashtags": "#patent #faceaugmentation #gan #dataaugmentation",
  "category": null,
  "url": "/contents/publications/Patents/face-image-augmentation/"
},



{
  "id": "/contents/publications/Patents/facial-analysis-advertisement/",
  "title": "Facial Analysis Advertisement WO2020141969A2",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Patents/facial-analysis-advertisement/"
},



{
  "id": "/graph-tags/",
  "title": "Hashtag Graph",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/graph-tags/"
},



{
  "id": "/graph/",
  "title": "Knowledge Graph",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/graph/"
},



{
  "id": "/contents/ppt/farshid-ai-cv-llm-presentation/",
  "title": "Reducing Token Usage in AI-Assisted Development",
  "tags": ["presentation","ai","llm","token-optimization"],
  "hashtags": "#presentation #ai #llm #token-optimization",
  "category": null,
  "url": "/contents/ppt/farshid-ai-cv-llm-presentation/"
},



{
  "id": "/view/",
  "title": "View",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/view/"
},





{
  "id": "/contents/ai2026/fsdl-2022/",
  "title": "FSDL 2022 Notes",
  "tags": ["FSDL","deep-learning","MLOps","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/fsdl-2022/"
},



{
  "id": "/contents/ai2026/full-stack-deep-learning/",
  "title": "Full Stack Deep Learning",
  "tags": ["FSDL","full-stack-deep-learning","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/full-stack-deep-learning/"
},



{
  "id": "/graphnowledge/",
  "title": "Knowledge Graph — Files & Architecture",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/graphnowledge/"
},



{
  "id": "/contents/publications/Journals/gsft-psnr-fuzzy-threshold/",
  "title": "GSFT-PSNR: Fuzzy Threshold Method",
  "tags": ["fuzzy-logic","thresholding","psnr","image-segmentation"],
  "hashtags": "#fuzzylogic #thresholding #psnr #imagesegmentation",
  "category": null,
  "url": "/contents/publications/Journals/gsft-psnr-fuzzy-threshold/"
},



{
  "id": "/contents/projects/imageinMD/",
  "title": "test mindmap",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/projects/imageinMD/"
},



{
  "id": "/contents/public/optimization/",
  "title": "CV, DL & ML Optimization Guide",
  "tags": ["optimization","deep-learning","machine-learning","computer-vision"],
  "hashtags": "#optimization #deeplearning #machinelearning #cv",
  "category": null,
  "url": "/contents/public/optimization/"
},



{
  "id": "/contents/public/seo/",
  "title": "SEO for LLM-Powered Search",
  "tags": ["seo","llm","ai","web-optimization"],
  "hashtags": "#seo #llm #ai #weboptimization",
  "category": null,
  "url": "/contents/public/seo/"
},



{
  "id": "/contents/public/python/",
  "title": "Python Configuration & C++ Integration",
  "tags": ["python","cpp","configuration","development"],
  "hashtags": "#python #cpp #configuration #devtools",
  "category": null,
  "url": "/contents/public/python/"
},



{
  "id": "/contents/public/projects/Solutions/",
  "title": "Solutions",
  "tags": ["portfolio","computer-vision","ai","projects"],
  "hashtags": "#portfolio #cv #ai #projects",
  "category": null,
  "url": "/contents/public/projects/Solutions/"
},



{
  "id": "/contents/public/prompts/",
  "title": "Prompt Engineering Templates",
  "tags": ["prompt-engineering","llm","ai","nlp"],
  "hashtags": "#promptengineering #llm #ai #nlp",
  "category": null,
  "url": "/contents/public/prompts/"
},



{
  "id": "/contents/public/",
  "title": "Content Hub",
  "tags": ["computer-vision","ai","llm","edge-ai"],
  "hashtags": "#cv #ai #llm #edgeai",
  "category": null,
  "url": "/contents/public/"
},



{
  "id": "/contents/publications/Books/",
  "title": "Books & Book Chapters",
  "tags": ["book","opencv","computer-vision","ai"],
  "hashtags": "#book #opencv #computervision #ai",
  "category": null,
  "url": "/contents/publications/Books/"
},



{
  "id": "/contents/publications/Journals/",
  "title": "Journal Publications",
  "tags": ["journal","image-processing","thresholding","pattern-recognition"],
  "hashtags": "#research #cv #journals #thresholding",
  "category": null,
  "url": "/contents/publications/Journals/"
},



{
  "id": "/contents/publications/Keynotes/",
  "title": "Keynotes",
  "tags": ["keynote","ai","computer-vision","multimodal"],
  "hashtags": "#keynote #ai #computervision #multimodal",
  "category": null,
  "url": "/contents/publications/Keynotes/"
},



{
  "id": "/contents/publications/Patents/",
  "title": "Patents",
  "tags": ["patent","face-detection","vehicle-detection","augmented-reality"],
  "hashtags": "#patent #facedetection #vehicledetection #augmentedreality",
  "category": null,
  "url": "/contents/publications/Patents/"
},



{
  "id": "/contents/publications/Papers/",
  "title": "Conference Papers",
  "tags": ["research","paper","image-processing","computer-vision"],
  "hashtags": "#research #cv #papers #imageprocessing",
  "category": null,
  "url": "/contents/publications/Papers/"
},



{
  "id": "/",
  "title": "Dr. Farshid Pirahansiah ; Embedded Computer Vision & Edge AI",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/"
},



{
  "id": "/contents/ai2026/iot-scholarship/",
  "title": "IoT Scholarship: Edge AI with OpenVINO",
  "tags": ["IoT","OpenVINO","edge-AI","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/iot-scholarship/"
},



{
  "id": "/contents/publications/Papers/license-plate-recognition-entropy/",
  "title": "Entropy-Based Multi-Threshold LPR",
  "tags": ["license-plate-recognition","entropy","thresholding","image-segmentation"],
  "hashtags": "#lpr #entropy #thresholding #imagesegmentation",
  "category": null,
  "url": "/contents/publications/Papers/license-plate-recognition-entropy/"
},



{
  "id": "/contents/public/linkedin-top-posts/",
  "title": "Top LinkedIn Posts 2024",
  "tags": ["linkedin","camera-calibration","cpp","robotics"],
  "hashtags": "#linkedin #cameracalibration #cpp #robotics",
  "category": null,
  "url": "/contents/public/linkedin-top-posts/"
},



{
  "id": "/contents/public/links/",
  "title": "Curated Links & Resources",
  "tags": ["resources","tools","tutorials","references"],
  "hashtags": "#resources #tools #tutorials #references",
  "category": null,
  "url": "/contents/public/links/"
},



{
  "id": "/contents/pkm/links/",
  "title": "Curated Links & Resources",
  "tags": ["curated-links","ai-tools","resources"],
  "hashtags": "#curatedlinks #aitools #resources",
  "category": null,
  "url": "/contents/pkm/links/"
},





{
  "id": "/contents/ai2026/machine-learning-specialization/",
  "title": "Machine Learning Specialization",
  "tags": ["ML","Coursera","machine-learning-specialization","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/machine-learning-specialization/"
},



{
  "id": "/contents/menus/",
  "title": "Sitemap & Page Summaries",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/menus/"
},



{
  "id": "/contents/ai2026/metaverse/",
  "title": "Metaverse & XR",
  "tags": ["metaverse","XR","spatial-computing","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/metaverse/"
},



{
  "id": "/contents/ai2026/mlops/",
  "title": "MLOps",
  "tags": ["MLOps","machine-learning-engineering","Coursera","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/mlops/"
},



{
  "id": "/contents/public/cuda-gpu/mlx-coreml-metal/",
  "title": "MLX, CoreML, and Metal for Apple Silicon",
  "tags": ["apple-silicon","coreml","metal","mlx"],
  "hashtags": "#applesilicon #coreml #metal #mlx",
  "category": null,
  "url": "/contents/public/cuda-gpu/mlx-coreml-metal/"
},



{
  "id": "/contents/ai2026/modern-cpp/",
  "title": "Modern C++ for Image Processing",
  "tags": ["C++","C++23","image-processing","design-patterns","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/modern-cpp/"
},



{
  "id": "/contents/public/cv/multi-camera-systems/",
  "title": "Real-Time Multi-Camera Vision Systems",
  "tags": ["computer-vision","multi-camera","real-time","edge-ai"],
  "hashtags": "#cv #multicamera #realtime #edgeai",
  "category": null,
  "url": "/contents/public/cv/multi-camera-systems/"
},





{
  "id": "/contents/public/cuda-gpu/numba-jit/",
  "title": "Accelerate Python with Numba's @jit(nopython=True)",
  "tags": ["python","numba","jit","performance"],
  "hashtags": "#python #numba #jit #performance",
  "category": null,
  "url": "/contents/public/cuda-gpu/numba-jit/"
},



{
  "id": "/contents/publications/Books/AI/opencv5-chapter0-introduction/",
  "title": "OpenCV 5 — Chapter 0: Introduction",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Books/AI/opencv5-chapter0-introduction/"
},



{
  "id": "/contents/publications/Books/AI/opencv5-chapter1-image-basics/",
  "title": "OpenCV 5 — Chapter 1: Image Basics",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Books/AI/opencv5-chapter1-image-basics/"
},



{
  "id": "/contents/publications/Books/AI/opencv5-chapter2-feature-detection/",
  "title": "OpenCV 5 — Chapter 2: Feature Detection",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/publications/Books/AI/opencv5-chapter2-feature-detection/"
},



{
  "id": "/contents/publications/Books/AI/opencv5-chapter3-advanced/",
  "title": "OpenCV 5 — Chapter 3: Advanced Topics",
  "tags": ["opencv","computer-vision","image-processing","filtering"],
  "hashtags": "#opencv #cv #imageprocessing #filtering",
  "category": null,
  "url": "/contents/publications/Books/AI/opencv5-chapter3-advanced/"
},



{
  "id": "/contents/ai2026/openvino/",
  "title": "OpenVINO Deep Learning",
  "tags": ["OpenVINO","Intel","inference","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/openvino/"
},



{
  "id": "/contents/public/cv/optical-flow/",
  "title": "Optical Flow: Challenges and Solutions",
  "tags": ["computer-vision","optical-flow","motion-analysis","opencv"],
  "hashtags": "#cv #opticalflow #motionanalysis #opencv",
  "category": null,
  "url": "/contents/public/cv/optical-flow/"
},



{
  "id": "/contents/public/ai-llm/orchestrating-agents/",
  "title": "Mind Map: Orchestrating AI Agents",
  "tags": ["ai","llm","agents","multi-agent"],
  "hashtags": "#ai #llm #agents #multiagent",
  "category": null,
  "url": "/contents/public/ai-llm/orchestrating-agents/"
},



{
  "id": "/contents/ai2026/parallel-programming/",
  "title": "Parallel Programming for Computer Vision",
  "tags": ["parallel-programming","Python","computer-vision","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/parallel-programming/"
},



{
  "id": "/contents/publications/Papers/pattern-image-calibration/",
  "title": "Pattern Image for Camera Calibration",
  "tags": ["camera-calibration","pattern-recognition","robotics"],
  "hashtags": "#cameracalibration #patternrecognition #robotics",
  "category": null,
  "url": "/contents/publications/Papers/pattern-image-calibration/"
},



{
  "id": "/privacy/",
  "title": "Privacy Policy",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/privacy/"
},



{
  "id": "/contents/public/product/",
  "title": "Product — Embedded CV & Edge AI",
  "tags": ["computer-vision","edge-ai","embedded-systems","product"],
  "hashtags": "#cv #edgeai #embeddedsystems #product",
  "category": null,
  "url": "/contents/public/product/"
},



{
  "id": "/contents/pkm/proof/",
  "title": "Site Link Index",
  "tags": ["site-index","links","documentation"],
  "hashtags": "#siteindex #links #documentation",
  "category": null,
  "url": "/contents/pkm/proof/"
},



{
  "id": "/contents/publications/Journals/psnr-threshold-segmentation/",
  "title": "PSNR Threshold for Image Segmentation",
  "tags": ["psnr","thresholding","image-segmentation","image-processing"],
  "hashtags": "#psnr #thresholding #imagesegmentation #imageprocessing",
  "category": null,
  "url": "/contents/publications/Journals/psnr-threshold-segmentation/"
},



{
  "id": "/contents/public/cuda-gpu/pycuda-kernels/",
  "title": "How PyCUDA Reads and Runs C Kernels",
  "tags": ["cuda","gpu","python","parallel-computing"],
  "hashtags": "#cuda #gpu #python #parallelcomputing",
  "category": null,
  "url": "/contents/public/cuda-gpu/pycuda-kernels/"
},



{
  "id": "/contents/public/research/",
  "title": "Research — Publications & Patents",
  "tags": ["research","publications","patents","computer-vision"],
  "hashtags": "#research #publications #patents #cv",
  "category": null,
  "url": "/contents/public/research/"
},



{
  "id": "/contents/ai2026/risc-v/",
  "title": "RISC-V for AI",
  "tags": ["RISC-V","edge-AI","processor","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/risc-v/"
},



{
  "id": "/contents/ai2026/ros/",
  "title": "ROS: Robot Operating System",
  "tags": ["ROS","robotics","ETH-Zurich","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/ros/"
},





{
  "id": "/search/",
  "title": "Search",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/search/"
},



{
  "id": "/contents/public/setup/",
  "title": "Developer Tools & Setup Guide",
  "tags": ["developer-tools","docker","github","productivity"],
  "hashtags": "#devtools #docker #github #productivity",
  "category": null,
  "url": "/contents/public/setup/"
},



{
  "id": "/contents/public/shell-vim-quickref/",
  "title": "Shell & Vim Quick Reference",
  "tags": ["shell","vim","cli","developer-tools"],
  "hashtags": "#shell #vim #cli #devtools",
  "category": null,
  "url": "/contents/public/shell-vim-quickref/"
},



{
  "id": "/assets/site-map/",
  "title": "Sitemap",
  "tags": "indexing, sitemap",
  "hashtags": null,
  "category": null,
  "url": "/assets/site-map/"
},



{
  "id": "/contents/sitemap/",
  "title": "Sitemap — All Pages",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/sitemap/"
},





{
  "id": "/contents/public/solutions/",
  "title": "Solutions — AI Courses & Workshops",
  "tags": ["ai","courses","workshops","deep-learning"],
  "hashtags": "#ai #courses #workshops #deeplearning",
  "category": null,
  "url": "/contents/public/solutions/"
},



{
  "id": "/contents/public/startup/",
  "title": "Startup Guide: Edge AI Business",
  "tags": ["startup","business","fundraising","ai"],
  "hashtags": "#startup #business #fundraising #ai",
  "category": null,
  "url": "/contents/public/startup/"
},



{
  "id": "/contents/publications/Papers/tafreshgrid-grid-computing/",
  "title": "TafreshGrid: Grid Computing",
  "tags": ["grid-computing","distributed-systems","high-performance-computing"],
  "hashtags": "#gridcomputing #distributedsystems #hpc",
  "category": null,
  "url": "/contents/publications/Papers/tafreshgrid-grid-computing/"
},



{
  "id": "/contents/ai2026/tensorflow-deployment/",
  "title": "TensorFlow Deployment Specialization",
  "tags": ["TensorFlow","TF.js","TF-Lite","mobile-ML","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/tensorflow-deployment/"
},



{
  "id": "/terms/",
  "title": "Terms of Service",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/terms/"
},



{
  "id": "/contents/ai2026/tesla/",
  "title": "Tesla AI",
  "tags": ["Tesla","autonomous-driving","AI","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/tesla/"
},



{
  "id": "/contents/ai2026/topics/",
  "title": "Topics & Projects",
  "tags": ["AI","OpenCV","camera-calibration","DRL","FarshidPirahansiah"],
  "hashtags": null,
  "category": null,
  "url": "/contents/ai2026/topics/"
},



{
  "id": "/contents/pkm/use-cases/",
  "title": "Complete Portfolio",
  "tags": ["portfolio","computer-vision","edge-ai","github-projects"],
  "hashtags": "#portfolio #computervision #edgeai #github",
  "category": null,
  "url": "/contents/pkm/use-cases/"
},



{
  "id": "/contents/publications/Patents/vehicle-detection/",
  "title": "Moving Vehicle Detection WO2021107761A1",
  "tags": ["patent","vehicle-detection","image-processing","traffic-surveillance"],
  "hashtags": "#patent #vehicledetection #imageprocessing #trafficsurveillance",
  "category": null,
  "url": "/contents/publications/Patents/vehicle-detection/"
},



{
  "id": "/contents/public/cuda-gpu/vscode-cuda-windows/",
  "title": "CUDA Development Environment in VS Code on Windows",
  "tags": ["cuda","gpu","development","visual-studio-code"],
  "hashtags": "#cuda #gpu #devtools #vscode",
  "category": null,
  "url": "/contents/public/cuda-gpu/vscode-cuda-windows/"
},



{
  "id": "/contents/wiki/",
  "title": "All Pages — pirahansiah.com",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/wiki/"
},





{
  "id": "/contents/README/",
  "title": "PKM",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/README/"
},





{
  "id": "/contents/",
  "title": "PKM",
  "tags": null,
  "hashtags": null,
  "category": null,
  "url": "/contents/"
}


]

Then in your graph page, load both:

const [graphData, searchIndex] = await Promise.all([
  fetch('/assets/graph.json').then(r => r.json()),
  fetch('/assets/search-index.json').then(r => r.json())
])
const fuse = new Fuse(searchIndex, { keys: ['title','tags','hashtags','category'], threshold: 0.35 })

Hashtag co-occurrence edges: The most practical approach for your 79-node graph is to define co_tags: arrays in frontmatter for each hub node, then let Liquid generate edges from those. Direct content scanning for [[links]] is not feasible in plain Liquid.


Summary table

Feature Tool Where it runs Works on GH Pages?
Fuzzy search (title/tags) Fuse.js from CDN Browser
Force graph D3 v7 from CDN Browser
Auto-generate graph.json Liquid template Jekyll build
Tag co-occurrence edges Liquid loop Jekyll build
True semantic (vector) search needs embedding API Server
Wikilink backlink scanning jekyll-wikilinks Ruby plugin ❌ (needs Actions)
Obsidian publish Obsidian product SaaS ❌ (costs money)

The bottom line: your architecture is already correct. The main upgrade is replacing the hand-edited graph.json with a Liquid-generated one, and adding a dedicated Fuse.js search index JSON with hashtags as a separate weighted field.