[{"data":1,"prerenderedAt":779},["ShallowReactive",2],{"navigation:en":3,"\u002Fblog\u002Fvibe-coding-ia-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":758,"date":759,"description":760,"extension":761,"image":762,"lang":763,"meta":764,"navigation":765,"ogImage":766,"path":767,"readTime":768,"seo":769,"stem":770,"tags":771,"translations":774,"updated":133,"__hash__":778},"blog\u002Fblog\u002Fvibe-coding-ia-cursor-claude-code-saas.md","Vibe Coding com IA: Como Tipagem Estrita e Nuxt Layers Potencializam o Cursor e Claude Code","Equipe Nuxfire",null,{"type":135,"value":136,"toc":750},"minimark",[137,158,165,168,175,178,183,186,192,197,213,430,438,440,444,451,469,472,474,478,485,705,707,711,714,734,737,746],[138,139,140,141,145,146,149,150,153,154,157],"p",{},"O termo ",[142,143,144],"strong",{},"\"Vibe Coding\""," tornou-se a maior tendência de desenvolvimento de software em 2026. Desenvolvedores experientes e fundadores técnicos usam assistentes inteligentes como ",[142,147,148],{},"Cursor",", ",[142,151,152],{},"Claude Code"," e ",[142,155,156],{},"v0"," para escrever código em velocidades nunca antes imaginadas.",[138,159,160,161,164],{},"No entanto, quase todo mundo que tenta criar um SaaS complexo apenas com prompts esbarra no mesmo obstáculo: ",[142,162,163],{},"a entropia do código",".",[138,166,167],{},"Após algumas iterações, a IA começa a alucinar variáveis que não existem, recria funções já implementadas em outros arquivos, quebra telas inteiras e introduz vulnerabilidades silenciosas de banco de dados.",[138,169,170,171,174],{},"Por que isso acontece? E como a arquitetura do ",[142,172,173],{},"Nuxfire"," resolve esse problema?",[176,177],"hr",{},[179,180,182],"h2",{"id":181},"o-segredo-não-é-o-prompt-é-o-contexto-estrutural","O Segredo não é o Prompt, é o Contexto Estrutural",[138,184,185],{},"Grandes modelos de linguagem (LLMs) são tão bons quanto o contexto que recebem na janela de atenção. Se o seu projeto é um monólito confuso com centenas de arquivos interdependentes sem tipagem estrita, o modelo precisa \"adivinhar\" as relações entre as partes.",[138,187,188,189,191],{},"O ",[142,190,173],{}," foi projetado especificamente para ser a fundação ideal para ferramentas de IA, combinando três pilares arquiteturais:",[193,194,196],"h3",{"id":195},"_1-tipagem-estrita-de-ponta-a-ponta-com-typescript-trpc","1. Tipagem Estrita de Ponta a Ponta com TypeScript & tRPC",[138,198,199,200,204,205,208,209,212],{},"No Nuxfire, não existem objetos ",[201,202,203],"code",{},"any"," ou payloads não tipados. Cada rota de API define seu input e output com esquemas ",[142,206,207],{},"Zod"," através do ",[142,210,211],{},"tRPC",":",[214,215,220],"pre",{"className":216,"code":217,"language":218,"meta":219,"style":219},"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 O Cursor sabe exatamente quais propriedades existem em 'input' e 'ctx'\n      return createStripeSession(input.teamId, input.priceId);\n    })\n});\n","typescript","",[201,221,222,255,267,288,310,327,336,372,379,412,420],{"__ignoreMap":219},[223,224,227,231,235,239,243,247,251],"span",{"class":225,"line":226},"line",1,[223,228,230],{"class":229},"sRxSC","export",[223,232,234],{"class":233},"srJo8"," const",[223,236,238],{"class":237},"s91G_"," billingRouter",[223,240,242],{"class":241},"sGXK2"," =",[223,244,246],{"class":245},"sD0ED"," router",[223,248,250],{"class":249},"ss--_","(",[223,252,254],{"class":253},"swvn1","{\n",[223,256,258,262,264],{"class":225,"line":257},2,[223,259,261],{"class":260},"squCx","  createCheckoutSession",[223,263,212],{"class":253},[223,265,266],{"class":249}," protectedProcedure\n",[223,268,270,273,276,279,281,284,286],{"class":225,"line":269},3,[223,271,272],{"class":253},"    .",[223,274,275],{"class":245},"input",[223,277,278],{"class":249},"(z",[223,280,164],{"class":253},[223,282,283],{"class":245},"object",[223,285,250],{"class":249},[223,287,254],{"class":253},[223,289,291,294,296,299,301,304,307],{"class":225,"line":290},4,[223,292,293],{"class":260},"      priceId",[223,295,212],{"class":253},[223,297,298],{"class":249}," z",[223,300,164],{"class":253},[223,302,303],{"class":245},"string",[223,305,306],{"class":249},"()",[223,308,309],{"class":253},",\n",[223,311,313,316,318,320,322,324],{"class":225,"line":312},5,[223,314,315],{"class":260},"      teamId",[223,317,212],{"class":253},[223,319,298],{"class":249},[223,321,164],{"class":253},[223,323,303],{"class":245},[223,325,326],{"class":249},"()\n",[223,328,330,333],{"class":225,"line":329},6,[223,331,332],{"class":253},"    }",[223,334,335],{"class":249},"))\n",[223,337,339,341,344,346,350,353,357,360,363,366,369],{"class":225,"line":338},7,[223,340,272],{"class":253},[223,342,343],{"class":245},"mutation",[223,345,250],{"class":249},[223,347,349],{"class":348},"sTNss","async",[223,351,352],{"class":253}," ({",[223,354,356],{"class":355},"sQgqH"," input",[223,358,359],{"class":253},",",[223,361,362],{"class":355}," ctx",[223,364,365],{"class":253}," })",[223,367,368],{"class":233}," =>",[223,370,371],{"class":253}," {\n",[223,373,375],{"class":225,"line":374},8,[223,376,378],{"class":377},"ss7Ak","      \u002F\u002F O Cursor sabe exatamente quais propriedades existem em 'input' e 'ctx'\n",[223,380,382,385,388,390,392,394,397,399,401,403,406,409],{"class":225,"line":381},9,[223,383,384],{"class":229},"      return",[223,386,387],{"class":245}," createStripeSession",[223,389,250],{"class":260},[223,391,275],{"class":249},[223,393,164],{"class":253},[223,395,396],{"class":249},"teamId",[223,398,359],{"class":253},[223,400,356],{"class":249},[223,402,164],{"class":253},[223,404,405],{"class":249},"priceId",[223,407,408],{"class":260},")",[223,410,411],{"class":253},";\n",[223,413,415,417],{"class":225,"line":414},10,[223,416,332],{"class":253},[223,418,419],{"class":249},")\n",[223,421,423,426,428],{"class":225,"line":422},11,[223,424,425],{"class":253},"}",[223,427,408],{"class":249},[223,429,411],{"class":253},[138,431,432,433,437],{},"Quando você pede para o Cursor ou Claude Code: ",[434,435,436],"em",{},"\"Crie um botão no painel que chama a procedure de checkout\"",", o modelo lê as definições de tipo do tRPC e autocompleta os parâmetros corretos na primeira tentativa, sem inventar propriedades falsas.",[176,439],{},[193,441,443],{"id":442},"_2-nuxt-layers-limites-claros-de-domínio","2. Nuxt Layers: Limites Claros de Domínio",[138,445,446,447,450],{},"Com as ",[142,448,449],{},"Nuxt Layers",", cada área funcional do produto fica confinada ao seu diretório correspondente:",[452,453,454,462],"ul",{},[455,456,457,458,461],"li",{},"Alterar o fluxo de membros da equipe? Apenas arquivos em ",[201,459,460],{},"layers\u002Fteams\u002F"," são carregados.",[455,463,464,465,468],{},"Modificar estilos do tema? O arquivo ",[201,466,467],{},"packages\u002Ftokens"," centraliza tudo.",[138,470,471],{},"Essa compartimentação reduz o tamanho do contexto necessário e impede que a IA altere arquivos não relacionados por engano.",[176,473],{},[193,475,477],{"id":476},"_3-schemas-estruturados-com-drizzle-orm","3. Schemas Estruturados com Drizzle ORM",[138,479,480,481,484],{},"Mapear relacionamentos de banco com ORMs legados costuma gerar alucinações em migrações SQL. O ",[142,482,483],{},"Drizzle ORM"," utiliza puro TypeScript declarativo, facilitando para a IA entender foreign keys, índices e restrições de integridade com total precisão:",[214,486,488],{"className":216,"code":487,"language":218,"meta":219,"style":219},"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",[201,489,490,520,550,598,670,697],{"__ignoreMap":219},[223,491,492,494,496,499,501,504,506,510,514,516,518],{"class":225,"line":226},[223,493,230],{"class":229},[223,495,234],{"class":233},[223,497,498],{"class":237}," subscriptions",[223,500,242],{"class":241},[223,502,503],{"class":245}," pgTable",[223,505,250],{"class":249},[223,507,509],{"class":508},"siCPE","\"",[223,511,513],{"class":512},"sLACW","subscriptions",[223,515,509],{"class":508},[223,517,359],{"class":253},[223,519,371],{"class":253},[223,521,522,525,527,530,532,534,537,539,541,543,546,548],{"class":225,"line":257},[223,523,524],{"class":260},"  id",[223,526,212],{"class":253},[223,528,529],{"class":245}," text",[223,531,250],{"class":249},[223,533,509],{"class":508},[223,535,536],{"class":512},"id",[223,538,509],{"class":508},[223,540,408],{"class":249},[223,542,164],{"class":253},[223,544,545],{"class":245},"primaryKey",[223,547,306],{"class":249},[223,549,309],{"class":253},[223,551,552,555,557,559,561,563,566,568,570,572,575,577,579,582,584,586,588,591,593,596],{"class":225,"line":269},[223,553,554],{"class":260},"  teamId",[223,556,212],{"class":253},[223,558,529],{"class":245},[223,560,250],{"class":249},[223,562,509],{"class":508},[223,564,565],{"class":512},"team_id",[223,567,509],{"class":508},[223,569,408],{"class":249},[223,571,164],{"class":253},[223,573,574],{"class":245},"notNull",[223,576,306],{"class":249},[223,578,164],{"class":253},[223,580,581],{"class":245},"references",[223,583,250],{"class":249},[223,585,306],{"class":253},[223,587,368],{"class":233},[223,589,590],{"class":249}," teams",[223,592,164],{"class":253},[223,594,595],{"class":249},"id)",[223,597,309],{"class":253},[223,599,600,603,605,607,609,611,614,616,618,621,624,626,629,631,634,636,638,641,644,646,648,650,653,655,658,660,662,664,666,668],{"class":225,"line":290},[223,601,602],{"class":260},"  status",[223,604,212],{"class":253},[223,606,529],{"class":245},[223,608,250],{"class":249},[223,610,509],{"class":508},[223,612,613],{"class":512},"status",[223,615,509],{"class":508},[223,617,359],{"class":253},[223,619,620],{"class":253}," {",[223,622,623],{"class":260}," enum",[223,625,212],{"class":253},[223,627,628],{"class":249}," [",[223,630,509],{"class":508},[223,632,633],{"class":512},"ACTIVE",[223,635,509],{"class":508},[223,637,359],{"class":253},[223,639,640],{"class":508}," \"",[223,642,643],{"class":512},"PAST_DUE",[223,645,509],{"class":508},[223,647,359],{"class":253},[223,649,640],{"class":508},[223,651,652],{"class":512},"CANCELED",[223,654,509],{"class":508},[223,656,657],{"class":249},"] ",[223,659,425],{"class":253},[223,661,408],{"class":249},[223,663,164],{"class":253},[223,665,574],{"class":245},[223,667,306],{"class":249},[223,669,309],{"class":253},[223,671,672,675,677,680,682,684,687,689,691,693,695],{"class":225,"line":312},[223,673,674],{"class":260},"  currentPeriodEnd",[223,676,212],{"class":253},[223,678,679],{"class":245}," timestamp",[223,681,250],{"class":249},[223,683,509],{"class":508},[223,685,686],{"class":512},"current_period_end",[223,688,509],{"class":508},[223,690,408],{"class":249},[223,692,164],{"class":253},[223,694,574],{"class":245},[223,696,326],{"class":249},[223,698,699,701,703],{"class":225,"line":329},[223,700,425],{"class":253},[223,702,408],{"class":249},[223,704,411],{"class":253},[176,706],{},[179,708,710],{"id":709},"da-ideia-ao-produto-em-dias-não-em-meses","Da Ideia ao Produto em Dias, não em Meses",[138,712,713],{},"Ao combinar a velocidade da IA gerativa com uma base arquitetural sólida de nível enterprise, você obtém o melhor dos dois mundos:",[452,715,716,722,728],{},[455,717,718,721],{},[142,719,720],{},"10x mais velocidade"," para criar novas funcionalidades.",[455,723,724,727],{},[142,725,726],{},"0 regressões"," graças aos contratos estritos de tipos.",[455,729,730,733],{},[142,731,732],{},"Código limpo que você possui para sempre",", pronto para receber milhares de clientes pagantes.",[138,735,736],{},"Chega de lutar contra alucinações da IA. Comece seu projeto sobre uma base profissional e testada.",[138,738,739],{},[740,741,743],"a",{"href":742},"\u002Fpt-br#pricing",[142,744,745],{},"Garanta seu acesso imediato ao código-fonte do Nuxfire e entre no Grupo VIP →",[747,748,749],"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":219,"searchDepth":257,"depth":257,"links":751},[752,757],{"id":181,"depth":257,"text":182,"children":753},[754,755,756],{"id":195,"depth":269,"text":196},{"id":442,"depth":269,"text":443},{"id":476,"depth":269,"text":477},{"id":709,"depth":257,"text":710},"Desenvolvimento com IA","2026-09-15","Por que o segredo de construir produtos com IA não é o prompt, mas a arquitetura. Veja como contratos TypeScript e schemas tRPC eliminam alucinações de LLMs.","md","\u002Fimages\u002Fblog\u002Fvibe-coding-ai-cursor-claude.svg","pt-br",{},true,"\u002Fimages\u002Fblog\u002Fvibe-coding-ai-cursor-claude.png","\u002Fblog\u002Fvibe-coding-ia-cursor-claude-code-saas","8 min",{"title":131,"description":760},"blog\u002Fvibe-coding-ia-cursor-claude-code-saas",[148,152,156,772,773],"Vibe Coding","TypeScript",{"en":775,"pt-br":776,"es":777},"vibe-coding-ai-cursor-claude-code-saas","vibe-coding-ia-cursor-claude-code-saas","vibe-coding-con-ia-cursor-claude-code-saas","8s05SBDS2JHtFx3RcBYNLVEP8s3npDQ1_gdW0WvkvNU",1794055340442]