{"slug": "i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles", "title": "I built a tool that tells me if readers actually understood my articles", "summary": "A developer built QuizOps, a tool that uses GPT-4o to generate multiple-choice quizzes from article URLs, allowing writers to assess reader comprehension. The tool streams questions in real time via NDJSON and includes content moderation and community quiz banks. It is available free at quiz.autoshiftops.com.", "body_md": "After publishing 66 technical articles on DevOps and AI infrastructure, I realised I had a blind spot.\n\nI knew how many people visited my articles. I had no idea how many people understood them.\n\nPage views, bounce rates, time on page — none of these tell you whether your explanation of Kubernetes state management actually made sense to the reader.\n\nSo I built QuizOps.\n\n**What it does**\n\nYou paste your article URL. GPT-4o reads it and generates 10 multiple-choice questions streamed in real time. You review, edit, and publish. Your readers get a quiz link.\n\nYou see who passed, who failed, and which specific questions tripped people up.\n\n**The technical bits**\n\nThe generation uses OpenAI's streaming API with NDJSON output — each question is a complete JSON object on its own line. The frontend reads the ReadableStream line by line and renders questions as they arrive with a fade-in animation. It genuinely looks like the AI is thinking in real time.\n\n// Each line from the stream is a question\n\nconst lines = buffer.split('\\n');\n\nfor (const line of lines) {\n\nif (!line.trim()) continue;\n\ntry {\n\nconst q = JSON.parse(line);\n\nsetQuestions(prev => [...prev, q]);\n\n} catch {}\n\n}\n\nStack:\n\n**Content moderation**\n\nBefore generating questions, the API runs two classification checks:\n\nBoth use a lightweight GPT-4o-mini call before the main generation request.\n\n**Community quiz banks**\n\nBeyond publisher quizzes, there are community quiz banks (JSON files in the repo) covering: Prompt Engineering, LLM APIs, AI Agents, RAG & Vectors, Kubernetes, Terraform, GitHub Actions, Python for AI Engineers, Cloud Native, and AI Security.\n\nAnyone can add a new bank by dropping a JSON file — no code changes needed.\n\n**Try it**\n\n[quiz.autoshiftops.com](https://quiz.autoshiftops.com) — free, no credit card.\n\nWould love feedback from other technical writers on what's missing.", "url": "https://wpnews.pro/news/i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles", "canonical_source": "https://dev.to/autoshiftops/i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles-44d5", "published_at": "2026-08-14 23:09:44+00:00", "updated_at": "2026-08-14 23:40:41.684794+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "developer-tools", "ai-products"], "entities": ["QuizOps", "OpenAI", "GPT-4o", "GPT-4o-mini", "Kubernetes", "Terraform", "GitHub Actions", "Python"], "alternates": {"html": "https://wpnews.pro/news/i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles", "markdown": "https://wpnews.pro/news/i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles.md", "text": "https://wpnews.pro/news/i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles.txt", "jsonld": "https://wpnews.pro/news/i-built-a-tool-that-tells-me-if-readers-actually-understood-my-articles.jsonld"}}