[{"data":1,"prerenderedAt":338},["ShallowReactive",2],{"content-developer\u002Fscopes":3,"surround-\u002Fdeveloper\u002Fscopes":329},{"id":4,"title":5,"body":6,"description":321,"extension":322,"meta":323,"navigation":324,"path":325,"seo":326,"stem":327,"__hash__":328},"content\u002F3.developer\u002F3.scopes.md","Scopes",{"type":7,"value":8,"toc":313},"minimark",[9,13,18,20,24,126,130,233,237],[10,11,12],"p",{},"Each part of the monorepo has a clear scope. Apps are deployable services, packages are shared libraries consumed by one or more apps.",[14,15,17],"h2",{"id":16},"scope-map","Scope Map",[16,19],{},[14,21,23],{"id":22},"apps","Apps",[25,26,27,43],"table",{},[28,29,30],"thead",{},[31,32,33,37,40],"tr",{},[34,35,36],"th",{},"App",[34,38,39],{},"Stack",[34,41,42],{},"Scope",[44,45,46,61,74,87,100,113],"tbody",{},[31,47,48,55,58],{},[49,50,51],"td",{},[52,53,54],"code",{},"apps\u002Fweb",[49,56,57],{},"Nuxt 4 + Vue 3",[49,59,60],{},"Main user dashboard — email builder, campaigns, audience management, automations, settings",[31,62,63,68,71],{},[49,64,65],{},[52,66,67],{},"apps\u002Fapi",[49,69,70],{},"Convex",[49,72,73],{},"Serverless backend — database, authentication (BetterAuth), real-time subscriptions, REST API, cron jobs",[31,75,76,81,84],{},[49,77,78],{},[52,79,80],{},"apps\u002Fmta",[49,82,83],{},"Hono + GroupMQ",[49,85,86],{},"Custom Mail Transfer Agent — direct SMTP delivery, DKIM signing, IP warming, bounce processing, rate limiting",[31,88,89,94,97],{},[49,90,91],{},[52,92,93],{},"apps\u002Fdocs",[49,95,96],{},"Nuxt + Content",[49,98,99],{},"Developer documentation — guides, API reference, architecture decisions",[31,101,102,107,110],{},[49,103,104],{},[52,105,106],{},"apps\u002Fmarketing",[49,108,109],{},"Nuxt",[49,111,112],{},"Public marketing site — landing pages, pricing, changelog",[31,114,115,120,123],{},[49,116,117],{},[52,118,119],{},"apps\u002Fadmin",[49,121,122],{},"Nuxt 3",[49,124,125],{},"Internal admin panel — user\u002Forg management, abuse monitoring, billing oversight",[14,127,129],{"id":128},"packages","Packages",[25,131,132,143],{},[28,133,134],{},[31,135,136,139,141],{},[34,137,138],{},"Package",[34,140,39],{},[34,142,42],{},[44,144,145,158,170,183,195,208,220],{},[31,146,147,152,155],{},[49,148,149],{},[52,150,151],{},"packages\u002Fshared",[49,153,154],{},"TypeScript",[49,156,157],{},"Shared types and data — block definitions, editor types, email client compatibility matrix",[31,159,160,165,167],{},[49,161,162],{},[52,163,164],{},"packages\u002Femail-renderer",[49,166,154],{},[49,168,169],{},"Headless email HTML engine — table-based layouts, VML for Outlook, CSS inlining, dark mode, AMP format",[31,171,172,177,180],{},[49,173,174],{},[52,175,176],{},"packages\u002Femail-builder",[49,178,179],{},"Vue 3",[49,181,182],{},"Notion-like email editor — document canvas, block previews, settings popover, slash commands",[31,184,185,190,192],{},[49,186,187],{},[52,188,189],{},"packages\u002Femail-previewer",[49,191,179],{},[49,193,194],{},"Preview and analysis — cross-client rendering simulation, compatibility scoring, email diffs",[31,196,197,202,205],{},[49,198,199],{},[52,200,201],{},"packages\u002Fui",[49,203,204],{},"Nuxt Layer",[49,206,207],{},"Shared UI primitives — toast notifications, error boundaries, auto-imported composables",[31,209,210,215,217],{},[49,211,212],{},[52,213,214],{},"packages\u002Fsdk-js",[49,216,154],{},[49,218,219],{},"JavaScript SDK (npm) — contacts, transactional sends, events, topics",[31,221,222,227,230],{},[49,223,224],{},[52,225,226],{},"packages\u002Fsdk-java",[49,228,229],{},"Java",[49,231,232],{},"Java SDK (Maven) — same API surface as sdk-js for JVM consumers",[14,234,236],{"id":235},"who-imports-what","Who imports what",[238,239,240,262,273,282,293,302],"ul",{},[241,242,243,247,248,251,252,251,255,258,259],"li",{},[244,245,246],"strong",{},"web"," imports ",[52,249,250],{},"email-builder",", ",[52,253,254],{},"email-previewer",[52,256,257],{},"ui",", and ",[52,260,261],{},"shared",[241,263,264,247,267,270,271],{},[244,265,266],{},"api",[52,268,269],{},"email-renderer"," and ",[52,272,261],{},[241,274,275,247,278,270,280],{},[244,276,277],{},"admin",[52,279,257],{},[52,281,261],{},[241,283,284,270,287,290,291],{},[244,285,286],{},"docs",[244,288,289],{},"marketing"," import ",[52,292,257],{},[241,294,295,298,299,301],{},[244,296,297],{},"mta"," is standalone — it receives HTTP requests from ",[52,300,266],{}," and delivers mail directly",[241,303,304,270,307,310,311],{},[244,305,306],{},"sdk-js",[244,308,309],{},"sdk-java"," are standalone — they talk to the public REST API exposed by ",[52,312,266],{},{"title":314,"searchDepth":315,"depth":315,"links":316},"",2,[317,318,319,320],{"id":16,"depth":315,"text":17},{"id":22,"depth":315,"text":23},{"id":128,"depth":315,"text":129},{"id":235,"depth":315,"text":236},"What each app and package in the Owlat monorepo is responsible for.","md",{},true,"\u002Fdeveloper\u002Fscopes",{"title":5,"description":321},"3.developer\u002F3.scopes","ICYl7puCRaCuG5aghyUz224Yry9ETFVuRsmkWWyXbl0",[330,334],{"title":331,"path":332,"stem":333,"children":-1},"Architecture Overview","\u002Fdeveloper\u002Farchitecture","3.developer\u002F2.architecture",{"title":335,"path":336,"stem":337,"children":-1},"Convex Backend","\u002Fdeveloper\u002Fconvex","3.developer\u002F4.convex",1774391040642]