[{"data":1,"prerenderedAt":778},["ShallowReactive",2],{"navigation:en":3,"\u002Fblog\u002Fvibe-coding-ai-cursor-claude-code-saas":129},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11],{"title":5,"path":6,"stem":7,"icon":10},"i-ph-squares-four-duotone",{"title":12,"path":13,"stem":14,"children":15,"icon":18},"Flow Videos","\u002Fdocs\u002Fflow-videos","docs\u002Fflow-videos\u002F0.index",[16,19,36,67,93],{"title":17,"path":13,"stem":14,"icon":18},"Serelius Flow Video","i-ph-video-camera-duotone",{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":35},"Getting Started","i-ph-rocket-launch-duotone","\u002Fdocs\u002Fflow-videos\u002Fgetting-started","docs\u002Fflow-videos\u002F1.getting-started",[25,30],{"title":26,"path":27,"stem":28,"icon":29},"Overview","\u002Fdocs\u002Fflow-videos\u002Fgetting-started\u002Foverview","docs\u002Fflow-videos\u002F1.getting-started\u002F0.overview","i-ph-play-circle-duotone",{"title":31,"path":32,"stem":33,"icon":34},"Global Features","\u002Fdocs\u002Fflow-videos\u002Fgetting-started\u002Fglobal-features","docs\u002Fflow-videos\u002F1.getting-started\u002F1.global-features","i-ph-gear-six-duotone",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Pipeline","i-ph-film-strip-duotone","\u002Fdocs\u002Fflow-videos\u002Fpipeline","docs\u002Fflow-videos\u002F2.pipeline",[42,47,52,57,62],{"title":43,"path":44,"stem":45,"icon":46},"Phase 1 — Script","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fscript","docs\u002Fflow-videos\u002F2.pipeline\u002F1.script","i-ph-scroll-duotone",{"title":48,"path":49,"stem":50,"icon":51},"Phase 2 — Style & Identity","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fstyle-and-identity","docs\u002Fflow-videos\u002F2.pipeline\u002F2.style-and-identity","i-ph-palette-duotone",{"title":53,"path":54,"stem":55,"icon":56},"Phase 3 — Storyboard","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fstoryboard","docs\u002Fflow-videos\u002F2.pipeline\u002F3.storyboard","i-ph-image-duotone",{"title":58,"path":59,"stem":60,"icon":61},"Phase 4 — Videos","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Fvideos","docs\u002Fflow-videos\u002F2.pipeline\u002F4.videos","i-ph-video-duotone",{"title":63,"path":64,"stem":65,"icon":66},"Phase 5 — Final Assembly","\u002Fdocs\u002Fflow-videos\u002Fpipeline\u002Ffinal-assembly","docs\u002Fflow-videos\u002F2.pipeline\u002F5.final-assembly","i-ph-scissors-duotone",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":35},"Settings & Models","i-ph-sliders-duotone","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models","docs\u002Fflow-videos\u002F3.settings-and-models",[73,78,83,88],{"title":74,"path":75,"stem":76,"icon":77},"Settings","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fsettings","docs\u002Fflow-videos\u002F3.settings-and-models\u002F0.settings","i-ph-sliders-horizontal-duotone",{"title":79,"path":80,"stem":81,"icon":82},"AI Models & Limits","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fmodels-and-limits","docs\u002Fflow-videos\u002F3.settings-and-models\u002F1.models-and-limits","i-ph-cpu-duotone",{"title":84,"path":85,"stem":86,"icon":87},"Option Catalogs","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fcatalogs","docs\u002Fflow-videos\u002F3.settings-and-models\u002F2.catalogs","i-ph-list-bullets-duotone",{"title":89,"path":90,"stem":91,"icon":92},"Pipeline Calibration","\u002Fdocs\u002Fflow-videos\u002Fsettings-and-models\u002Fcalibration","docs\u002Fflow-videos\u002F3.settings-and-models\u002F3.calibration","i-ph-gauge-duotone",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":35},"Reference","i-ph-book-open-duotone","\u002Fdocs\u002Fflow-videos\u002Freference","docs\u002Fflow-videos\u002F4.reference",[99,104,109,114,119,124],{"title":100,"path":101,"stem":102,"icon":103},"Delivered Files","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fdelivered-files","docs\u002Fflow-videos\u002F4.reference\u002F0.delivered-files","i-ph-folder-duotone",{"title":105,"path":106,"stem":107,"icon":108},"Supported Video Types","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fvideo-types","docs\u002Fflow-videos\u002F4.reference\u002F1.video-types","i-ph-television-duotone",{"title":110,"path":111,"stem":112,"icon":113},"What the Tool Does NOT Do","\u002Fdocs\u002Fflow-videos\u002Freference\u002Flimitations","docs\u002Fflow-videos\u002F4.reference\u002F2.limitations","i-ph-prohibit-duotone",{"title":115,"path":116,"stem":117,"icon":118},"Business Models","\u002Fdocs\u002Fflow-videos\u002Freference\u002Fbusiness-models","docs\u002Fflow-videos\u002F4.reference\u002F3.business-models","i-ph-briefcase-duotone",{"title":120,"path":121,"stem":122,"icon":123},"FAQ & Glossary","\u002Fdocs\u002Fflow-videos\u002Freference\u002Ffaq-and-glossary","docs\u002Fflow-videos\u002F4.reference\u002F4.faq-and-glossary","i-ph-question-duotone",{"title":125,"path":126,"stem":127,"icon":128},"Technical and Architectural Audit","\u002Fdocs\u002Fflow-videos\u002Freference\u002Faudit","docs\u002Fflow-videos\u002F4.reference\u002F5.audit","i-ph-shield-check-duotone",{"id":130,"title":131,"author":132,"authorType":133,"body":134,"category":757,"date":758,"description":759,"extension":760,"image":761,"lang":762,"meta":763,"navigation":764,"ogImage":765,"path":766,"readTime":767,"seo":768,"stem":769,"tags":770,"translations":773,"updated":133,"__hash__":777},"blog\u002Fblog\u002Fvibe-coding-ai-cursor-claude-code-saas.md","Vibe Coding with AI: How Strict Typing and Nuxt Layers Supercharge Cursor and Claude Code","Nuxfire Team",null,{"type":135,"value":136,"toc":749},"minimark",[137,158,165,168,175,178,183,186,191,196,212,429,437,439,443,450,468,471,473,477,484,704,706,710,713,733,736,745],[138,139,140,141,145,146,149,150,153,154,157],"p",{},"The term ",[142,143,144],"strong",{},"\"Vibe Coding\""," has become the biggest trend in software development in 2026. Experienced developers and technical founders use intelligent assistants like ",[142,147,148],{},"Cursor",", ",[142,151,152],{},"Claude Code"," and ",[142,155,156],{},"v0"," to write code at speeds never imagined before.",[138,159,160,161,164],{},"However, almost everyone who tries to build a complex SaaS with prompts alone runs into the same obstacle: ",[142,162,163],{},"code entropy",".",[138,166,167],{},"After a few iterations, the AI starts to hallucinate variables that do not exist, recreates functions already implemented in other files, breaks entire screens and introduces silent database vulnerabilities.",[138,169,170,171,174],{},"Why does this happen? And how does the ",[142,172,173],{},"Nuxfire"," architecture solve this problem?",[176,177],"hr",{},[179,180,182],"h2",{"id":181},"the-secret-is-not-the-prompt-it-is-the-structural-context","The Secret Is Not the Prompt, It Is the Structural Context",[138,184,185],{},"Large language models (LLMs) are only as good as the context they receive in their attention window. If your project is a confusing monolith with hundreds of interdependent files and no strict typing, the model has to \"guess\" the relationships between the parts.",[138,187,188,190],{},[142,189,173],{}," was designed specifically to be the ideal foundation for AI tools, combining three architectural pillars:",[192,193,195],"h3",{"id":194},"_1-end-to-end-strict-typing-with-typescript-trpc","1. End-to-End Strict Typing with TypeScript & tRPC",[138,197,198,199,203,204,207,208,211],{},"In Nuxfire, there are no ",[200,201,202],"code",{},"any"," objects or untyped payloads. Every API route defines its input and output with ",[142,205,206],{},"Zod"," schemas through ",[142,209,210],{},"tRPC",":",[213,214,219],"pre",{"className":215,"code":216,"language":217,"meta":218,"style":218},"language-typescript shiki shiki-themes material-theme-lighter github-light github-dark monokai","export const billingRouter = router({\n  createCheckoutSession: protectedProcedure\n    .input(z.object({\n      priceId: z.string(),\n      teamId: z.string()\n    }))\n    .mutation(async ({ input, ctx }) => {\n      \u002F\u002F Cursor knows exactly which properties exist on 'input' and 'ctx'\n      return createStripeSession(input.teamId, input.priceId);\n    })\n});\n","typescript","",[200,220,221,254,266,287,309,326,335,371,378,411,419],{"__ignoreMap":218},[222,223,226,230,234,238,242,246,250],"span",{"class":224,"line":225},"line",1,[222,227,229],{"class":228},"sRxSC","export",[222,231,233],{"class":232},"srJo8"," const",[222,235,237],{"class":236},"s91G_"," billingRouter",[222,239,241],{"class":240},"sGXK2"," =",[222,243,245],{"class":244},"sD0ED"," router",[222,247,249],{"class":248},"ss--_","(",[222,251,253],{"class":252},"swvn1","{\n",[222,255,257,261,263],{"class":224,"line":256},2,[222,258,260],{"class":259},"squCx","  createCheckoutSession",[222,262,211],{"class":252},[222,264,265],{"class":248}," protectedProcedure\n",[222,267,269,272,275,278,280,283,285],{"class":224,"line":268},3,[222,270,271],{"class":252},"    .",[222,273,274],{"class":244},"input",[222,276,277],{"class":248},"(z",[222,279,164],{"class":252},[222,281,282],{"class":244},"object",[222,284,249],{"class":248},[222,286,253],{"class":252},[222,288,290,293,295,298,300,303,306],{"class":224,"line":289},4,[222,291,292],{"class":259},"      priceId",[222,294,211],{"class":252},[222,296,297],{"class":248}," z",[222,299,164],{"class":252},[222,301,302],{"class":244},"string",[222,304,305],{"class":248},"()",[222,307,308],{"class":252},",\n",[222,310,312,315,317,319,321,323],{"class":224,"line":311},5,[222,313,314],{"class":259},"      teamId",[222,316,211],{"class":252},[222,318,297],{"class":248},[222,320,164],{"class":252},[222,322,302],{"class":244},[222,324,325],{"class":248},"()\n",[222,327,329,332],{"class":224,"line":328},6,[222,330,331],{"class":252},"    }",[222,333,334],{"class":248},"))\n",[222,336,338,340,343,345,349,352,356,359,362,365,368],{"class":224,"line":337},7,[222,339,271],{"class":252},[222,341,342],{"class":244},"mutation",[222,344,249],{"class":248},[222,346,348],{"class":347},"sTNss","async",[222,350,351],{"class":252}," ({",[222,353,355],{"class":354},"sQgqH"," input",[222,357,358],{"class":252},",",[222,360,361],{"class":354}," ctx",[222,363,364],{"class":252}," })",[222,366,367],{"class":232}," =>",[222,369,370],{"class":252}," {\n",[222,372,374],{"class":224,"line":373},8,[222,375,377],{"class":376},"ss7Ak","      \u002F\u002F Cursor knows exactly which properties exist on 'input' and 'ctx'\n",[222,379,381,384,387,389,391,393,396,398,400,402,405,408],{"class":224,"line":380},9,[222,382,383],{"class":228},"      return",[222,385,386],{"class":244}," createStripeSession",[222,388,249],{"class":259},[222,390,274],{"class":248},[222,392,164],{"class":252},[222,394,395],{"class":248},"teamId",[222,397,358],{"class":252},[222,399,355],{"class":248},[222,401,164],{"class":252},[222,403,404],{"class":248},"priceId",[222,406,407],{"class":259},")",[222,409,410],{"class":252},";\n",[222,412,414,416],{"class":224,"line":413},10,[222,415,331],{"class":252},[222,417,418],{"class":248},")\n",[222,420,422,425,427],{"class":224,"line":421},11,[222,423,424],{"class":252},"}",[222,426,407],{"class":248},[222,428,410],{"class":252},[138,430,431,432,436],{},"When you ask Cursor or Claude Code: ",[433,434,435],"em",{},"\"Create a button in the dashboard that calls the checkout procedure\"",", the model reads the tRPC type definitions and autocompletes the correct parameters on the first attempt, without inventing false properties.",[176,438],{},[192,440,442],{"id":441},"_2-nuxt-layers-clear-domain-boundaries","2. Nuxt Layers: Clear Domain Boundaries",[138,444,445,446,449],{},"With ",[142,447,448],{},"Nuxt Layers",", each functional area of the product is confined to its own directory:",[451,452,453,461],"ul",{},[454,455,456,457,460],"li",{},"Changing the team member flow? Only files in ",[200,458,459],{},"layers\u002Fteams\u002F"," are loaded.",[454,462,463,464,467],{},"Modifying theme styles? The ",[200,465,466],{},"packages\u002Ftokens"," file centralizes everything.",[138,469,470],{},"This compartmentalization reduces the amount of context needed and stops the AI from changing unrelated files by mistake.",[176,472],{},[192,474,476],{"id":475},"_3-structured-schemas-with-drizzle-orm","3. Structured Schemas with Drizzle ORM",[138,478,479,480,483],{},"Mapping database relationships with legacy ORMs often produces hallucinations in SQL migrations. ",[142,481,482],{},"Drizzle ORM"," uses pure declarative TypeScript, making it easier for the AI to understand foreign keys, indexes and integrity constraints with total precision:",[213,485,487],{"className":215,"code":486,"language":217,"meta":218,"style":218},"export const subscriptions = pgTable(\"subscriptions\", {\n  id: text(\"id\").primaryKey(),\n  teamId: text(\"team_id\").notNull().references(() => teams.id),\n  status: text(\"status\", { enum: [\"ACTIVE\", \"PAST_DUE\", \"CANCELED\"] }).notNull(),\n  currentPeriodEnd: timestamp(\"current_period_end\").notNull()\n});\n",[200,488,489,519,549,597,669,696],{"__ignoreMap":218},[222,490,491,493,495,498,500,503,505,509,513,515,517],{"class":224,"line":225},[222,492,229],{"class":228},[222,494,233],{"class":232},[222,496,497],{"class":236}," subscriptions",[222,499,241],{"class":240},[222,501,502],{"class":244}," pgTable",[222,504,249],{"class":248},[222,506,508],{"class":507},"siCPE","\"",[222,510,512],{"class":511},"sLACW","subscriptions",[222,514,508],{"class":507},[222,516,358],{"class":252},[222,518,370],{"class":252},[222,520,521,524,526,529,531,533,536,538,540,542,545,547],{"class":224,"line":256},[222,522,523],{"class":259},"  id",[222,525,211],{"class":252},[222,527,528],{"class":244}," text",[222,530,249],{"class":248},[222,532,508],{"class":507},[222,534,535],{"class":511},"id",[222,537,508],{"class":507},[222,539,407],{"class":248},[222,541,164],{"class":252},[222,543,544],{"class":244},"primaryKey",[222,546,305],{"class":248},[222,548,308],{"class":252},[222,550,551,554,556,558,560,562,565,567,569,571,574,576,578,581,583,585,587,590,592,595],{"class":224,"line":268},[222,552,553],{"class":259},"  teamId",[222,555,211],{"class":252},[222,557,528],{"class":244},[222,559,249],{"class":248},[222,561,508],{"class":507},[222,563,564],{"class":511},"team_id",[222,566,508],{"class":507},[222,568,407],{"class":248},[222,570,164],{"class":252},[222,572,573],{"class":244},"notNull",[222,575,305],{"class":248},[222,577,164],{"class":252},[222,579,580],{"class":244},"references",[222,582,249],{"class":248},[222,584,305],{"class":252},[222,586,367],{"class":232},[222,588,589],{"class":248}," teams",[222,591,164],{"class":252},[222,593,594],{"class":248},"id)",[222,596,308],{"class":252},[222,598,599,602,604,606,608,610,613,615,617,620,623,625,628,630,633,635,637,640,643,645,647,649,652,654,657,659,661,663,665,667],{"class":224,"line":289},[222,600,601],{"class":259},"  status",[222,603,211],{"class":252},[222,605,528],{"class":244},[222,607,249],{"class":248},[222,609,508],{"class":507},[222,611,612],{"class":511},"status",[222,614,508],{"class":507},[222,616,358],{"class":252},[222,618,619],{"class":252}," {",[222,621,622],{"class":259}," enum",[222,624,211],{"class":252},[222,626,627],{"class":248}," [",[222,629,508],{"class":507},[222,631,632],{"class":511},"ACTIVE",[222,634,508],{"class":507},[222,636,358],{"class":252},[222,638,639],{"class":507}," \"",[222,641,642],{"class":511},"PAST_DUE",[222,644,508],{"class":507},[222,646,358],{"class":252},[222,648,639],{"class":507},[222,650,651],{"class":511},"CANCELED",[222,653,508],{"class":507},[222,655,656],{"class":248},"] ",[222,658,424],{"class":252},[222,660,407],{"class":248},[222,662,164],{"class":252},[222,664,573],{"class":244},[222,666,305],{"class":248},[222,668,308],{"class":252},[222,670,671,674,676,679,681,683,686,688,690,692,694],{"class":224,"line":311},[222,672,673],{"class":259},"  currentPeriodEnd",[222,675,211],{"class":252},[222,677,678],{"class":244}," timestamp",[222,680,249],{"class":248},[222,682,508],{"class":507},[222,684,685],{"class":511},"current_period_end",[222,687,508],{"class":507},[222,689,407],{"class":248},[222,691,164],{"class":252},[222,693,573],{"class":244},[222,695,325],{"class":248},[222,697,698,700,702],{"class":224,"line":328},[222,699,424],{"class":252},[222,701,407],{"class":248},[222,703,410],{"class":252},[176,705],{},[179,707,709],{"id":708},"from-idea-to-product-in-days-not-months","From Idea to Product in Days, Not Months",[138,711,712],{},"By combining the speed of generative AI with a solid, enterprise-grade architectural base, you get the best of both worlds:",[451,714,715,721,727],{},[454,716,717,720],{},[142,718,719],{},"10x more speed"," to create new features.",[454,722,723,726],{},[142,724,725],{},"0 regressions"," thanks to strict type contracts.",[454,728,729,732],{},[142,730,731],{},"Clean code you own forever",", ready to receive thousands of paying customers.",[138,734,735],{},"Stop fighting AI hallucinations. Start your project on a professional, tested foundation.",[138,737,738],{},[739,740,742],"a",{"href":741},"\u002F#pricing",[142,743,744],{},"Get your immediate access to the Nuxfire source code and join the VIP Group →",[746,747,748],"style",{},"html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sQgqH, html code.shiki .sQgqH{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}",{"title":218,"searchDepth":256,"depth":256,"links":750},[751,756],{"id":181,"depth":256,"text":182,"children":752},[753,754,755],{"id":194,"depth":268,"text":195},{"id":441,"depth":268,"text":442},{"id":475,"depth":268,"text":476},{"id":708,"depth":256,"text":709},"AI-Assisted Development","2026-09-15","Why the secret to building products with AI is not the prompt but the architecture. See how TypeScript contracts and tRPC schemas eliminate LLM hallucinations.","md","\u002Fimages\u002Fblog\u002Fvibe-coding-ai-cursor-claude-en.svg","en",{},true,"\u002Fimages\u002Fblog\u002Fvibe-coding-ai-cursor-claude-en.png","\u002Fblog\u002Fvibe-coding-ai-cursor-claude-code-saas","8 min",{"title":131,"description":759},"blog\u002Fvibe-coding-ai-cursor-claude-code-saas",[148,152,156,771,772],"Vibe Coding","TypeScript",{"en":774,"pt-br":775,"es":776},"vibe-coding-ai-cursor-claude-code-saas","vibe-coding-ia-cursor-claude-code-saas","vibe-coding-con-ia-cursor-claude-code-saas","81OSaqgFmrA1ZXpEBOL6V3_XuzITvJCVvHbkJSN6xTY",1794055340327]