1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <link rel="icon" type="image/webp" href="/wodeapp.webp" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <title>WodeApp - AI App Builder | Say It Once, Own Your AI App</title> 8 <meta name="description" content="WodeApp â AI-powered no-code app builder. Describe your idea in one sentence and AI creates your app instantly. Build AI skills, workflows & agents. MCP Server + REST API. OpenClaw & SpanClaw ready. The vibe coding platform for everyone." /> 9 <meta name="keywords" content="AI app builder,no-code,AI skills,MCP Server,AI agent,AI workflow,vibe coding,OpenClaw,SpanClaw,custom GPT alternative,REST API,image generation,video generation,WodeApp,AI automation,prompt to app,AI tools,low-code,cursor alternative,AI SaaS builder,WodeApp" /> 10 <link rel="canonical" href="https://wodeapp.ai/" /> 11 <!-- Open Graph --> 12 <meta property="og:type" content="website" /> 13 <meta property="og:site_name" content="WodeApp" /> 14 <meta property="og:title" content="WodeApp - Say It Once, Own Your AI App Instantly" /> 15 <meta property="og:description" content="Build AI skills, workflows & agents with one sentence. MCP Server + REST API. OpenClaw & SpanClaw ready. Your domain, your app, zero code." /> 16 <meta property="og:image" content="https://wodeapp.ai/wodeapp.png" /> 17 <meta property="og:url" content="https://wodeapp.ai/" /> 18 <!-- Twitter Card --> 19 <meta name="twitter:card" content="summary_large_image" /> 20 <meta name="twitter:title" content="WodeApp - Say It Once, Own Your AI App Instantly" /> 21 <meta name="twitter:description" content="Build AI skills, workflows & agents with one sentence. MCP Server + OpenClaw ready. Vibe coding for everyone â zero code." /> 22 <meta name="twitter:image" content="https://wodeapp.ai/wodeapp.png" /> 23 <!-- Google Analytics (skip on .cn domain to avoid cross-border latency) --> 24
24<script> 25 if (location.hostname.indexOf('wodeapp.cn') === -1) { 26 var s = document.createElement('script'); 27 s.async = true; 28 s.src = 'https://www.googletagmanager.com/gtag/js?id=G-Q6YZPRRDVT'; 29 document.head.appendChild(s); 30
vendor: 151 bytes, lines 30-33
30window.dataLayer = window.dataLayer || []; 31 function gtag(){dataLayer.push(arguments);} 32 gtag('js', new Date()); 33 gtag('config', '
33G-Q6YZPRRDVT
vendor: 10 bytes, lines 33-34
33'); 34
34} 35 // Dynamic branding: swap title/meta for wodeapp.cn 36 if (location.pathname === '/chat' || location.pathname === '/') { 37 var prefetch = document.createElement('link'); 38 prefetch.rel = 'prefetch'; 39 prefetch.href = '/wodeappx/app/'; 40 prefetch.as = 'document'; 41 document.head.appendChild(prefetch); 42 } 43 if (location.hostname.indexOf('wodeapp.cn') !== -1) { 44 document.title = 'å¤é¸£äºä¸ WodeApp - AI æè½å¹³å°'; 45 var d = document.querySelector('meta[name="description"]'); 46 if (d) d.content = 'WodeApp â AI 驱å¨çæè½æå»ºå¹³å°ãä¸å¥è¯å建 AI Skillsã工使µåæºè½ä½ã'; 47 var og = document.querySelector('meta[property="og:site_name"]'); 48 if (og) og.content = 'WodeApp'; 49 } 50 </script>
50 51
51<script type="module" crossorigin src="/assets/index-Bj3wZDOH.js"></script>
51 52 <link rel="modulepreload" crossorigin href="/assets/react-vendor-BxoUhqX6.js"> 53 <link rel="modulepreload" crossorigin href="/assets/clsx-B-dksMZM.js"> 54 <link rel="modulepreload" crossorigin href="/assets/i18n-vendor-Coo-X0AG.js"> 55 <link rel="stylesheet" crossorigin href="/assets/index-B2i5XhOD.css"> 56 </head> 57 <body> 58 <div id="root"> 59 <!-- å è骨æ¶å±ï¼React æè½½åç«å³å¯è§ï¼æè½½å被 React æ¿æ¢ --> 60 <div id="skeleton" class="wode-init-loader" role="status" aria-live="polite" aria-busy="true"> 61 <div class="wode-init-loader__layout"> 62 <div class="wode-init-loader__sidebar" aria-hidden="true"> 63 <div class="wode-init-loader__line wode-init-loader__line--short"></div> 64 <div class="wode-init-loader__panel"></div> 65 <div class="wode-init-loader__line"></div> 66 <div class="wode-init-loader__line wode-init-loader__line--wide"></div> 67 </div> 68 <div class="wode-init-loader__main"> 69 <div class="wode-init-loader__grid" aria-hidden="true"></div> 70 <div class="wode-init-loader__center"> 71 <div class="wode-init-loader__spinner" aria-hidden="true"> 72 <span class="wode-init-loader__ring wode-init-loader__ring--outer"></span> 73 <span class="wode-init-loader__ring wode-init-loader__ring--inner"></span> 74 </div> 75 <div class="wode-init-loader__copy"> 76 <p>æºè½ä½å è½½ä¸</p> 77 <span>馿¬¡æå¼ä¼ç¨æ ¢ï¼è¯·ç¨å</span> 78 </div> 79 </div> 80 </div> 81 </div> 82 </div> 83 <style> 84 html,body,#root{margin:0;min-height:100%} 85 .wode-init-loader{min-height:100vh;width:100%;display:flex;align-items:center;justify-content:center;padding:24px;background:#fafafa;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;box-sizing:border-box} 86 .wode-init-loader *{box-sizing:border-box} 87 .wode-init-loader__layout{width:min(960px,100%);display:flex;align-items:stretch;gap:16px;opacity:.94} 88 .wode-init-loader__sidebar{width:280px;min-height:220px;flex:0 0 280px;padding:16px;border:1px solid rgba(99,102,241,.16);border-radius:8px;background:#fff;box-shadow:0 12px 36px rgba(15,23,42,.06);animation:wode-init-pulse 1.6s ease-in-out infinite} 89 .wode-init-loader__line,.wode-init-loader__panel{border-radius:8px;background:#eef2f7} 90 .wode-init-loader__line{height:32px;width:100%;margin-top:12px} 91 .wode-init-loader__line--short{width:96px;height:12px;margin-top:0;background:rgba(99,102,241,.14)} 92 .wode-init-loader__line--wide{width:82%} 93 .wode-init-loader__panel{height:82px;margin-top:16px;background:linear-gradient(135deg,rgba(99,102,241,.12),rgba(129,140,248,.08))} 94 .wode-init-loader__main{position:relative;min-height:220px;flex:1 1 auto;min-width:0;overflow:hidden;border:1px dashed rgba(99,102,241,.28);border-radius:8px;background:#f8fafc;animation:wode-init-fade .45s ease-out} 95 .wode-init-loader__grid{position:absolute;inset:0;opacity:.68;background-image:radial-gradient(#dbe2ea 1px,transparent 1px);background-size:16px 16px} 96 .wode-init-loader__center{position:relative;z-index:1;min-height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px} 97 .wode-init-loader__spinner{position:relative;width:52px;height:52px} 98 .wode-init-loader__ring{position:absolute;inset:0;border:2px solid transparent;border-radius:999px} 99 .wode-init-loader__ring--outer{border-top-color:#6366f1;border-right-color:rgba(99,102,241,.35);animation:wode-init-spin .9s cubic-bezier(.45,.05,.55,.95) infinite} 100 .wode-init-loader__ring--inner{inset:9px;border-bottom-color:#818cf8;border-left-color:rgba(129,140,248,.25);animation:wode-init-spin-reverse 1.2s cubic-bezier(.45,.05,.55,.95) infinite} 101 .wode-init-loader__copy{text-align:center} 102 .wode-init-loader__copy p{margin:0;color:#111827;font-size:.9rem;font-weight:700}
103 .wode-init-loader__copy span{display:block;margin-top:4px;color:#8a94a6;font-size:.78rem} 104 @keyframes wode-init-pulse{0%,100%{opacity:.92}50%{opacity:.66}} 105 @keyframes wode-init-fade{from{opacity:0}to{opacity:1}} 106 @keyframes wode-init-spin{to{transform:rotate(360deg)}} 107 @keyframes wode-init-spin-reverse{to{transform:rotate(-360deg)}} 108 @media (max-width:640px){.wode-init-loader{padding:16px}.wode-init-loader__layout{width:100%}.wode-init-loader__sidebar{display:none}.wode-init-loader__main,.wode-init-loader__center{min-height:260px}} 109 </style> 110 </div> 111 </body> 112</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.