{
    "archive_path": "archive/1788818736.88297",
    "base_url": "blog.crossui.com/2026/09/vibe-coding-made-reading-expensive",
    "basename": "vibe-coding-made-reading-expensive",
    "bookmarked_date": "2026-09-07 22:05",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/blog.crossui.com/2026/09/vibe-coding-made-reading-expensive",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=blog.crossui.com",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "blog.crossui.com/2026/09/vibe-coding-made-reading-expensive.html"
    },
    "domain": "blog.crossui.com",
    "extension": "",
    "hash": "1DYY213DWN9RKZWG92SK",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=blog.crossui.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-08T01:38:11.152094+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['curl', '--silent', '--location', '--compressed', '--max-time', '120', '--output', 'favicon.ico', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)', 'https://www.google.com/s2/favicons?domain=blog.crossui.com']' timed out after 120 seconds",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:36:11.121657+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=blog.crossui.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-08T01:11:17.563576+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['curl', '--silent', '--location', '--compressed', '--max-time', '120', '--output', 'favicon.ico', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)', 'https://www.google.com/s2/favicons?domain=blog.crossui.com']' timed out after 120 seconds",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:09:17.528829+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=blog.crossui.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-10T10:30:38.255066+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-10T10:30:37.830016+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-08T01:46:11.486441+00:00",
                "index_texts": null,
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:38:11.173450+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-08T01:19:17.948899+00:00",
                "index_texts": null,
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:11:17.574857+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-10T10:30:39.211167+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-10T10:30:38.262460+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [
            {
                "cmd": [
                    "(internal) archivebox.extractors.htmltotext",
                    "./{singlefile,dom}.html"
                ],
                "cmd_version": "0.7.4",
                "end_ts": "2026-09-08T02:00:23.347360+00:00",
                "index_texts": [],
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:56:23.219031+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "(internal) archivebox.extractors.htmltotext",
                    "./{singlefile,dom}.html"
                ],
                "cmd_version": "0.7.4",
                "end_ts": "2026-09-08T01:33:29.833233+00:00",
                "index_texts": [],
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:29:29.621148+00:00",
                "status": "failed"
            }
        ],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive",
                    "--format=text"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-09-08T01:56:23.212526+00:00",
                "index_texts": null,
                "output": "ArchiveError: Got /app/node_modules/@postlight/parser/cli.js response code: 1).",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:56:12.058347+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive",
                    "--format=text"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-09-08T01:29:29.613428+00:00",
                "index_texts": null,
                "output": "ArchiveError: Got /app/node_modules/@postlight/parser/cli.js response code: 1).",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:29:18.482224+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-09-10T10:30:47.433623+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-10T10:30:44.252277+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "curl",
                    "./{dom,singlefile}.html"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-09-08T01:56:12.046626+00:00",
                "index_texts": [],
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:52:11.816887+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "./{dom,singlefile}.html"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-09-08T01:29:18.473591+00:00",
                "index_texts": [],
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:25:18.252440+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpsdofk78o",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-09-10T10:30:44.238285+00:00",
                "index_texts": [
                    "~9 min read \u00b7 Opinion\n\nA junior I know shipped a change last month. Cursor wrote it. He ran it. Looked fine. Opened the PR.\n\nSenior sent it back in five minutes: \"this touches three things we don't have tests for.\"\n\nHe had nothing to say. He didn't write the code. It looked right. He genuinely didn't know what he'd missed \u2014 or where you'd even start looking.\n\nHe's not dumb. Nobody ever showed him what sits between \"looks right\" and \"I checked.\"\n\nThe myth first\n\nPeople keep saying AI made writing code free.\n\nIt didn't. Tokens cost real money. Run agents in a loop on a decent-sized repo for a week and go look at your bill. Nobody who's done that thinks generation is free.\n\nWhat AI actually did is narrower than the hype. It made producing a plausible diff fast. It did exactly nothing for the hard part \u2014 knowing whether that diff is safe.\n\nSo the cost didn't vanish. It moved. Writing got cheaper. Reading got brutal, because now there's ten times more of it and none of it is yours.\n\nNobody teaches reading\n\nThink about how we train people. Syntax. Hooks. Build a project. All production.\n\nThen they get a job where most of the day is reviewing changes they didn't write, and we act surprised when they can't.\n\nMost people file \"can spot a bad change\" under experience. Years of it. Can't teach it, you just earn it.\n\nI don't buy that. I've watched enough seniors do it to see it's not magic. It's four moves.\n\nLocate. Which element on screen does this actually affect? Not roughly. Exactly which JSX node.\n\nTrace. Is this a shared definition, or one call site? Shared means everything using it. Call site means just here. This one question decides whether the next move matters.\n\nBlast radius. If shared \u2014 who uses it? How many? Any references hiding behind a barrel or an export *, where your editor's search just doesn't look?\n\nRun it. Does it render what you expected? Including the branch that isn't on screen \u2014 the other half of that ternary.\n\nFour moves. All teachable. None taught.\n\n\"We have tools for this\"\n\nDo we? Let's check.\n\nTypeScript catches type mismatches. But AI's signature move is code that types perfectly and sits in exactly the wrong place. Add a legal optional prop to a shared component. All green. Three of five call sites now render a UI element that shouldn't be there.\n\nUnit tests only cover what someone already thought about. The danger with an AI change is that it landed on a call site nobody thought about. Which almost certainly has no coverage \u2014 that's the state of UI testing everywhere, not one lazy team.\n\nStorybook, visual regression. These tell you something changed. Never why. Alarms after the fact, and only for components someone bothered to write a story for.\n\nAnd then the diff view. This is the real problem, and it hides in plain sight.\n\nA diff shows you text. It shows you nothing about position or reach. Three lines feels safe. Three hundred feels scary. And that feeling has zero connection to what either one actually breaks.\n\nSit with that for a second, because it's the whole thing:\n\nDiff size and blast radius are unrelated. Human alarm scales with diff size anyway.\n\nA three-line change can hit eleven files. A three-hundred-line refactor can be perfectly contained. Your gut has it backwards, and vibe coding means you now get to be wrong about this several times a day.\n\n\"Fine, better models will fix it\"\n\nProbably not. And not for the reason people assume.\n\nThe model sees a window. A few open files, some conversation. From inside that window everything looks isolated. Almost nothing in a real repo is isolated.\n\nLook at what AI actually gets wrong. Same three patterns, forever:\n\nThinks it's editing one instance. Actually editing the shared definition. Five other places quietly change.\n\nImports through a path that isn't what it thought, because two barrels sat in between.\n\nEdits a branch that your case doesn't even go through, so the change never renders at all.\n\nNone of those are syntax problems. They're all where does this line sit in the system problems. Position. And position is not something a language model has good intuition for. A bigger context window is not a map.\n\nSomeone always replies: so give the model the graph. Fair, and we do. It helps.\n\nBut two things survive. First, shipping a change is a responsibility question, not an information question \u2014 when the AI says \"safe,\" someone still has to be able to check that, or you're trusting a system that bears no consequences. Second, the map has to exist before you can hand it to anyone. Build it first. Then argue about who reads it.\n\nWhy good engineers skip the checks anyway\n\nHere's the part that took me a while to see.\n\nThe four moves aren't hard to understand. Everyone nods along. And then they don't do them.\n\nNot laziness. Cost.\n\nLocating means eyeballing a wall of JSX hunting for which part of the UI this touches. Inside a .map(), inside a conditional, in a component from another file \u2014 that hunt is half your review.\n\nBlast radius means three greps, two of which return false hits from a string match, and none of which catch the reference coming in through a re-export.\n\nRunning it means switching to a terminal, maybe installing whatever the AI just pulled in, waiting for a build, waiting for a dev server. Two or three minutes to verify a two-second change. So people read it, decide it looks fine, and ship. That's not a discipline failure. That's an entirely rational response to an absurd ratio.\n\nLayer awareness means rebuilding a component's whole structure in your head. At 6pm. On the fourth PR of the day.\n\nWhich is why a better PR template doesn't fix this. A template tells people what to check. It does nothing about what checking costs \u2014 or whether the answer you get back is even right.\n\nSo we made the checks cheap\n\nBut cost was only half of it. The other half is worse.\n\nEven if you're willing to spend the half hour, some of these questions your tools cannot answer correctly.\n\nRun a Find All References on a component in a real template. It returns what it indexed. It does not return the reference that arrived through an export * in a barrel file \u2014 there's no textual match to find, and the indexer didn't resolve the chain. You get a list. The list looks complete. It isn't, and nothing tells you that.\n\nSo when someone does the diligent thing \u2014 greps it, checks the callers, decides it's contained \u2014 they can be diligent and wrong at the same time. That's the failure mode that actually bothers me, more than the people who skip the check entirely. At least skipping feels like skipping.\n\nThat's the reason CrossUI Studio exists. Not to run the same checks faster. To make a couple of them answerable at all.\n\nLocate is one click. Click the thing on screen, land on the exact JSX node that drew it \u2014 through the .map(), through the conditional, through a component defined in a different file. Works backwards too: cursor on a line, and everything it draws lights up on the canvas. Put the cursor inside a .map() and watch eight cards light up at once. That's the whole \"one line, many elements\" idea, no explanation needed.\n\nTrace is shown, not reconstructed. Click again and you climb: this expression, then the component call, then the call site that passed the props, then the file the component actually lives in. \"Shared definition or one call site\" stops being a thing you work out in your head. It's just on screen.\n\nBlast radius is a resolved graph, not a text search. We resolve imports the way a bundler would \u2014 through barrels, through path aliases, through export *. So \"who imports this\" returns the references a string search structurally can't reach. Fast is a side effect. Complete is the point.\n\nRunning it is instant. No install, no bundler, no dev server. Open a real repo, it renders in the browser. And that branch that isn't on screen? Put your cursor on it and we render it for you. No faking state, no editing test data to see what a VIP sees.\n\nTwo of those make a slow check fast. Two of them make a question answerable that wasn't. The second kind is the part I'd care about if I were choosing a tool.\n\nWhat that looks like in practice\n\nYou ask AI for a discount badge on the product card. It adds a conditional inside <ProductCard>. Clean diff. Runs. No errors.\n\nClick the badge. You land inside a .map() \u2014 so this isn't one card, it's every card in the list.\n\nClimb up one layer. <ProductCard> is a shared definition. This page doesn't own it.\n\nCheck who imports it. Three places: cart, favorites, search results. Search results has no discount field at all.\n\nOpen search results, cursor on the new branch, render it. There it is. Empty badge, alignment broken.\n\nUnder a minute. No build. Without those four moves that diff merges clean and you hear about it from a user.\n\nThe team version of this problem\n\nOne more thing, because individual judgment isn't a process.\n\nWhen half your team runs these checks and half doesn't, whether a bad PR gets caught depends on who got assigned. That's worse than a uniformly weak team, because it looks like something is working.\n\nAnd it caps how hard you can lean on AI. Without this, you've got two options: throttle AI usage, or accept an incident rate you can't predict. Neither is a strategy.\n\nThe uncomfortable version for anyone teaching this\n\nSame problem, one step earlier.\n\nIf a junior's day is mostly reviewing code they didn't write, then \"hand-write a TodoList\" is training the wrong muscle.\n\nBetter assignment: here's an AI-generated diff. It runs fine. Something in it is wrong. Find the real blast radius and show your work.\n\nBuild the material from the failure patterns above \u2014 bait diffs, tiny in lines, huge in reach. Train people out of trusting line count.\n\nNot saying skip learning to write code. Someone who's never hand-written a .map() or been burned by conditional rendering can't judge either. Writing is the floor judgment stands on. It just isn't the whole building. (More on the teaching side in a separate post.)\n\nWhere this leaves us\n\nThe bottleneck moved. Writing is cheap now. Reading is expensive \u2014 and part of it isn't just expensive, it's guesswork wearing the clothes of diligence.\n\nThat's the piece I'd want closed before leaning harder on AI. Not because review takes too long. Because \"I checked\" should mean something.\n\nIf you want to try the four moves on something real: CrossUI Studio opens an actual React repo in the browser, no install. Click something and see how far down it goes."
                ],
                "output": "readability",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-10T10:30:42.280489+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-08T01:52:11.808439+00:00",
                "index_texts": null,
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:48:11.608193+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-08T01:25:18.243768+00:00",
                "index_texts": null,
                "output": "ConnectionError: None: Max retries exceeded with url: /2026/09/vibe-coding-made-reading-expensive (Caused by NewConnectionError('None: Failed to establish a new connection: [Errno 101] Network is unreachable'))",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:21:18.059282+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-10T10:30:42.272977+00:00",
                "index_texts": null,
                "output": "Vibe coding made writing cheap. It made reading expensive. - CrossUI Studio \u2014 Symmetric Visual IDE",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-10T10:30:42.258122+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--backup-converted",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--warc-file=/data/archive/1788818736.88297/warc/1788831971",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-09-08T01:48:11.600945+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['wget', '--no-verbose', '--adjust-extension', '--convert-links', '--force-directories', '--backup-converted', '--span-hosts', '--no-parent', '-e', 'robots=off', '--timeout=120', '--restrict-file-names=windows', '--warc-file=/data/archive/1788818736.88297/warc/1788831971', '--page-requisites', '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3', '--compression=auto', 'https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive']' timed out after 120 seconds",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:46:11.496301+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--backup-converted",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--warc-file=/data/archive/1788818736.88297/warc/1788830357",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-09-08T01:21:18.048888+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['wget', '--no-verbose', '--adjust-extension', '--convert-links', '--force-directories', '--backup-converted', '--span-hosts', '--no-parent', '-e', 'robots=off', '--timeout=120', '--restrict-file-names=windows', '--warc-file=/data/archive/1788818736.88297/warc/1788830357', '--page-requisites', '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3', '--compression=auto', 'https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive']' timed out after 120 seconds",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-08T01:19:17.959574+00:00",
                "status": "failed"
            },
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--backup-converted",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--warc-file=/data/archive/1788818736.88297/warc/1789036239",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-09-10T10:30:42.247809+00:00",
                "index_texts": null,
                "output": "blog.crossui.com/2026/09/vibe-coding-made-reading-expensive.html",
                "pwd": "/data/archive/1788818736.88297",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-10T10:30:39.220730+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "Vibe coding made writing cheap. It made reading expensive. - CrossUI Studio \u2014 Symmetric Visual IDE",
        "warc": null,
        "wget": "blog.crossui.com/2026/09/vibe-coding-made-reading-expensive.html"
    },
    "link_dir": "/data/archive/1788818736.88297",
    "newest_archive_date": "2026-09-10T10:30:44.252277+00:00",
    "num_failures": 14,
    "num_outputs": 6,
    "oldest_archive_date": "2026-09-08T01:09:17.528829+00:00",
    "path": "/2026/09/vibe-coding-made-reading-expensive",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "6526ed25-a772-46a5-aaeb-b62a80b8e000",
    "sources": [
        "/data/sources/1788818736-import.txt"
    ],
    "tags": ",war-wiki",
    "tags_str": "war-wiki",
    "timestamp": "1788818736.88297",
    "title": "Vibe coding made writing cheap. It made reading expensive. - CrossUI Studio \u2014 Symmetric Visual IDE",
    "updated": "2026-09-10T10:30:37.829848+00:00",
    "updated_date": "2026-09-10 10:30",
    "url": "https://blog.crossui.com/2026/09/vibe-coding-made-reading-expensive"
}