<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ECG on Toothbrush's Blog</title><link>https://www.tianhao.me/en/tags/ecg/</link><description>Recent content in ECG on Toothbrush's Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>牙刷刷</copyright><lastBuildDate>Thu, 12 Nov 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://www.tianhao.me/en/tags/ecg/index.xml" rel="self" type="application/rss+xml"/><item><title>ECG Lab: An Interactive Electrocardiogram Learning Platform</title><link>https://www.tianhao.me/en/posts/ecg-lab-intro/</link><pubDate>Thu, 12 Nov 2026 10:00:00 +0800</pubDate><guid>https://www.tianhao.me/en/posts/ecg-lab-intro/</guid><description>&lt;img src="https://www.tianhao.me/uploads/ecg-lab-screenshot.png" alt="Featured image of post ECG Lab: An Interactive Electrocardiogram Learning Platform" /&gt;&lt;h2 id="project-background"&gt;Project Background&#10;&lt;/h2&gt;&lt;p&gt;ECG interpretation is a core clinical skill, but traditional learning methods often rely on static images and lengthy text, presenting several pain points:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;📱 Grid lines are hard to see on mobile devices, making waveform measurement difficult&lt;/li&gt;&#10;&lt;li&gt;📚 Practice and learning are disconnected, with no immediate feedback after studying theory&lt;/li&gt;&#10;&lt;li&gt;🎯 Emergency procedures can only be memorized through videos, lacking interactive training&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;ECG Lab&lt;/strong&gt; was created to solve these problems.&lt;/p&gt;&#10;&lt;h2 id="core-features"&gt;Core Features&#10;&lt;/h2&gt;&lt;h3 id="-systematic-learning"&gt;📚 Systematic Learning&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;238 chapters&lt;/strong&gt;: Covering electrophysiology, leads &amp;amp; vectors, atrial/ventricular hypertrophy, ischemia &amp;amp; infarction, electrolytes &amp;amp; medications, and more&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Interactive ECG waveforms&lt;/strong&gt;: 500 Hz sampling rate, supporting rhythm strips/12-lead display, loop/continuous scrolling, annotation and hover measurement&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Bilingual support&lt;/strong&gt;: All content available in Chinese and English&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="-practice-exercises"&gt;✍️ Practice Exercises&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Systematic interpretation training&lt;/strong&gt;: Six-step reading (rate→rhythm→axis→intervals→ST-T→conclusion) with step-by-step feedback&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;2000+ practice questions&lt;/strong&gt;: Covering 42 diagnoses, with chapter filtering and multi-select support&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Three game modes&lt;/strong&gt;: Classic interpretation, Speed 60s, Combo survival&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Adaptive spaced repetition&lt;/strong&gt;: Error log tracks confused options, with 1→3→8→20 day intervals&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="-simulation-tests"&gt;🎯 Simulation Tests&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ACLS emergency simulation&lt;/strong&gt;: 12 server-side state machine scenarios, CPR quality, defibrillation/cardioversion, drug timing training&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ECG viewer&lt;/strong&gt;: Supports zoom, measurement and annotation, analyzing real ECGs like in clinical practice&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="-laboratory"&gt;🔬 Laboratory&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Cardiac Vector Lab&lt;/strong&gt;: P/QRS/T 3D vector loops, hexaxial and limb lead projections, precordial lead positioning&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Electrolyte Lab&lt;/strong&gt;: K⁺/Ca²⁺/Mg²⁺ sliders with real-time waveform changes&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Daily Challenge&lt;/strong&gt;: 10 site-wide questions, continuous check-in calendar&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="tech-stack"&gt;Tech Stack&#10;&lt;/h2&gt;&lt;h3 id="backend"&gt;Backend&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PHP 8.4&lt;/strong&gt; (no framework, native implementation)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;MySQL 8+&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;PDO MySQL&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AES-256-GCM tokens&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;WebAuthn Passkey&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="frontend"&gt;Frontend&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Native ES Modules&lt;/strong&gt; (zero build tools)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Canvas / SVG&lt;/strong&gt; waveform rendering&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Service Worker&lt;/strong&gt; (PWA offline support)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="highlights"&gt;Highlights&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Zero build for frontend and backend, no webpack/vite dependencies&lt;/li&gt;&#10;&lt;li&gt;Teaching-first design, all waveforms marked as &amp;ldquo;educational illustrations&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;BYOK (Bring Your Own Key) AI integration support&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="project-highlights"&gt;Project Highlights&#10;&lt;/h2&gt;&lt;h3 id="-interactive-design"&gt;🎨 Interactive Design&#10;&lt;/h3&gt;&lt;p&gt;Traditional ECG learning is &amp;ldquo;look at pictures and talk&amp;rdquo;, ECG Lab lets you &lt;strong&gt;operate hands-on&lt;/strong&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Drag sliders to change electrolyte concentrations, observe waveform changes in real-time&lt;/li&gt;&#10;&lt;li&gt;Click anywhere on the waveform to measure intervals and amplitudes&lt;/li&gt;&#10;&lt;li&gt;Rotate 3D cardiac vector loops to understand spatial projections&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="-intelligent-assessment"&gt;📊 Intelligent Assessment&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;XP level system&lt;/strong&gt;: Lv.1-20, unlocking different difficulty levels&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Ability radar chart&lt;/strong&gt;: Visualize mastery of each chapter&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Error analysis&lt;/strong&gt;: AI explains differential points for wrong options (unlocked at Lv.10)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="-open-source--free"&gt;🌍 Open Source &amp;amp; Free&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Code licensed under &lt;a class="link" href="https://github.com/AndroidOL/ecg-academy" target="_blank" rel="noopener"&#10; &gt;MIT&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Educational content under CC BY-SA 4.0&lt;/li&gt;&#10;&lt;li&gt;Full access without login required&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="user-experience"&gt;User Experience&#10;&lt;/h2&gt;&lt;p&gt;🔗 &lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a class="link" href="https://ecg.tianhao.me" target="_blank" rel="noopener"&#10; &gt;ecg.tianhao.me&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Desktop and mobile responsive&lt;/li&gt;&#10;&lt;li&gt;PWA installable to home screen, offline capable&lt;/li&gt;&#10;&lt;li&gt;Dual themes (light/dark), Chinese/English interface switching&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="project-screenshots"&gt;Project Screenshots&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="ECG Lab Homepage" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tianhao.me/uploads/ecg-lab-home.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;System learning interface: Course map and chapter navigation&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="ECG Interaction" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tianhao.me/uploads/ecg-lab-ecg.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Interactive waveforms: Zoom, measure, annotate&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Vector Lab" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.tianhao.me/uploads/ecg-lab-vectors.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Cardiac Vector Lab: 3D vector loop visualization&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="future-roadmap"&gt;Future Roadmap&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;📱 WFDB/SCP format adaptation for real ECG data&lt;/li&gt;&#10;&lt;li&gt;🎓 CME (Continuing Medical Education) assessment system&lt;/li&gt;&#10;&lt;li&gt;🤖 Enhanced AI tutor supporting more clinical scenario Q&amp;amp;A&lt;/li&gt;&#10;&lt;li&gt;📊 Waveform annotator for custom key point marking&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="summary"&gt;Summary&#10;&lt;/h2&gt;&lt;p&gt;ECG Lab is my exploration in medical education, attempting to solve traditional ECG learning pain points with modern web technologies. The project uses a zero-build native tech stack, focusing on interactivity and teaching experience, hoping to provide medical students and clinicians with an efficient and engaging learning tool.&lt;/p&gt;&#10;&lt;p&gt;Welcome to try it and provide feedback!&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a class="link" href="https://github.com/AndroidOL/ecg-academy" target="_blank" rel="noopener"&#10; &gt;github.com/AndroidOL/ecg-academy&lt;/a&gt;&lt;br&gt;&#10;&lt;strong&gt;Live Site&lt;/strong&gt;: &lt;a class="link" href="https://ecg.tianhao.me" target="_blank" rel="noopener"&#10; &gt;ecg.tianhao.me&lt;/a&gt;&lt;/p&gt;&#10;</description></item></channel></rss>