Eko Monorepo Structure
Generated: February 7, 2026 (v15)
Generated file. Update via tooling; do not hand-edit.
eko/
├── .claude/
│ ├── agents/
│ │ ├── README.md
│ │ ├── admin-operator.md
│ │ ├── architect-steward.md
│ │ ├── ci-quality-gatekeeper.md
│ │ ├── cron-scheduler.md
│ │ ├── db-migration-operator.md
│ │ ├── diff-analyst.md
│ │ ├── docs-librarian.md
│ │ ├── observability-analyst.md
│ │ ├── platform-config-owner.md
│ │ ├── queue-sre.md
│ │ ├── release-manager.md
│ │ ├── render-engineer.md
│ │ ├── security-reviewer.md
│ │ ├── subscription-manager.md
│ │ ├── summarization-safety.md
│ │ ├── tracker-engineer.md
│ │ ├── use-case-note-writer.md
│ │ └── ux-page-card-designer.md
│ ├── hooks/
│ │ ├── auto-migrations-index.sh
│ │ ├── block-sensitive.sh
│ │ ├── changelog-check.sh
│ │ ├── plan-backup.sh
│ │ ├── pre-compact.sh
│ │ ├── prompt-guidance.sh
│ │ ├── session-context.sh
│ │ ├── subagent-quality.sh
│ │ └── verify-before-stop.sh
│ ├── plan-history/
│ │ └── .gitkeep
│ ├── rules/
│ │ ├── migrations-index.md
│ │ └── plan-governance.md
│ ├── skills/
│ │ ├── create-migration/SKILL.md
│ │ └── deploy/SKILL.md
│ ├── session-state.md
│ ├── settings.json
│ └── settings.local.json # gitignored
├── .editorconfig
├── .env.example
├── .gitignore
├── .gitleaks.toml
├── .github/
│ ├── CODEOWNERS
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ └── ci.yml
├── .husky/
│ ├── commit-msg
│ ├── pre-commit
│ └── pre-push
├── AGENTS.md
├── CHANGELOG.md
├── CLAUDE.md
├── CODEOWNERS
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── STACK.md
├── TODO.md
├── biome.json
├── components.json
├── docs-code-mapping.yml
├── package.json
├── tsconfig.base.json
├── turbo.json
├── vitest.workspace.ts
│
├── brand/ # Centralized brand assets (synced to apps)
│ ├── avatars/
│ │ ├── default-brand.svg
│ │ └── default-page.svg
│ ├── fonts/
│ │ ├── red_hat_text/ # Primary font (variable + static weights)
│ │ └── sometype_mono/ # Monospace font (variable + static weights)
│ ├── icon/
│ │ ├── icon-dark-mode.svg
│ │ └── icon-light-mode.svg
│ ├── logo/
│ │ ├── logo-dark-mode.svg
│ │ ├── logo-dark-mode-vertical.svg
│ │ ├── logo-light-mode.svg
│ │ └── logo-light-mode-vertical.svg
│ └── raster/
│ ├── android-chrome-192.png
│ ├── android-chrome-512.png
│ ├── apple-touch-icon.png
│ ├── favicon-16.png
│ └── favicon-32.png
│
├── apps/
│ ├── admin/
│ │ ├── app/
│ │ │ ├── (dashboard)/
│ │ │ │ ├── audience/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── audience-select.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── avatars/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── avatar-upload-dialog.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── billing/
│ │ │ │ │ ├── customers/
│ │ │ │ │ │ ├── [id]/
│ │ │ │ │ │ │ ├── actions.ts
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── changes/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ ├── actions.ts
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── content/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── diff-settings/
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── domains/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── domain-actions.tsx
│ │ │ │ │ ├── pending/page.tsx
│ │ │ │ │ └── rejected/page.tsx
│ │ │ │ ├── feature-flags/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── create-flag-form.tsx
│ │ │ │ │ ├── page.test.ts
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ └── toggle-flag-button.tsx
│ │ │ │ ├── feeder-sources/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── create-source-form.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ └── source-actions.tsx
│ │ │ │ ├── media/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── media-grid.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── upload-dialog.tsx
│ │ │ │ ├── onboarding/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── queue/
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── urls/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ ├── actions.test.ts
│ │ │ │ │ │ ├── actions.ts
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── users/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ ├── dashboard/page.tsx
│ │ │ │ │ │ ├── notifications/page.tsx
│ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ ├── url-actions-dropdown.tsx
│ │ │ │ │ │ └── urls/
│ │ │ │ │ │ ├── actions.ts
│ │ │ │ │ │ └── add/
│ │ │ │ │ │ ├── add-url-form.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ └── users-table.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── actions/
│ │ │ │ ├── auth.test.ts
│ │ │ │ └── auth.ts
│ │ │ ├── api/
│ │ │ │ ├── email/
│ │ │ │ │ ├── test/route.ts
│ │ │ │ │ └── verify/route.ts
│ │ │ │ └── sentry-example-api/route.ts
│ │ │ ├── auth/
│ │ │ │ ├── callback/route.ts
│ │ │ │ └── confirm/route.ts
│ │ │ ├── forgot-password/page.tsx
│ │ │ ├── global-error.tsx
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── login/page.tsx
│ │ │ ├── manifest.ts
│ │ │ ├── reset-password/page.tsx
│ │ │ ├── sentry-example-page/page.tsx
│ │ │ └── utils.test.ts
│ │ ├── components/
│ │ │ ├── admin-data-table.tsx
│ │ │ ├── admin-shell.tsx
│ │ │ ├── admin-sidebar-header.tsx
│ │ │ ├── admin-sidebar-user.tsx
│ │ │ ├── admin-sidebar.tsx
│ │ │ ├── admin-table/index.ts
│ │ │ ├── bulk-actions-bar.tsx
│ │ │ ├── editable-cell.tsx
│ │ │ ├── email-status-card.tsx
│ │ │ └── index.ts
│ │ ├── lib/
│ │ │ ├── supabase/server.ts
│ │ │ └── utils.ts
│ │ ├── styles/
│ │ │ └── auth-button.css
│ │ ├── instrumentation-client.ts
│ │ ├── instrumentation.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── proxy.ts
│ │ ├── sentry.edge.config.ts
│ │ ├── sentry.server.config.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── storybook/
│ │ ├── .storybook/
│ │ │ ├── main.ts
│ │ │ ├── manager.ts
│ │ │ └── preview.tsx
│ │ ├── app/
│ │ │ └── globals.css
│ │ ├── stories/
│ │ │ ├── ai/ # AI component stories (15 stories)
│ │ │ ├── blocks/ # Block pattern stories
│ │ │ ├── components/ # Component stories
│ │ │ ├── form/ # Form component stories (12 stories)
│ │ │ ├── foundations/ # Design foundation stories (6 stories)
│ │ │ ├── loading/ # Loading state stories (9 stories)
│ │ │ ├── patterns/ # UI pattern stories (4 stories)
│ │ │ ├── sacred/ # Sacred component stories (13 stories)
│ │ │ ├── tables/ # Table component stories
│ │ │ ├── AlertDialog.stories.tsx
│ │ │ ├── AppHeader.stories.tsx
│ │ │ ├── AppShell.stories.tsx
│ │ │ ├── AppSidebar.stories.tsx
│ │ │ ├── AppSidebarNav.stories.tsx
│ │ │ ├── Avatar.stories.tsx
│ │ │ ├── Badge.stories.tsx
│ │ │ ├── Button.stories.tsx
│ │ │ ├── Card.stories.tsx
│ │ │ ├── Checkbox.stories.tsx
│ │ │ ├── DashboardStats.stories.tsx
│ │ │ ├── Dialog.stories.tsx
│ │ │ ├── DropdownMenu.stories.tsx
│ │ │ ├── Input.stories.tsx
│ │ │ ├── Label.stories.tsx
│ │ │ ├── Popover.stories.tsx
│ │ │ ├── RadioGroup.stories.tsx
│ │ │ ├── Select.stories.tsx
│ │ │ ├── Separator.stories.tsx
│ │ │ ├── Sheet.stories.tsx
│ │ │ ├── Skeleton.stories.tsx
│ │ │ ├── Switch.stories.tsx
│ │ │ ├── Tabs.stories.tsx
│ │ │ ├── Textarea.stories.tsx
│ │ │ └── Tooltip.stories.tsx
│ │ ├── tests/
│ │ │ ├── datepicker-alignment.spec.ts
│ │ │ ├── focus-styling.spec.ts
│ │ │ ├── sidebar-collapse-animation.spec.ts
│ │ │ └── sidebar-diagnostic.spec.ts
│ │ ├── package.json
│ │ ├── playwright.config.ts
│ │ ├── postcss.config.mjs
│ │ └── tsconfig.json
│ │
│ ├── web/
│ │ ├── app/
│ │ │ ├── (authenticated)/
│ │ │ │ ├── account/
│ │ │ │ │ ├── billing/page.tsx
│ │ │ │ │ ├── notifications/
│ │ │ │ │ │ ├── notification-preferences-form.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── profile/
│ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ └── profile-form.tsx
│ │ │ │ │ └── settings/
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ └── settings-content.tsx
│ │ │ │ ├── dashboard/
│ │ │ │ │ ├── add/
│ │ │ │ │ │ ├── csv-upload-zone.tsx
│ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ └── url-form-instance.tsx
│ │ │ │ │ ├── discover/
│ │ │ │ │ │ ├── brand-types/
│ │ │ │ │ │ │ ├── [id]/page.tsx
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── page-types/
│ │ │ │ │ │ │ ├── [id]/page.tsx
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── use-cases/
│ │ │ │ │ │ │ ├── [id]/page.tsx
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── domains/
│ │ │ │ │ │ └── [id]/page.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── updates/
│ │ │ │ │ │ └── [updateId]/page.tsx
│ │ │ │ │ └── urls/
│ │ │ │ │ └── [id]/page.tsx
│ │ │ │ ├── domains/
│ │ │ │ │ ├── [id]/page.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── favorites/
│ │ │ │ │ ├── [folderId]/
│ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ └── remove-button.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── library/
│ │ │ │ │ ├── [folderId]/
│ │ │ │ │ │ ├── delete-folder-dialog.tsx
│ │ │ │ │ │ ├── folder-controls.tsx
│ │ │ │ │ │ ├── folder-pagination.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── notifications/
│ │ │ │ │ ├── notifications-list.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── saved/
│ │ │ │ │ ├── brand-types/page.tsx
│ │ │ │ │ ├── page-types/page.tsx
│ │ │ │ │ ├── urls/
│ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ └── saved-urls-client.tsx
│ │ │ │ │ └── use-cases/page.tsx
│ │ │ │ ├── url/
│ │ │ │ │ └── [id]/
│ │ │ │ │ ├── check-frequency-selector.tsx
│ │ │ │ │ ├── editable-url-details.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ └── layout.tsx
│ │ │ ├── (legal)/
│ │ │ │ ├── contact/page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── privacy/page.tsx
│ │ │ │ └── terms/page.tsx
│ │ │ ├── about/page.tsx
│ │ │ ├── actions/
│ │ │ │ ├── auth.ts
│ │ │ │ ├── favorites.ts
│ │ │ │ ├── folders.ts
│ │ │ │ └── saved-items.ts
│ │ │ ├── api/
│ │ │ │ ├── account/
│ │ │ │ │ ├── notifications/route.ts
│ │ │ │ │ └── profile/route.ts
│ │ │ │ ├── cron/
│ │ │ │ │ ├── account-anniversaries/route.ts
│ │ │ │ │ ├── daily-cost-report/route.ts
│ │ │ │ │ ├── daily-digest/route.ts
│ │ │ │ │ ├── monthly-usage-report/route.ts
│ │ │ │ │ ├── payment-escalation/route.ts
│ │ │ │ │ └── payment-reminders/route.ts
│ │ │ │ ├── discover/
│ │ │ │ │ ├── brand-types/
│ │ │ │ │ │ ├── [id]/brands/route.ts
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── page-types/
│ │ │ │ │ │ ├── [id]/urls/route.ts
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── personas/
│ │ │ │ │ ├── [id]/use-cases/route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── docs/search/route.ts
│ │ │ │ ├── domains/
│ │ │ │ │ ├── [id]/route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── email/test/route.ts
│ │ │ │ ├── enqueue-due-urls/route.ts
│ │ │ │ ├── favorites/folders/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ ├── route.ts
│ │ │ │ │ │ └── urls/route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── health/route.ts
│ │ │ │ ├── library/folders/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ ├── route.ts
│ │ │ │ │ │ └── urls/route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── notifications/
│ │ │ │ │ ├── [id]/read/route.ts
│ │ │ │ │ ├── read-all/route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── saved-items/
│ │ │ │ │ ├── [id]/route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── sentry-example-api/route.ts
│ │ │ │ ├── stripe/
│ │ │ │ │ ├── checkout/route.ts
│ │ │ │ │ ├── portal/route.ts
│ │ │ │ │ └── webhooks/route.ts
│ │ │ │ ├── urls/
│ │ │ │ │ ├── [id]/route.ts
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── validate/route.ts
│ │ │ │ ├── v1/
│ │ │ │ │ ├── _lib/
│ │ │ │ │ │ ├── auth.ts
│ │ │ │ │ │ ├── pagination.ts
│ │ │ │ │ │ ├── rate-limit.ts
│ │ │ │ │ │ └── response.ts
│ │ │ │ │ ├── brands/
│ │ │ │ │ │ └── [brandId]/
│ │ │ │ │ │ ├── route.ts
│ │ │ │ │ │ └── urls/route.ts
│ │ │ │ │ ├── dashboard/updates/route.ts
│ │ │ │ │ ├── updates/[urlChangeEventId]/route.ts
│ │ │ │ │ └── urls/[urlId]/updates/route.ts
│ │ │ │ └── webhooks/twilio/route.ts
│ │ │ ├── auth/
│ │ │ │ ├── auth-code-error/page.tsx
│ │ │ │ ├── callback/route.ts
│ │ │ │ └── confirm/route.ts
│ │ │ ├── blog/page.tsx
│ │ │ ├── changelog/page.tsx
│ │ │ ├── docs/
│ │ │ │ ├── [category]/
│ │ │ │ │ ├── [article]/page.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── docs-search-wrapper.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── faq/page.tsx
│ │ │ ├── features/page.tsx
│ │ │ ├── forgot-password/page.tsx
│ │ │ ├── global-error.tsx
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── login/page.tsx
│ │ │ ├── manifest.ts
│ │ │ ├── not-found.tsx
│ │ │ ├── page.tsx
│ │ │ ├── pricing/page.tsx
│ │ │ ├── reset-password/page.tsx
│ │ │ ├── sentry-example-page/page.tsx
│ │ │ ├── signup/page.tsx
│ │ │ ├── use-cases/page.tsx
│ │ │ └── verify-otp/page.tsx
│ │ ├── components/
│ │ │ ├── audience-tabs.tsx
│ │ │ ├── auth/
│ │ │ │ ├── auth-divider.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── social-login-buttons.tsx
│ │ │ ├── folder-dialogs.tsx
│ │ │ └── folder-provider.tsx
│ │ ├── lib/
│ │ │ ├── docs.ts
│ │ │ ├── sample-note-generator.ts
│ │ │ └── supabase/
│ │ │ ├── client.ts
│ │ │ └── server.ts
│ │ ├── tests/
│ │ │ ├── button-audit.spec.ts
│ │ │ ├── fixtures/auth.fixture.ts
│ │ │ ├── login.spec.ts
│ │ │ └── site-audit.spec.ts
│ │ ├── instrumentation-client.ts
│ │ ├── instrumentation.ts
│ │ ├── package.json
│ │ ├── playwright.config.ts
│ │ ├── postcss.config.mjs
│ │ ├── proxy.ts
│ │ ├── sentry.edge.config.ts
│ │ ├── sentry.server.config.ts
│ │ ├── tsconfig.json
│ │ ├── vercel.json
│ │ └── vitest.config.ts
│ │
│ ├── worker-sms/
│ │ ├── src/
│ │ │ ├── index.test.ts
│ │ │ ├── index.ts
│ │ │ ├── message-builder.ts
│ │ │ └── twilio-client.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ │
│ ├── worker-ingest/ # News ingestion worker (removed: worker-tracker, worker-render)
│ ├── worker-facts/ # Fact extraction worker
│ └── worker-validate/ # Fact validation worker
│
├── docs/
│ ├── README.md
│ ├── CONVENTIONS.md
│ ├── glossary.md
│ ├── eko-guide-draft-a.md
│ ├── schema-reference.md
│ ├── ui-component-inventory.md
│ ├── _templates/
│ │ ├── README.md
│ │ ├── INDEX.md
│ │ ├── architecture.md
│ │ ├── dev-guide.md
│ │ ├── feature-report.md
│ │ ├── fix-report.md
│ │ ├── product.md
│ │ ├── proposal.md
│ │ ├── runbook.md
│ │ └── spec.md
│ ├── archive/
│ │ ├── README.md
│ │ ├── eko-mvp-plan-original.md
│ │ └── meaningful-change.md
│ ├── architecture/
│ │ ├── README.md
│ │ ├── brand-library-schema.md
│ │ ├── decisions.md
│ │ ├── monorepo-structure.md
│ │ ├── overview.md
│ │ ├── schema-naming-contracts.md
│ │ └── tools.md
│ ├── assessments/
│ │ ├── README.md
│ │ ├── agents-system-fixes-summary.md
│ │ ├── agents-system-test-report.md
│ │ ├── ai-cost-feasibility-2026-01-08.md
│ │ ├── dependency-audit-2026-01-09.md
│ │ ├── mvp-scorecard-2026-01-09.md
│ │ ├── repo-assessment-2025-12-13-v1.md
│ │ ├── repo-assessment-2025-12-16-v2.md
│ │ ├── repo-assessment-2025-12-18-v3.md
│ │ ├── repo-assessment-2025-12-19-v4.md
│ │ ├── repo-assessment-2025-12-26-v5.md
│ │ ├── repo-assessment-2025-12-27-v6.md
│ │ ├── repo-assessment-2026-01-08-v7.md
│ │ ├── ui-ux-evaluation-report-v1.md
│ │ └── ui-ux-evaluation-report-v3.md
│ ├── challenges/ # Feature challenge specs
│ │ ├── README.md
│ │ ├── TODO.md
│ │ ├── 01-app-shell-sidebar.md
│ │ ├── 02-my-library.md
│ │ ├── 03-add-url.md
│ │ ├── 04-favorites.md
│ │ ├── 05-save-for-later.md
│ │ ├── 06-page-updates.md
│ │ ├── 07-brands-tracking.md
│ │ ├── 08-discover-page-types.md
│ │ ├── 09-discover-brand-types.md
│ │ ├── 10-discover-use-cases.md
│ │ ├── 11-sms-notifications.md
│ │ ├── 12-onboarding.md
│ │ ├── 13-account-settings.md
│ │ ├── 14-eko-docs.md
│ │ ├── 15-public-pages.md
│ │ ├── 16-screenshot-capture.md
│ │ ├── 17-authentication-system.md
│ │ └── 18-public-pages-design-system.md
│ ├── changelog/
│ │ ├── README.md
│ │ └── MM-YYYY.md # Monthly changelog files
│ ├── contracts/
│ │ ├── README.md
│ │ └── global-url-library.md
│ ├── design/
│ │ ├── README.md
│ │ ├── TODO.md
│ │ ├── 01-25-2026-tokens-css.md
│ │ ├── authority-resolution-order.md
│ │ ├── build-phase.md
│ │ ├── build-sequence-playbook.md
│ │ ├── design-system-manifesto.md
│ │ ├── eko-design-system-report-v1.md
│ │ ├── generated-prompts/README.md
│ │ ├── generator-prompt.md
│ │ ├── llm-system-prompt-admin.md
│ │ ├── llm-system-prompt-refactor.md
│ │ ├── llm-system-prompt-ui.md
│ │ ├── opening-prompt.md
│ │ ├── ui-enterprise/ # UI Enterprise design system (8 waves)
│ │ │ ├── README.md
│ │ │ ├── eko-ui-component-catalog.md
│ │ │ ├── PAGE-BUILDOUT-GUIDE.md
│ │ │ ├── TODO-UI.md
│ │ │ ├── WAVE-2-5-STATUS.md
│ │ │ ├── wave-0-ia/ # Information architecture (4 specs)
│ │ │ ├── wave-0-public-pages/ # Public page specs (9 phases)
│ │ │ ├── wave-1-foundation/ # Foundation tokens (16 specs)
│ │ │ ├── wave-2-forms/ # Form components (12 specs)
│ │ │ ├── wave-3-loading/ # Loading states (12 specs)
│ │ │ ├── wave-4-tables/ # Table components (12 specs)
│ │ │ ├── wave-5-integration/ # App integration (14 specs)
│ │ │ ├── wave-6-data/ # Data layer (14 specs)
│ │ │ ├── wave-7-media/ # Media components (1 spec)
│ │ │ └── wave-8-polish/ # Polish & motion (6 specs)
│ │ └── visual-authority-contract.md
│ ├── dev/
│ │ ├── README.md
│ │ ├── SETUP_ACCOUNT.md
│ │ ├── agent-versioning.md
│ │ ├── brand-library-master-plan.md
│ │ ├── database.md
│ │ ├── deployments.md
│ │ ├── drizzle.md
│ │ ├── local-development.md
│ │ ├── migration-coexistence.md
│ │ ├── observability.md
│ │ └── testing.md
│ ├── marketing/
│ │ └── features-document.md
│ ├── mvp-readiness/
│ │ ├── README.md
│ │ ├── deployment-manifest.md
│ │ └── service-inventory.md
│ ├── plans/
│ │ ├── README.md
│ │ ├── cost-optimization-proposal.md
│ │ ├── eko-mvp-plan.md
│ │ ├── gpt-to-claude-prompt-eko-mvp-plan.md
│ │ ├── llm-url-tracking-cost-comparison.md
│ │ ├── playwright-video-integration.md
│ │ └── public-site-rollout-requirements.md
│ ├── policies/
│ │ ├── README.md
│ │ ├── ai-safety.md
│ │ └── fair-use.md
│ ├── product/
│ │ ├── README.md
│ │ ├── FEATURES.md
│ │ ├── PRD.md
│ │ ├── page-summary-examples.md
│ │ ├── page-type-definitions.md
│ │ ├── tracking-suggestions/
│ │ │ ├── README.md
│ │ │ └── url-tracking-note-examples.md
│ │ ├── ui-element-registry.md
│ │ ├── use-case-index.md
│ │ ├── use-cases-hybrid.md
│ │ ├── use-cases-personal.md
│ │ ├── use-cases-work.md
│ │ ├── use-cases.md
│ │ ├── user-guide.md
│ │ └── v1-execution-contract.md
│ ├── projects/
│ │ ├── README.md
│ │ └── building-eko-pages/ # Page build specs (~90 pages)
│ │ ├── README.md
│ │ ├── INDEX.md
│ │ ├── proposed-eko-page-screen-list.md
│ │ ├── admin/ # Admin page specs
│ │ ├── app/ # App page specs
│ │ ├── auth/ # Auth page specs
│ │ ├── onboarding/ # Onboarding page specs
│ │ ├── public/ # Public page specs
│ │ └── test-docs/ # Test documentation
│ ├── proposals/
│ │ ├── README.md
│ │ ├── inline-diffs-proposal.md
│ │ ├── url-tracking-scale-proposal.md
│ │ ├── video-production-decisions.md
│ │ └── video-production-proposal.md
│ ├── reports/
│ │ ├── README.md
│ │ ├── sms-notification-system-completion.md
│ │ ├── analysis/ # System analysis reports
│ │ ├── doc-health/ # Documentation health reports
│ │ ├── features/ # Feature completion reports (~40 reports)
│ │ └── fixes/ # Bug fix reports
│ ├── rules/
│ │ ├── README.md
│ │ ├── changelog.md
│ │ ├── dependencies.md
│ │ ├── eko-gtd.md
│ │ ├── error-handling.md
│ │ ├── security.md
│ │ ├── styling.md
│ │ └── testing.md
│ ├── runbooks/
│ │ ├── README.md
│ │ ├── codebase-review-plan.md
│ │ ├── incident-playbook.md
│ │ ├── mvp-checklist.md
│ │ ├── mvp-master-runbook.md
│ │ ├── mvp-readiness.md
│ │ ├── pre-mvp-validation-1-system.md
│ │ ├── pre-mvp-validation-2-cost-stress.md
│ │ ├── pre-mvp-validation-3-early-users.md
│ │ ├── queue.md
│ │ ├── render.md
│ │ ├── scheduling.md
│ │ ├── summarization.md
│ │ ├── team-infrastructure.md
│ │ ├── team-pipeline.md
│ │ ├── team-schema.md
│ │ └── tracker.md
│ ├── specs/
│ │ ├── README.md
│ │ ├── TODO.md
│ │ ├── confidence-scoring.md
│ │ ├── meaningful-change.md
│ │ ├── mvp-constraints.md
│ │ ├── naming-contracts.md
│ │ ├── phase-a-core-app-functionality.md
│ │ ├── phase-b-admin-control-plane.md
│ │ ├── phase-c-notifications.md
│ │ ├── phase-d-public-pages-auth.md
│ │ ├── phase-e-design-system-rollout.md
│ │ ├── phase-f-stripe-billing.md
│ │ ├── phase-g-brand-library-seeding.md
│ │ ├── phase-h-app-shell-navigation.md
│ │ ├── phase-i-organization.md
│ │ ├── phase-j-discover-features.md
│ │ ├── phase-k-onboarding.md
│ │ ├── phase-l-public-site.md
│ │ ├── render-escalation.md
│ │ ├── service-levels.md
│ │ ├── summarization-safety.md
│ │ ├── url-normalization.md
│ │ ├── user-facing-controls.md
│ │ └── v1-business-rules.md
│ └── templates/
│ └── eko-gtd/ # GTD methodology templates
│ ├── README.md
│ ├── challenge-full.md
│ ├── challenge-mini.md
│ ├── challenge-quick.md
│ ├── gtm-eko-gtd.md
│ ├── todo.md
│ └── understanding-eko-gtd.md
│
├── infra/
│ ├── Dockerfile.worker
│ └── fly.toml.example
│
├── packages/
│ ├── ai/
│ │ ├── src/
│ │ │ ├── classify-audience.ts
│ │ │ ├── classify-page-complexity.ts
│ │ │ ├── correlate-changes.ts
│ │ │ ├── cost-tracker.ts
│ │ │ ├── deep-analysis.ts
│ │ │ ├── index.test.ts
│ │ │ ├── index.ts
│ │ │ ├── mcp-client.ts
│ │ │ └── model-router.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── config/
│ │ ├── src/
│ │ │ ├── env-guard.test.ts
│ │ │ └── index.ts
│ │ ├── test/
│ │ │ └── fixtures/
│ │ │ ├── import-only.ts
│ │ │ ├── missing-load.ts
│ │ │ ├── sentry-disabled-with-dsn.ts
│ │ │ ├── sentry-enabled-no-dsn.ts
│ │ │ └── with-load.ts
│ │ ├── package.json
│ │ ├── README.md
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── db/
│ │ ├── src/
│ │ │ ├── __tests__/
│ │ │ │ └── security/
│ │ │ │ ├── api-route-isolation.test.ts
│ │ │ │ ├── tenant-isolation.test.ts
│ │ │ │ └── test-helpers.ts
│ │ │ ├── drizzle/
│ │ │ │ ├── client.ts
│ │ │ │ ├── feature-flags.ts
│ │ │ │ ├── queries.ts
│ │ │ │ └── schema.ts
│ │ │ ├── cache.test.ts
│ │ │ ├── cache.ts
│ │ │ ├── client.ts
│ │ │ ├── generated-types.ts
│ │ │ ├── index.ts
│ │ │ ├── queries.digest.test.ts
│ │ │ ├── queries.feeder-sources.ts
│ │ │ ├── queries.ts
│ │ │ └── supabase.types.ts
│ │ ├── drizzle.config.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── email/
│ │ ├── src/
│ │ │ ├── templates/
│ │ │ │ ├── alerts/
│ │ │ │ │ ├── daily-cost-report.ts
│ │ │ │ │ └── provider-fallback-alert.ts
│ │ │ │ ├── billing/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── payment-failed-escalation.ts
│ │ │ │ │ ├── payment-failed.ts
│ │ │ │ │ ├── payment-received.ts
│ │ │ │ │ ├── payment-reminder.ts
│ │ │ │ │ ├── plan-info.ts
│ │ │ │ │ ├── subscription-change.ts
│ │ │ │ │ └── url-limit-warning.ts
│ │ │ │ ├── milestone/
│ │ │ │ │ ├── achievement.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── usage/
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── monthly-report.ts
│ │ │ │ ├── change-notification.ts
│ │ │ │ └── daily-digest.ts
│ │ │ ├── client.ts
│ │ │ ├── domains.ts
│ │ │ ├── index.test.ts
│ │ │ ├── index.ts
│ │ │ └── send.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── observability/
│ │ ├── src/
│ │ │ ├── index.test.ts
│ │ │ └── index.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── queue/
│ │ ├── src/
│ │ │ ├── index.test.ts
│ │ │ └── index.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── shared/
│ │ ├── src/
│ │ │ ├── __tests__/
│ │ │ │ ├── agents-selector.test.ts
│ │ │ │ ├── brand-types.test.ts
│ │ │ │ ├── entitlements.test.ts
│ │ │ │ ├── get-registrable-domain.test.ts
│ │ │ │ ├── smoke.test.ts
│ │ │ │ ├── url-normalization.test.ts
│ │ │ │ ├── url-verification.test.ts
│ │ │ │ └── utils-extended.test.ts
│ │ │ ├── agents/
│ │ │ │ ├── index.ts
│ │ │ │ ├── interfaces.ts
│ │ │ │ ├── parser.ts
│ │ │ │ ├── selector.ts
│ │ │ │ └── types.ts
│ │ │ ├── ui-registry/
│ │ │ │ └── ui-element-registry.json
│ │ │ ├── entitlements.ts
│ │ │ ├── index.ts
│ │ │ ├── schemas.ts
│ │ │ ├── types.ts
│ │ │ ├── url-normalization.ts
│ │ │ ├── url-verification.ts
│ │ │ └── utils.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ ├── stripe/
│ │ ├── src/
│ │ │ ├── handlers/
│ │ │ │ ├── billing-notifications.ts
│ │ │ │ ├── checkout-completed.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── invoice-failed.ts
│ │ │ │ ├── invoice-paid.ts
│ │ │ │ ├── subscription-created.ts
│ │ │ │ ├── subscription-deleted.ts
│ │ │ │ ├── subscription-updated.ts
│ │ │ │ └── utils.ts
│ │ │ ├── admin.ts
│ │ │ ├── checkout.ts
│ │ │ ├── client.ts
│ │ │ ├── customer.ts
│ │ │ ├── index.test.ts
│ │ │ ├── index.ts
│ │ │ ├── portal.ts
│ │ │ └── webhooks.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ │
│ └── ui/
│ ├── src/
│ │ ├── __tests__/
│ │ │ └── setup.ts
│ │ ├── components/
│ │ │ ├── ai-elements/ # AI UI components (30+ components)
│ │ │ ├── billing/ # Billing UI components
│ │ │ ├── blocks/ # Block patterns
│ │ │ ├── data-table/ # Data table components
│ │ │ ├── docs/ # Documentation components
│ │ │ ├── form/ # Form components (10 components)
│ │ │ ├── layout/ # App layout components (20+ components)
│ │ │ ├── onboarding/ # Onboarding flow components
│ │ │ ├── pricing-efferd/ # Pricing components
│ │ │ ├── public/ # Public site components
│ │ │ │ ├── animation/ # Animation utilities
│ │ │ │ ├── layout/ # Public page layout
│ │ │ │ ├── navigation/ # Navigation components
│ │ │ │ ├── pages/ # Full page components
│ │ │ │ ├── sections/ # Page section components
│ │ │ │ └── visuals/ # Visual/decorative components
│ │ │ ├── sacred/ # Sacred UI components (20+ components)
│ │ │ ├── settings/ # Settings components
│ │ │ ├── sidebar-01/ # Sidebar variant
│ │ │ ├── sms/ # SMS notification components
│ │ │ ├── video/ # Video components
│ │ │ ├── index.ts
│ │ │ └── ... # 200+ individual component files
│ │ ├── hooks/
│ │ │ ├── index.ts
│ │ │ └── use-mobile.ts
│ │ ├── lib/
│ │ │ ├── utils.test.ts
│ │ │ └── utils.ts
│ │ ├── styles/
│ │ │ ├── contrast-audit.test.ts
│ │ │ ├── icon-system.test.ts
│ │ │ ├── motion-audit.test.ts
│ │ │ ├── public-pages.test.ts
│ │ │ └── spacing.test.ts
│ │ ├── globals.css
│ │ └── index.ts
│ ├── styles/
│ │ ├── accessibility.css
│ │ ├── components.css
│ │ ├── focus.css
│ │ ├── icons.css
│ │ ├── motion.css
│ │ ├── spacing.css
│ │ ├── theme.css
│ │ └── tokens.css
│ ├── components.json
│ ├── package.json
│ ├── tsconfig.json
│ └── vitest.config.ts
│
├── supabase/
│ ├── config.toml
│ ├── migrations/
│ │ ├── 0001_init.sql
│ │ ├── 0002_renders.sql
│ │ ├── 0003_storage_renders_bucket.sql
│ │ ├── 0004_user_note_and_checked_day.sql
│ │ ├── 0005_brand_library_v1.sql
│ │ ├── 0006_v1_contracts.sql
│ │ ├── 0007_global-url-library-vnext.sql
│ │ ├── 0008_notification_dedupe_key.sql
│ │ ├── 0009_brand_sites_v1.sql
│ │ ├── 0010_brand_sites_not_null.sql
│ │ ├── 0011_seed_tracking.sql
│ │ ├── 0012_note_integration.sql
│ │ ├── 0013_page_type.sql
│ │ ├── 0014_page_type_extension.sql
│ │ ├── 0015_security_fixes.sql
│ │ ├── 0016_history_gating_optimization.sql
│ │ ├── 0017_performance_indexes.sql
│ │ ├── 0018_inline_diffs.sql
│ │ ├── 0019_urls_page_description.sql
│ │ ├── 0020_billing_extensions.sql
│ │ ├── 0021_url_types_extension.sql
│ │ ├── 0022_brand_library_seed_tracking.sql
│ │ ├── 0023_brand_url_type_extension.sql
│ │ ├── 0024_admin_view_security_invoker.sql
│ │ ├── 0025_function_search_path_fixes.sql
│ │ ├── 0026_rls_policy_role_restrictions.sql
│ │ ├── 0027_feeder_sources.sql
│ │ ├── 0028_user_folders.sql
│ │ ├── 0029_url_read_states.sql
│ │ ├── 0030_favorite_folders.sql
│ │ ├── 0031_saved_items.sql
│ │ ├── 0032_screenshot_captures.sql
│ │ ├── 0033_page_title_history.sql
│ │ ├── 0034_url_stats_view.sql
│ │ ├── 0035_page_type_metadata.sql
│ │ ├── 0036_brand_type_metadata.sql
│ │ ├── 0037_personas_and_use_cases.sql
│ │ ├── 0038_sms_notifications.sql
│ │ ├── 0039_page_type_metadata_extension.sql
│ │ ├── 0040_use_cases_comprehensive_seed.sql
│ │ ├── 0041_screen_avatars.sql
│ │ ├── 0042_system_notifications.sql
│ │ ├── 0043_summary_admin_override.sql
│ │ ├── 0044_add_use_case_audience.sql
│ │ ├── 0045_rename_brand_seeded_to_system_seeded.sql
│ │ ├── 0046_update_brand_seeded_rows.sql
│ │ ├── 0047_fix_single_product_enum.sql
│ │ ├── 0048_migrate_single_product_data.sql
│ │ ├── 0049_add_single_product_page_type.sql
│ │ ├── 0050_rename_brand_tables.sql
│ │ ├── 0051_consolidate_folders.sql
│ │ ├── 0052_consolidate_metadata.sql
│ │ ├── 0053_consolidate_notification_delivery.sql
│ │ ├── 0054_screenshot_captures_render_fields.sql
│ │ ├── 0055_notification_vnext_fk.sql
│ │ ├── 0056_screenshot_captures_vnext_fks.sql
│ │ ├── 0057_brand_categories.sql
│ │ ├── 0058_v1_table_backups.sql
│ │ ├── 0059_v1_cleanup_fks_and_columns.sql
│ │ ├── 0060_v1_drop_tables.sql
│ │ ├── 0061_rename_brand_sites_to_domains.sql
│ │ ├── 0062_add_domain_verification.sql
│ │ ├── 0063_link_domains_to_brands.sql
│ │ ├── 0064_rename_folder_urls.sql
│ │ ├── 0065_rename_brand_urls.sql
│ │ ├── 0066_add_audience_to_urls.sql
│ │ ├── 0067_update_domains_source_constraint.sql
│ │ ├── 0068_fix_urls_brand_id_fk.sql
│ │ ├── 0069_normalize_url_canonical_domains.sql
│ │ ├── 0070_vnext_folder_urls.sql
│ │ ├── 0071_add_next_steps_to_url_change_summaries.sql
│ │ ├── 0072_add_vnext_columns_orphaned_tables.sql
│ │ ├── 0073_backfill_vnext_columns.sql
│ │ ├── 0074_saved_items_integrity.sql
│ │ ├── 0075_section_dom_mappings_unique.sql
│ │ ├── 0076_rename_url_to_page_core.sql
│ │ ├── 0077_rename_url_to_page_dependent.sql
│ │ ├── 0078_rename_url_to_page_cleanup.sql
│ │ ├── 0079_ai_cost_tracking.sql
│ │ ├── 0080_page_complexity_cache.sql
│ │ ├── 0081_correlation_groups.sql
│ │ ├── 0082_deep_analysis.sql
│ │ └── 0087_index_page_change_events_fks.sql
│ ├── migrations-index.md
│ └── seed.sql
│
└── scripts/
├── lib/ # Shared script utilities
│ ├── batch-db.ts
│ ├── brandfetch-client.ts
│ ├── concurrency.ts
│ ├── discovery-orchestrator.ts
│ ├── feeder-sources.ts
│ ├── pdl-category-mapper.ts
│ ├── pdl-client.ts
│ ├── personas.ts
│ ├── platform-detection.ts
│ ├── platform-patterns.ts
│ ├── robots-parser.ts
│ ├── sitemap-parser.ts
│ ├── test-user-config.ts
│ ├── test-user-seeder.ts
│ └── url-patterns.ts
├── data/
│ └── domain-seeding-table.tsv
├── fixtures/
│ └── test-user-urls.json
├── add-urls-from-brands.ts
├── agents-ownership-fix.ts
├── agents-raci-matrix.ts
├── agents-routing-check.ts
├── assign-brand-categories.ts
├── audit-data-alignment.ts
├── audit-seeded-urls.ts
├── backfill-audience.ts
├── backfill-brand-sites.ts
├── backfill-page-types.ts
├── backfill-summaries.ts
├── brand-sync.ts
├── changelog-check.ts
├── check-due-urls.ts
├── check-env-example.ts
├── check-env-local.ts
├── check-env-typos.ts
├── check-error-handling.ts
├── check-invariants.ts
├── check-ui-registry.ts
├── check-v1-queues.ts
├── cleanup-v1-queues.ts
├── diagnose-pipeline.ts
├── discover-domains-pdl.ts
├── docs-binding-check.ts
├── docs-health.ts
├── docs-links.ts
├── docs-lint.sh
├── docs-new.ts
├── docs-staleness-summary.ts
├── docs-staleness.ts
├── enrich-brand-logos.ts
├── enrich-domains-pdl.ts
├── enrich-urls-from-seeding-urls.ts
├── export-ui-registry.ts
├── extract-domains-for-validation.ts
├── fix-orphan-domains.ts
├── frontmatter-fix.ts
├── generate-agent-sequence.ts
├── generate-changelog.ts
├── generate-db-types.ts
├── generate-migrations-index.ts
├── generate-script-index.ts
├── generate-tracking-note.ts
├── generate-ui-registry.ts
├── generate-url-patterns.ts
├── generate-use-cases.ts
├── migrate-brand-categories.ts
├── phase1-verify.ts
├── populate-domains-from-urls.ts
├── purge-old-content.ts
├── queue-cleanup.ts
├── queue-recovery.ts
├── rules-index.ts
├── seed-brand-categories.ts
├── seed-brand-library-pdl.ts
├── seed-brand-urls.ts
├── seed-brands-from-feeders.ts
├── seed-brands-from-table.ts
├── seed-phase1-test-urls.ts
├── seed-test-users.ts
├── seed-urls-from-markdown.ts
├── seed-urls-vnext.ts
├── seed-use-cases-migration.ts
├── select-agent.ts
├── setup.sh
├── soak-run-once.ts
├── soak-status.ts
├── test-email.ts
├── validate-domains.ts
└── vnext-parity-debug.ts
File Count Summary
| Directory | Files |
|---|---|
| Root configs | 18 |
| .claude | 36 |
| .github | 4 |
| .husky | 20 |
| brand | 39 |
| apps/admin | 91 |
| apps/storybook | 101 |
| apps/web | 159 |
| apps/worker-ingest | — |
| apps/worker-facts | — |
| apps/worker-validate | — |
| apps/worker-sms | 6 |
| docs | 453 |
| infra | 2 |
| packages/ai | 12 |
| packages/config | 11 |
| packages/db | 20 |
| packages/email | 24 |
| packages/observability | 5 |
| packages/queue | 5 |
| packages/shared | 24 |
| packages/stripe | 20 |
| packages/ui | 379 |
| scripts | 88 |
| supabase | 85 |
| Total | ~1630 |
Changes from v14
New Applications
- Added
apps/worker-sms/— SMS notification delivery service using Twilio APIsrc/index.ts,src/message-builder.ts,src/twilio-client.ts
New Packages
- Added
packages/email/— Email service client with template system- Templates: alerts, billing, milestone, usage, change notifications, daily digest
- Added
packages/stripe/— Stripe payment integration- Handlers: checkout, invoices, subscriptions, billing notifications
- Client: checkout sessions, customer portal, webhooks
Major App Expansions
apps/admin (21 → 91 files):
- Added
(dashboard)route group with 15+ admin sections - Added
components/directory with admin-specific components - Added auth flow: forgot-password, reset-password, auth callbacks
- Added Sentry integration and instrumentation
apps/web (42 → 159 files):
- Added
(authenticated)route group replacing flat page structure - Added account management: billing, notifications, profile, settings
- Added discover section: brand-types, page-types, use-cases
- Added favorites, library, saved items, and notifications pages
- Added public pages: about, blog, changelog, docs, FAQ, features, pricing, use-cases
- Added legal pages: contact, privacy, terms
- Added cron API routes: daily-digest, cost-report, payment reminders
- Added Stripe integration: checkout, portal, webhooks
- Added Twilio webhook handler
- Added auth components: social login, dividers
- Added Playwright tests and Sentry integration
apps/storybook (25 → 101 files):
- Added organized story directories: ai/, blocks/, form/, foundations/, loading/, patterns/, sacred/, tables/
- Added Playwright integration tests
- Added 70+ new story files
apps/worker-ingest, apps/worker-facts, apps/worker-validate (new v2 fact engine workers):
- Replaced legacy worker-render and worker-tracker apps
Package Expansions
packages/ai (5 → 12 files):
- Added audience classification, page complexity classification
- Added change correlation, cost tracking, deep analysis
- Added MCP client, model router
packages/db (5 → 20 files):
- Added Drizzle ORM integration: client, feature-flags, queries, schema
- Added query caching layer
- Added feeder source queries, digest tests
- Added security tests: API route isolation, tenant isolation
- Added auto-generated type files
packages/shared (13 → 24 files):
- Added agents subsystem: selector, parser, interfaces, types
- Added URL normalization utilities
- Added 8 test files covering agents, brand types, entitlements, URL normalization
packages/ui (27 → 379 files):
- Added 200+ component files organized into subsystems:
ai-elements/— 30+ AI interaction componentsbilling/— Billing and plan componentsdocs/— Documentation page componentsform/— Enhanced form components (10 components)layout/— App shell, sidebar, navigation (20+ components)onboarding/— Onboarding modal and stepspricing-efferd/— Pricing section componentspublic/— Public site components: animation, navigation, pages, sections, visualssacred/— Sacred UI components (20+ domain-specific components)settings/— App settings componentssms/— SMS notification componentsvideo/— Video playback components
- Added 8 CSS style files: accessibility, components, focus, icons, motion, spacing, theme, tokens
- Added hooks directory with mobile detection
- Added style audit tests
Docs Expansion (80 → 453 files)
New directories:
docs/archive/— Archived plans and specsdocs/challenges/— 18 feature challenge specificationsdocs/changelog/— Monthly changelog files (MM-YYYY.md format)docs/design/ui-enterprise/— 8-wave UI design system with 100+ specsdocs/marketing/— Marketing feature documentationdocs/plans/— Project plans and proposalsdocs/projects/building-eko-pages/— ~90 page build specificationsdocs/proposals/— Feature proposalsdocs/reports/— Feature reports, analysis, fix reports (~50 reports)docs/rules/— Development rules (changelog, dependencies, GTD, error handling, security, styling, testing)docs/templates/eko-gtd/— GTD methodology templates
Expanded directories:
docs/assessments/— Added 7 new assessment reportsdocs/product/— Added use case indexes, page type definitions, feature docsdocs/specs/— Added 12 phase specifications and confidence scoringdocs/runbooks/— Added team infrastructure, pipeline, schema runbooks
Database Migrations (10 → 84 files)
New migration phases since v14:
- 0011-0026: Features & Security — Seed tracking, page types, billing, security fixes, RLS policies
- 0027-0043: User Features — Folders, favorites, saved items, screenshots, SMS, personas, use cases
- 0044-0056: vNext Migration — Table renames, data consolidation, FK migrations
- 0057-0060: V1 Cleanup — Brand categories, table backups, FK cleanup, legacy table drops
- 0061-0087: Current Development — Domain management, URL-to-page rename, AI cost tracking, deep analysis, performance indexes
Scripts (16 → 88 files)
- Added
scripts/lib/directory with 15 shared utility modules (batch-db, PDL client, concurrency, etc.) - Added
scripts/data/andscripts/fixtures/for test data - Added 55+ new scripts for seeding, backfilling, diagnostics, validation, and enrichment
.claude Infrastructure Expansion
- Added
hooks/directory with 9 automation hooks (migrations index, sensitive data blocking, changelog checks, etc.) - Added
rules/directory with plan governance and migrations index rules - Added
skills/directory with create-migration and deploy skills - Added
session-state.mdfor session tracking - Added
docs-librarian.mdagent (18 → 19 agents)
.github Additions
- Added
CODEOWNERSfor code ownership - Added
PULL_REQUEST_TEMPLATE.mdfor PR standardization - Added
dependabot.ymlfor dependency updates
Brand Assets
- Added
avatars/directory with default-brand.svg and default-page.svg - Added vertical logo variants (logo-dark-mode-vertical.svg, logo-light-mode-vertical.svg)
- Corrected naming: icon-dark.svg → icon-dark-mode.svg, icon-light.svg → icon-light-mode.svg
Root Files
- Added
AGENTS.md— Agent system overview - Added
TODO.md— Project TODO tracking
Package Dependencies
@eko/web
├── @eko/config
├── @eko/db
├── @eko/email
├── @eko/queue
├── @eko/shared
├── @eko/stripe
├── @eko/observability
└── @eko/ui
@eko/admin
├── @eko/config
├── @eko/db
├── @eko/email
├── @eko/shared
├── @eko/stripe
└── @eko/ui
@eko/storybook
└── @eko/ui
@eko/worker-ingest
├── @eko/config
├── @eko/db
├── @eko/queue
├── @eko/shared
└── @eko/observability
@eko/worker-facts
├── @eko/config
├── @eko/db
├── @eko/queue
├── @eko/shared
├── @eko/ai
└── @eko/observability
@eko/worker-validate
├── @eko/config
├── @eko/db
├── @eko/queue
├── @eko/shared
├── @eko/ai
└── @eko/observability
@eko/worker-sms
├── @eko/config
├── @eko/db
├── @eko/shared
└── @eko/observability
@eko/db
├── @eko/config
└── @eko/shared
@eko/queue
├── @eko/config
└── @eko/shared
@eko/ai
├── @eko/config
└── @eko/shared
@eko/email
├── @eko/config
└── @eko/shared
@eko/stripe
├── @eko/config
└── @eko/shared
@eko/observability
└── @eko/config
@eko/config
└── (standalone)
@eko/shared
└── (standalone)
@eko/ui
└── (standalone)