Scopes

What each app and package in the Owlat monorepo is responsible for.

Each part of the monorepo has a clear scope. Apps are deployable services, packages are shared libraries consumed by one or more apps.

Scope Map

6 apps
webNuxt 4 + Vue 3
Main dashboard — email builder, campaigns, audience, automations, settingsapps/web
apiConvex
Serverless backend — database, auth, real-time subscriptions, cron jobsapps/api
mtaHono + GroupMQ
Mail Transfer Agent — direct SMTP delivery, IP warming, bounce processingapps/mta
docsNuxt + Content
Developer documentation — guides, API reference, architecture docsapps/docs
marketingNuxt
Public website — landing pages, pricing, changelogapps/marketing
adminNuxt 3
Internal admin panel — user management, abuse monitoring, billing oversightapps/admin
webapiReal-time queries & mutations
apimtaEmail delivery
adminapiAdmin operations
webemail-builderEditor UI
webemail-previewerPreview
webuiComponents
apiemail-rendererHTML generation
apisharedTypes
7 packages
sharedTypeScript
Shared types — block definitions, editor types, compatibility datapackages/shared
email-rendererTypeScript
Email HTML engine — table layouts, VML, CSS inlining, dark mode, AMPpackages/email-renderer
email-builderVue 3
Notion-like editor — drag-and-drop canvas, block settings, slash commandspackages/email-builder
email-previewerVue 3
Preview & analysis — cross-client rendering, compatibility scoring, diffspackages/email-previewer
uiNuxt Layer
Component library — toast notifications, error boundaries, shared composablespackages/ui
sdk-jsTypeScript · npm
JavaScript SDK — contacts, transactional sends, events, topicspackages/sdk-js
sdk-javaJava · Maven
Java SDK — same API surface, JVM-native clientpackages/sdk-java
All packages import from shared for block types, editor types, and compatibility data.

Apps

AppStackScope
apps/webNuxt 4 + Vue 3Main user dashboard — email builder, campaigns, audience management, automations, settings
apps/apiConvexServerless backend — database, authentication (BetterAuth), real-time subscriptions, REST API, cron jobs
apps/mtaHono + GroupMQCustom Mail Transfer Agent — direct SMTP delivery, DKIM signing, IP warming, bounce processing, rate limiting
apps/docsNuxt + ContentDeveloper documentation — guides, API reference, architecture decisions
apps/marketingNuxtPublic marketing site — landing pages, pricing, changelog
apps/adminNuxt 3Internal admin panel — user/org management, abuse monitoring, billing oversight

Packages

PackageStackScope
packages/sharedTypeScriptShared types and data — block definitions, editor types, email client compatibility matrix
packages/email-rendererTypeScriptHeadless email HTML engine — table-based layouts, VML for Outlook, CSS inlining, dark mode, AMP format
packages/email-builderVue 3Notion-like email editor — document canvas, block previews, settings popover, slash commands
packages/email-previewerVue 3Preview and analysis — cross-client rendering simulation, compatibility scoring, email diffs
packages/uiNuxt LayerShared UI primitives — toast notifications, error boundaries, auto-imported composables
packages/sdk-jsTypeScriptJavaScript SDK (npm) — contacts, transactional sends, events, topics
packages/sdk-javaJavaJava SDK (Maven) — same API surface as sdk-js for JVM consumers

Who imports what

  • web imports email-builder, email-previewer, ui, and shared
  • api imports email-renderer and shared
  • admin imports ui and shared
  • docs and marketing import ui
  • mta is standalone — it receives HTTP requests from api and delivers mail directly
  • sdk-js and sdk-java are standalone — they talk to the public REST API exposed by api