Completed
on 3 Jan 2026, 12:47 pm

Output

Why Not Rust + React SPA?

Short Answer: Claude Can't Build SPAs (Yet)

The current stack was chosen because Claude Code can rapidly iterate on it. Rust/React would require tooling Claude struggles with.

Key Constraints

Build Tooling Vite/Webpack/Turbopack configs are fragile. Claude breaks them often, then spends hours debugging.
Type Systems Rust's borrow checker + TypeScript's strict mode = 2x the compilation errors to debug.
Hot Reload Server-rendered HTML changes instantly. React HMR breaks in weird ways.
Dependencies Node modules + Cargo = 500MB of deps. Deno has zero build step.

What Claude Excels At

  • Inline HTML: Server generates complete pages, no hydration
  • Vanilla JS: No bundler, no transpiler, just <script> tags
  • Deno: TypeScript runs directly, single binary, fast startup
  • SSE: Native browser API, no WebSocket libraries needed

Trade-offs Accepted

We Lose We Gain
Component reusability 10x faster iteration
Type-safe client code Claude can modify anything instantly
Rust's performance Deno is fast enough (V8 + native)
React ecosystem No npm audit, no CVEs, no breaking changes

When Would Rust/React Make Sense?

  • Production SaaS: Multiple developers, long-term maintenance
  • High concurrency: 1000+ simultaneous streams (Rust async)
  • Complex UI: Drag-drop, real-time collaboration, offline-first
  • Team has expertise: Existing Rust/React developers

For a vibetools internal tool with one primary user, the current stack is optimal.

What's Next?

Choose an action:

Quick Actions

Original Request

No layout configured

Details

Type General
Status Completed
Scope vibetools
Tags architecturedecisionstech-stack
Created 3 Jan 2026, 12:47 pm
Updated 3 Jan 2026, 12:47 pm
Created By claude

Raw Data

{
  "id": "2838d8a7-0900-4c31-9e81-92f90853f507",
  "type": "general",
  "status": "completed",
  "title": "Why Deno + HTML Instead of Rust/React SPA?",
  "description": "Architectural decision rationale for current tech stack choice",
  "context": {
    "output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\">\n<h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 16px 0;\">Why Not Rust + React SPA?</h2>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#98c379;margin:0 0 12px 0;\">Short Answer: Claude Can't Build SPAs (Yet)</h3>\n<p style=\"margin:0;line-height:1.6;\">The current stack was chosen because <strong>Claude Code</strong> can rapidly iterate on it. Rust/React would require tooling Claude struggles with.</p>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#61afef;margin:0 0 12px 0;\">Key Constraints</h3>\n<table style=\"width:100%;border-collapse:collapse;\">\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:10px 0;width:40%;\"><strong style=\"color:#e5c07b;\">Build Tooling</strong></td>\n<td style=\"padding:10px 0;color:#9ca3af;\">Vite/Webpack/Turbopack configs are fragile. Claude breaks them often, then spends hours debugging.</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:10px 0;\"><strong style=\"color:#e5c07b;\">Type Systems</strong></td>\n<td style=\"padding:10px 0;color:#9ca3af;\">Rust's borrow checker + TypeScript's strict mode = 2x the compilation errors to debug.</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:10px 0;\"><strong style=\"color:#e5c07b;\">Hot Reload</strong></td>\n<td style=\"padding:10px 0;color:#9ca3af;\">Server-rendered HTML changes instantly. React HMR breaks in weird ways.</td>\n</tr>\n<tr>\n<td style=\"padding:10px 0;\"><strong style=\"color:#e5c07b;\">Dependencies</strong></td>\n<td style=\"padding:10px 0;color:#9ca3af;\">Node modules + Cargo = 500MB of deps. Deno has zero build step.</td>\n</tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#c678dd;margin:0 0 12px 0;\">What Claude Excels At</h3>\n<ul style=\"margin:0;padding-left:20px;line-height:1.8;\">\n<li><strong>Inline HTML:</strong> Server generates complete pages, no hydration</li>\n<li><strong>Vanilla JS:</strong> No bundler, no transpiler, just <code style=\"background:#3d3d3d;padding:2px 6px;border-radius:3px;\">&lt;script&gt;</code> tags</li>\n<li><strong>Deno:</strong> TypeScript runs directly, single binary, fast startup</li>\n<li><strong>SSE:</strong> Native browser API, no WebSocket libraries needed</li>\n</ul>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#e5c07b;margin:0 0 12px 0;\">Trade-offs Accepted</h3>\n<table style=\"width:100%;border-collapse:collapse;\">\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<th style=\"text-align:left;padding:8px 0;color:#98c379;\">We Lose</th>\n<th style=\"text-align:left;padding:8px 0;color:#61afef;\">We Gain</th>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;\">Component reusability</td>\n<td style=\"padding:8px 0;\">10x faster iteration</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;\">Type-safe client code</td>\n<td style=\"padding:8px 0;\">Claude can modify anything instantly</td>\n</tr>\n<tr style=\"border-bottom:1px solid #3d3d3d;\">\n<td style=\"padding:8px 0;\">Rust's performance</td>\n<td style=\"padding:8px 0;\">Deno is fast enough (V8 + native)</td>\n</tr>\n<tr>\n<td style=\"padding:8px 0;\">React ecosystem</td>\n<td style=\"padding:8px 0;\">No npm audit, no CVEs, no breaking changes</td>\n</tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;\">\n<h3 style=\"color:#56b6c2;margin:0 0 12px 0;\">When Would Rust/React Make Sense?</h3>\n<ul style=\"margin:0;padding-left:20px;line-height:1.8;\">\n<li><strong>Production SaaS:</strong> Multiple developers, long-term maintenance</li>\n<li><strong>High concurrency:</strong> 1000+ simultaneous streams (Rust async)</li>\n<li><strong>Complex UI:</strong> Drag-drop, real-time collaboration, offline-first</li>\n<li><strong>Team has expertise:</strong> Existing Rust/React developers</li>\n</ul>\n<p style=\"margin:12px 0 0 0;color:#9ca3af;font-size:0.9em;\">For a vibetools internal tool with one primary user, the current stack is optimal.</p>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-top:16px;font-family:sans-serif;\">\n<h4 style=\"margin:0 0 8px 0;color:#fff;\">What's Next?</h4>\n<p style=\"color:#9ca3af;margin:0;\">Choose an action:</p>\n</div>\n</div>",
    "requestedAt": "2026-01-03T00:00:00.000Z",
    "requestId": "97a94988-6919-44f2-9396-c99bc8f1622e",
    "choices": [
      {
        "label": "Explore migration",
        "value": "What would it take to migrate konui to a React SPA in the future?",
        "primary": false
      },
      {
        "label": "Improve current stack",
        "value": "What improvements could we make to the current Deno/HTML stack?"
      },
      {
        "label": "Performance comparison",
        "value": "How does current Deno performance compare to what Rust would offer?"
      }
    ]
  },
  "createdBy": "claude",
  "createdAt": "2026-01-03T02:47:23.476Z",
  "updatedAt": "2026-01-03T02:47:23.630Z",
  "requestId": "97a94988-6919-44f2-9396-c99bc8f1622e",
  "scope": "vibetools",
  "tags": [
    "architecture",
    "decisions",
    "tech-stack"
  ],
  "targetUser": "claude"
}
DashboardReportsKontasksSessionsTelemetryLogs + Go