[{"data":1,"prerenderedAt":428},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fwere-not-asking-enough-of-these-models":220,"\u002Fblog\u002Fwere-not-asking-enough-of-these-models-surround":424},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216],{"title":5,"path":6,"stem":7},"You do not have time to not have tests","\u002Fblog\u002Fyou-do-not-have-time-to-not-have-tests","2.blog\u002F20211217.you-do-not-have-time-to-not-have-tests",{"title":9,"path":10,"stem":11},"Migrate Vue 2 with Vuetify and Jest to Vite and Vitest","\u002Fblog\u002Fmigrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest","2.blog\u002F20220109.migrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest",{"title":13,"path":14,"stem":15},"I am a Dark Matter Developer","\u002Fblog\u002Fi-am-a-dark-matter-developer","2.blog\u002F20220626.i-am-a-dark-matter-developer",{"title":17,"path":18,"stem":19},"Why using Conventional commits is useful","\u002Fblog\u002Fusing-conventional-commits","2.blog\u002F20240623.using-conventional-commits",{"title":21,"path":22,"stem":23},"Why you should make a toolbox repository","\u002Fblog\u002Fwhy-you-should-make-a-toolbox-repository","2.blog\u002F20240630.Why-you-should-make-a-toolbox-repository",{"title":25,"path":26,"stem":27},"Apache Airflow Part 1 - Why and Goals for a near Serverless ELT","\u002Fblog\u002Fapache-airflow-part-1-why-and-goals","2.blog\u002F20240710.apache-airflow-part-1-why-and-goals",{"title":29,"path":30,"stem":31},"Oh My Zsh on your server","\u002Fblog\u002Foh-my-zsh-on-your-server","2.blog\u002F20240711.oh-my-zsh-on-your-server",{"title":33,"path":34,"stem":35},"Fire tablet and YouTube Kids","\u002Fblog\u002Ffire-tablet-and-youtube-kids","2.blog\u002F20240714.fire-tablet-and-youtube-kids",{"title":37,"path":38,"stem":39},"Using Ollama and Continue as a GitHub Copilot Alternative","\u002Fblog\u002Fusing-ollama-and-continue-as-github-copilot-alternative","2.blog\u002F20240723.using-ollama-and-continue-as-github-copilot-alternative",{"title":41,"path":42,"stem":43},"Debugging Local Packages Made Easy with pnpm","\u002Fblog\u002Fdebugging-local-packages-with-pnpm-link","2.blog\u002F20250422.debugging local-packages-with-pnpm-link",{"title":45,"path":46,"stem":47},"Two Weeks with Cloudflare AI and Tools","\u002Fblog\u002Ftwo-weeks-with-cloudflare-ai-and-tools","2.blog\u002F20250509.two-weeks-with-cloudflare-aI-and-tools",{"title":49,"path":50,"stem":51},"Adding Prompts to VS Code - How I Learned to Stop Worrying and Love AI Context","\u002Fblog\u002Fadding-prompts-to-vscode","2.blog\u002F20250528.adding-prompts-to-vscode",{"title":53,"path":54,"stem":55},"My Best Practices","\u002Fblog\u002Fmy-best-practicies","2.blog\u002F20250607.my-best-practicies",{"title":57,"path":58,"stem":59},"Creating my own CLI Tool - Towles Tool","\u002Fblog\u002Ftowles-tool","2.blog\u002F20250607.towles-tool",{"title":61,"path":62,"stem":63},"Software Development Best Practices & ITIL","\u002Fblog\u002Fsoftware-engineering-and-itil-best-practices","2.blog\u002F20250612.software-engineering-and-itil-best-practices",{"title":65,"path":66,"stem":67},"Voice to Text","\u002Fblog\u002Fvoice-to-text","2.blog\u002F20250622.voice-to-text",{"title":69,"path":70,"stem":71},"Setting Up ComfyUI - A Better Alternative to Fooocus","\u002Fblog\u002Fcomfy-ui-setup","2.blog\u002F20250628.comfy-ui-setup",{"title":73,"path":74,"stem":75},"Voice to System","\u002Fblog\u002Fvoice-to-system","2.blog\u002F20250705.voice-to-system",{"title":77,"path":78,"stem":79},"Tips for Claude Code","\u002Fblog\u002Ftips-for-claude-code","2.blog\u002F20250713.tips-for-claude-code",{"title":81,"path":82,"stem":83},"Review That AI Code: Why I Read Every Line Generated Code","\u002Fblog\u002Freview-that-ai-code","2.blog\u002F20250720.review-that-ai-code",{"title":85,"path":86,"stem":87},"My Context Engineering Journey: From Dev Scripts to AI Collaboration","\u002Fblog\u002F20250803-1.my-context-engineering-journey","2.blog\u002F20250803-1.my-context-engineering-journey",{"title":89,"path":90,"stem":91},"Context Engineering at Scale: Enterprise Lessons and the Future of Development","\u002Fblog\u002F20250803-2.context-engineering-at-scale","2.blog\u002F20250803-2.context-engineering-at-scale",{"title":93,"path":94,"stem":95},"Check That Your Tools and Linters Do Not Burn Tokens","\u002Fblog\u002Fcheck-that-your-tools-and-linters-do-not-burn-tokens","2.blog\u002F20250806.check-that-your-tools-and-linters-do-not-burn-tokens",{"title":97,"path":98,"stem":99},"Markdown + AI: The Communication Protocol That Changes Everything","\u002Fblog\u002Fmarkdown-plus-ai-the-communication-protocol-that-changes-everything","2.blog\u002F20250814.markdown-plus-ai-the-communication-protocol-that-changes-everything",{"title":101,"path":102,"stem":103},"Finally: Type-Safe AI in Production (And Why I'm Here For It)","\u002Fblog\u002Ffinally-type-safe-ai-in-production-and-why-im-here-for-it","2.blog\u002F20250819.finally-type-safe-ai-in-production-and-why-im-here-for-it",{"title":105,"path":106,"stem":107},"Dotfiles: Masterpiece or Late Stage Picasso?","\u002Fblog\u002Fdotfiles-masterpiece-or-late-stage-picasso","2.blog\u002F20250822.dotfiles-masterpiece-or-late-stage-picasso",{"title":109,"path":110,"stem":111},"Beyond API Wrappers: Building State-Driven MCP Servers for Long-Horizon Agent Orchestration","\u002Fblog\u002Fbeyond-api-wrappers-mcp-servers","2.blog\u002F20250907.beyond-api-wrappers-mcp-servers",{"title":113,"path":114,"stem":115},"Why Vertical Integration Wins: A Software Engineer's Case for Owning Your Stack","\u002Fblog\u002Fwhy-i-bought-tesla-model-3-vertical-integration","2.blog\u002F20250928.why-i-bought-tesla-model-3-vertical-integration",{"title":117,"path":118,"stem":119},"The Min-Maxer's Trifecta: Building Tools for the Game You Actually Play","\u002Fblog\u002Fmin-maxer-trifecta","2.blog\u002F20251004.min-maxer-trifecta",{"title":121,"path":122,"stem":123},"Read The Source: Learning by Cutting Out The Middleman and RTFM","\u002Fblog\u002Fread-the-source","2.blog\u002F20251010.read-the-source",{"title":125,"path":126,"stem":127},"The Exponential Shift: Why AI Progress Feels Different Now","\u002Fblog\u002Fthe-exponential-shift","2.blog\u002F20251015.the-exponential-shift",{"title":129,"path":130,"stem":131},"Plan Mode for Your Problems, Edit Mode for Claude's","\u002Fblog\u002Fplan-mode-problems-edit-mode-solutions","2.blog\u002F20251019.plan-mode-problems-edit-mode-solutions",{"title":133,"path":134,"stem":135},"AWS Aurora DSQL Looked Perfect Until I Needed the Connection String","\u002Fblog\u002Faws-aurora-dsql-postgres-serverless-authentication","2.blog\u002F20251028.aws-aurora-dsql-postgres-serverless-authentication",{"title":137,"path":138,"stem":139},"Switchback: Browser History for Your Thoughts","\u002Fblog\u002Fswitchback-second-order-reasoning","2.blog\u002F20251205.switchback-second-order-reasoning",{"title":141,"path":142,"stem":143},"AI Pairing: Notes to Self","\u002Fblog\u002Fai-pairing-notes-to-self","2.blog\u002F20251216.ai-pairing-notes-to-self",{"title":145,"path":146,"stem":147},"I've Been Sleeping on Zellij","\u002Fblog\u002Fsleeping-on-zellij","2.blog\u002F20251229.sleeping-on-zellij",{"title":149,"path":150,"stem":151},"Implementing a Ralph Wiggum Loop: The Secret is Session Markers","\u002Fblog\u002Fimplementing-ralph-wiggum-loop-for-autonomous-ai-coding","2.blog\u002F20260114.implementing-ralph-wiggum-loop-for-autonomous-ai-coding",{"title":153,"path":154,"stem":155},"Goodhart's Law Ate My Context Window","\u002Fblog\u002Fgoodharts-law-ate-my-context-window","2.blog\u002F20260119.goodharts-law-ate-my-context-window",{"title":157,"path":158,"stem":159},"Claude Code's Hidden Multi-Agent System Is Real","\u002Fblog\u002Fclaude-code-hidden-multi-agent-system","2.blog\u002F20260124.claude-code-hidden-multi-agent-system",{"title":161,"path":162,"stem":163},"Free Printable Math Sheets for Kids — Number Chart, Skip Counting, Multiplication, and More","\u002Fblog\u002Ffree-printable-number-chart-and-coin-sheets","2.blog\u002F20260214.free-printable-number-chart-and-coin-sheets",{"title":165,"path":166,"stem":167},"We Are Near the End of the Exponential","\u002Fblog\u002Fnear-the-end-of-the-exponential","2.blog\u002F20260214.near-the-end-of-the-exponential",{"title":169,"path":170,"stem":171},"Free Printable Language Arts Sheets for Kids — Sight Words, Parts of Speech, Homophones, and More","\u002Fblog\u002Ffree-printable-sight-words-and-grammar-sheets","2.blog\u002F20260215.free-printable-sight-words-and-grammar-sheets",{"title":173,"path":174,"stem":175},"Interactive Code Execution with Artifacts","\u002Fblog\u002Finteractive-code-execution-with-artifacts","2.blog\u002F20260215.interactive-code-execution-with-artifacts",{"title":177,"path":178,"stem":179},"Free Printable Telling Time Worksheet for Kids — Clock Reference & Practice Sheet","\u002Fblog\u002Ffree-printable-telling-time-worksheet","2.blog\u002F20260216.free-printable-telling-time-worksheet",{"title":181,"path":182,"stem":183},"Claude Code Skills: Teaching AI Your Playbook","\u002Fblog\u002Fclaude-code-skills-guide","2.blog\u002F20260221.claude-code-skills-guide",{"title":185,"path":186,"stem":187},"Building a Multi-Agent Loan Approval System with Human-in-the-Loop","\u002Fblog\u002Fmulti-agent-loan-approval-human-in-the-loop","2.blog\u002F20260225.multi-agent-loan-approval-human-in-the-loop",{"title":189,"path":190,"stem":191},"The Inception of AI Infrastructure: Bottlenecks All the Way Down","\u002Fblog\u002Fbiggest-bottleneck-scaling-ai-compute","2.blog\u002F20260313.biggest-bottleneck-scaling-ai-compute",{"title":193,"path":194,"stem":195},"What I Tell Teams About Claude Code","\u002Fblog\u002Fwhat-i-tell-teams-about-claude-code","2.blog\u002F20260314.what-i-tell-teams-about-claude-code",{"title":197,"path":198,"stem":199},"The Hardest Part of AI Isn't the AI","\u002Fblog\u002Fthe-hardest-part-of-ai-isnt-the-ai","2.blog\u002F20260327.the-hardest-part-of-ai-isnt-the-ai",{"title":201,"path":202,"stem":203},"Claude Code Hooks: The Capability I Left on the Table","\u002Fblog\u002Fclaude-code-hooks-capability-left-on-the-table","2.blog\u002F20260401.claude-code-hooks-capability-left-on-the-table",{"title":205,"path":206,"stem":207},"Claude in a Box: Trying Computer-Use on My Laptop","\u002Fblog\u002Fclaude-computer-use-in-a-box","2.blog\u002F20260418.claude-computer-use-in-a-box",{"title":209,"path":210,"stem":211},"MCP Apps: We Spent $100B on AI to Bring Back the Iframe","\u002Fblog\u002Fmcp-ext-apps-claude-desktop-developer-mode","2.blog\u002F20260505.mcp-ext-apps-claude-desktop-developer-mode",{"title":213,"path":214,"stem":215},"I Couldn't Give Up Ghostty, So I Put It Inside My App","\u002Fblog\u002Fi-couldnt-give-up-ghostty-so-i-put-it-inside-my-app","2.blog\u002F20260710.i-couldnt-give-up-ghostty-so-i-put-it-inside-my-app",{"title":217,"path":218,"stem":219},"We're Not Asking Enough of These Models","\u002Fblog\u002Fwere-not-asking-enough-of-these-models","2.blog\u002F20261004.were-not-asking-enough-of-these-models",{"id":221,"title":217,"authors":222,"badge":228,"body":230,"date":412,"description":413,"extension":414,"image":415,"meta":418,"navigation":419,"path":218,"rawbody":420,"seo":421,"status":422,"stem":219,"__hash__":423},"posts\u002F2.blog\u002F20261004.were-not-asking-enough-of-these-models.md",[223],{"name":224,"to":225,"avatar":226},"Chris Towles","https:\u002F\u002Ftwitter.com\u002FChris_Towles",{"src":227},"\u002Fimages\u002Fctowles-profile-512x512.png",{"label":229},"AI",{"type":231,"value":232,"toc":407},"minimark",[233,251,254,257,260,268,288,291,322,325,372,381,386,389,392,395,398,401],[234,235,236,237,244,245,250],"p",{},"Yesterday ",[238,239,243],"a",{"href":240,"rel":241},"https:\u002F\u002Fx.com\u002Fclaudeai\u002Fstatus\u002F2106125478956507480",[242],"nofollow","@claudeai shared a clip"," by ",[238,246,249],{"href":247,"rel":248},"https:\u002F\u002Fx.com\u002Ftechartist_\u002Fstatus\u002F2106064200535859685",[242],"Techartist",": a jet engine in interactive 3D, intake to exhaust, built with Opus 5.5 and Three.js. My prompt was one line: figure out where this came from, pull down the code, and recreate it locally.",[234,252,253],{},"There was no code to pull down. The source isn't published. So Claude rebuilt it from the video.",[234,255,256],{},"That should have been the end. Instead I kept asking for more, and it kept delivering.",[234,258,259],{},"It's live right here. Drag to orbit, click any part, or let the tour play:",[261,262],"iframe",{"src":263,"title":264,"loading":265,"allow":266,"style":267},"\u002Fdemos\u002Fturbofan-explorer\u002Findex.html","Turbofan Explorer: interactive 3D GEnx-1B turbofan on a Boeing 787-8","lazy","fullscreen","width: 100%; aspect-ratio: 16 \u002F 10; min-height: 480px; border: 1px solid #444; border-radius: 8px;",[269,270,272],"callout",{"icon":271},"i-lucide-play",[234,273,274,281,282,287],{},[275,276,277],"strong",{},[238,278,280],{"href":263,"target":279},"\\_blank","Open it full screen →"," Works on a phone, roomiest on a desktop. The ",[238,283,286],{"href":284,"rel":285,"target":279},"https:\u002F\u002Fclaude.ai\u002Fartifact\u002FNU5nSRri2NGoo2pXyXqm6w",[242],"Claude-hosted version"," adds \"Ask Claude about this part.\"",[234,289,290],{},"Here's what it does, about a day later:",[292,293,294,298,301,304,307,310,313,316,319],"ul",{},[295,296,297],"li",{},"A true-scale GEnx-1B on a true-scale 787-8 at cruise, with a cutaway, an exploded view, and click-any-part exploring. Every fact links to a public source.",[295,299,300],{},"A two-spool cycle model calibrated to GE's published datasheet. It lands at 70.0 klbf of takeoff thrust; GE's number is 69,800 lbf.",[295,302,303],{},"Colors, finishes and shapes checked side by side against about 150 photos of the real engine and airframe.",[295,305,306],{},"Thermal and pressure views, plus flight phases from takeoff to landing with EICAS-style gauges.",[295,308,309],{},"Compressor surge, bird strike, fan blade-off and icing scenarios.",[295,311,312],{},"A borescope you turn by hand, a teardown sequence, and a digital twin panel that reads trend CSVs.",[295,314,315],{},"Engine swaps: Trent 1000, GE9X, GE90, LEAP-1A, and the CFM RISE open fan.",[295,317,318],{},"Synthesized engine sound, with a nozzle chevron A\u002FB toggle.",[295,320,321],{},"An \"Ask Claude about this part\" box in the Claude-hosted version, using the artifact's built-in access to Claude.",[234,323,324],{},"That's about 4,700 lines of strict TypeScript with one dependency (Three.js). I did all of it from my phone, in the Claude mobile app, with Claude Code running on Anthropic's infrastructure. I never opened a laptop.",[269,326,328,334,369],{"icon":327},"i-lucide-refresh-cw",[234,329,330,333],{},[275,331,332],{},"Updated October 6."," I kept going, and the embed above is the latest build. Since this post went up:",[292,335,336,339,342,345,348,351,354,357,360,363,366],{},[295,337,338],{},"The GEnx-1B is now part by part: a gas path with every blade row, a real LP shaft and bearing sumps, and an accessory gearbox.",[295,340,341],{},"The nacelle opens the way a mechanic opens it, fan cowls then C-ducts, before the cutaway.",[295,343,344],{},"The exploded view lowers the engine onto a stand, clear of the runway when parked.",[295,346,347],{},"A cut-depth setting: nacelle only, through the cases, or through everything.",[295,349,350],{},"Each engine now has its own spinner, fan blades and exhaust plug, checked against photos: the Trent's spiral, the GE9X and LEAP comma markings, the RISE's white-edged scimitar blades.",[295,352,353],{},"A phone layout with a bottom sheet and readable data tables.",[295,355,356],{},"All six engines now come apart the way a mechanic takes them apart, with their own nacelles, hubs and pylons, and a development check that catches parts clipping through each other on every build. That check found about 4,900 clashes; under 100 are left.",[295,358,359],{},"The 787 stands on its landing gear on the runway, with the wing in its parked shape.",[295,361,362],{},"A speed slider that runs from a full stop up to 10×, so you can freeze the engine mid-turn and orbit it.",[295,364,365],{},"The spinning is fixed. The blades had been turning about ten times too fast for the screen, so they strobed: the fan looked like it ran backwards and rows on the same shaft seemed to turn opposite ways. They now run in a labeled slow motion (about 700× slower once the core is open), and every vane is pitched the right way for its shaft, checked against the engine's type certificate and the basic rule that compressor vanes take out the swirl their rotor adds.",[295,367,368],{},"The tour now works the same controls you do, so you can watch the Nacelle, Airflow and Explode settings change as it plays. It circles the closed engine, opens it from underneath, cuts it away, runs the airflow, pulls it apart and puts it back together, then ends close up on the air going through the core. The camera moves are smoother too.",[234,370,371],{},"It's about 9,200 lines now, still with Three.js as the one runtime dependency.",[234,373,374,375,380],{},"None of this surprised me as much as it would have a year ago. I've been doing a lot of Three.js lately, and Claude is very good at it. The big one is ",[238,376,379],{"href":377,"rel":378},"https:\u002F\u002Flearn.third-option.ai",[242],"Farwonder",", a Jackbox-style game and learning app I'm building for my kids: early reading and math as short 3D games.",[382,383,385],"h2",{"id":384},"were-not-asking-enough","We're not asking enough",[234,387,388],{},"Opus 5.5 is that good, and it's cheap enough that I never thought twice about another run. So I just kept going. Add the aircraft. Make it true scale. Add a cycle model. Add a borescope. Swap in other engines. Run it, run it, run it.",[234,390,391],{},"Most of us still prompt these models small. Fix this function. Write this test. Summarize this doc. Then we judge the model by what comes back from that small ask.",[234,393,394],{},"I almost stopped at \"recreate it locally.\" That would have been a fine result, and it would have taught me nothing about what Opus 5.5 can do.",[234,396,397],{},"Ask for more. Then ask again.",[399,400],"hr",{},[234,402,403],{},[404,405,406],"em",{},"Personal side project built only from public information. It isn't affiliated with or endorsed by GE Aerospace, CFM International, Safran, Rolls-Royce, Boeing or Airbus. All numbers are approximate and illustrative.",{"title":408,"searchDepth":409,"depth":409,"links":410},"",2,[411],{"id":384,"depth":409,"text":385},"2026-10-04","I asked Claude to recreate a jet engine demo from a video clip. A day later, all from my phone, I had a true-scale GEnx-1B with a cycle model, a borescope and a digital twin. Opus 5.5 is good enough and cheap enough to just keep running.","md",{"src":416,"alt":417},"\u002Fimages\u002Fblog\u002F20261004-turbofan-explorer.png","A 3D cutaway of a GEnx-1B turbofan under the wing of a Boeing 787 at sunset, with labeled fan, booster, HP compressor, combustor and turbines",{},true,"---\ntitle: \"We're Not Asking Enough of These Models\"\ndescription: 'I asked Claude to recreate a jet engine demo from a video clip. A day later, all from my phone, I had a true-scale GEnx-1B with a cycle model, a borescope and a digital twin. Opus 5.5 is good enough and cheap enough to just keep running.'\ndate: '2026-10-04'\nimage:\n  src: \u002Fimages\u002Fblog\u002F20261004-turbofan-explorer.png\n  alt: 'A 3D cutaway of a GEnx-1B turbofan under the wing of a Boeing 787 at sunset, with labeled fan, booster, HP compressor, combustor and turbines'\nauthors:\n  - name: Chris Towles\n    to: https:\u002F\u002Ftwitter.com\u002FChris_Towles\n    avatar:\n      src: \u002Fimages\u002Fctowles-profile-512x512.png\nbadge:\n  label: 'AI'\n---\n\nYesterday [@claudeai shared a clip](https:\u002F\u002Fx.com\u002Fclaudeai\u002Fstatus\u002F2106125478956507480) by [Techartist](https:\u002F\u002Fx.com\u002Ftechartist_\u002Fstatus\u002F2106064200535859685): a jet engine in interactive 3D, intake to exhaust, built with Opus 5.5 and Three.js. My prompt was one line: figure out where this came from, pull down the code, and recreate it locally.\n\nThere was no code to pull down. The source isn't published. So Claude rebuilt it from the video.\n\nThat should have been the end. Instead I kept asking for more, and it kept delivering.\n\nIt's live right here. Drag to orbit, click any part, or let the tour play:\n\n\u003Ciframe src=\"\u002Fdemos\u002Fturbofan-explorer\u002Findex.html\" title=\"Turbofan Explorer: interactive 3D GEnx-1B turbofan on a Boeing 787-8\" loading=\"lazy\" allow=\"fullscreen\" style=\"width: 100%; aspect-ratio: 16 \u002F 10; min-height: 480px; border: 1px solid #444; border-radius: 8px;\">\u003C\u002Fiframe>\n\n:::callout{icon=\"i-lucide-play\"}\n**[Open it full screen →](\u002Fdemos\u002Fturbofan-explorer\u002Findex.html){target=\"\\_blank\"}** Works on a phone, roomiest on a desktop. The [Claude-hosted version](https:\u002F\u002Fclaude.ai\u002Fartifact\u002FNU5nSRri2NGoo2pXyXqm6w){target=\"\\_blank\"} adds \"Ask Claude about this part.\"\n:::\n\nHere's what it does, about a day later:\n\n- A true-scale GEnx-1B on a true-scale 787-8 at cruise, with a cutaway, an exploded view, and click-any-part exploring. Every fact links to a public source.\n- A two-spool cycle model calibrated to GE's published datasheet. It lands at 70.0 klbf of takeoff thrust; GE's number is 69,800 lbf.\n- Colors, finishes and shapes checked side by side against about 150 photos of the real engine and airframe.\n- Thermal and pressure views, plus flight phases from takeoff to landing with EICAS-style gauges.\n- Compressor surge, bird strike, fan blade-off and icing scenarios.\n- A borescope you turn by hand, a teardown sequence, and a digital twin panel that reads trend CSVs.\n- Engine swaps: Trent 1000, GE9X, GE90, LEAP-1A, and the CFM RISE open fan.\n- Synthesized engine sound, with a nozzle chevron A\u002FB toggle.\n- An \"Ask Claude about this part\" box in the Claude-hosted version, using the artifact's built-in access to Claude.\n\nThat's about 4,700 lines of strict TypeScript with one dependency (Three.js). I did all of it from my phone, in the Claude mobile app, with Claude Code running on Anthropic's infrastructure. I never opened a laptop.\n\n:::callout{icon=\"i-lucide-refresh-cw\"}\n**Updated October 6.** I kept going, and the embed above is the latest build. Since this post went up:\n\n- The GEnx-1B is now part by part: a gas path with every blade row, a real LP shaft and bearing sumps, and an accessory gearbox.\n- The nacelle opens the way a mechanic opens it, fan cowls then C-ducts, before the cutaway.\n- The exploded view lowers the engine onto a stand, clear of the runway when parked.\n- A cut-depth setting: nacelle only, through the cases, or through everything.\n- Each engine now has its own spinner, fan blades and exhaust plug, checked against photos: the Trent's spiral, the GE9X and LEAP comma markings, the RISE's white-edged scimitar blades.\n- A phone layout with a bottom sheet and readable data tables.\n- All six engines now come apart the way a mechanic takes them apart, with their own nacelles, hubs and pylons, and a development check that catches parts clipping through each other on every build. That check found about 4,900 clashes; under 100 are left.\n- The 787 stands on its landing gear on the runway, with the wing in its parked shape.\n- A speed slider that runs from a full stop up to 10×, so you can freeze the engine mid-turn and orbit it.\n- The spinning is fixed. The blades had been turning about ten times too fast for the screen, so they strobed: the fan looked like it ran backwards and rows on the same shaft seemed to turn opposite ways. They now run in a labeled slow motion (about 700× slower once the core is open), and every vane is pitched the right way for its shaft, checked against the engine's type certificate and the basic rule that compressor vanes take out the swirl their rotor adds.\n- The tour now works the same controls you do, so you can watch the Nacelle, Airflow and Explode settings change as it plays. It circles the closed engine, opens it from underneath, cuts it away, runs the airflow, pulls it apart and puts it back together, then ends close up on the air going through the core. The camera moves are smoother too.\n\nIt's about 9,200 lines now, still with Three.js as the one runtime dependency.\n:::\n\nNone of this surprised me as much as it would have a year ago. I've been doing a lot of Three.js lately, and Claude is very good at it. The big one is [Farwonder](https:\u002F\u002Flearn.third-option.ai), a Jackbox-style game and learning app I'm building for my kids: early reading and math as short 3D games.\n\n## We're not asking enough\n\nOpus 5.5 is that good, and it's cheap enough that I never thought twice about another run. So I just kept going. Add the aircraft. Make it true scale. Add a cycle model. Add a borescope. Swap in other engines. Run it, run it, run it.\n\nMost of us still prompt these models small. Fix this function. Write this test. Summarize this doc. Then we judge the model by what comes back from that small ask.\n\nI almost stopped at \"recreate it locally.\" That would have been a fine result, and it would have taught me nothing about what Opus 5.5 can do.\n\nAsk for more. Then ask again.\n\n---\n\n_Personal side project built only from public information. It isn't affiliated with or endorsed by GE Aerospace, CFM International, Safran, Rolls-Royce, Boeing or Airbus. All numbers are approximate and illustrative._\n",{"title":217,"description":413},"published","CFi1KQ7zXL0RV9Fww-HSwTxn4QsTvAzS1mnWt4urQcU",[425,427],{"title":213,"path":214,"stem":215,"description":426,"status":422,"children":-1},"I couldn't give up Ghostty's terminal, so I embedded its unreleased terminal core in my Rust + Tauri app instead.",null,1791678376526]