BETA
OWN YOUR LINKEDIN INFRASTRUCTURE

Self-hosted LinkedIn sales software

Ornn is a self-hostable LinkedIn outreach system built for GTM agencies. You get the full codebase - so you can plug it into your own stack, run it on your own infrastructure, and scale across every client without restrictions.

BETA
OWN YOUR LINKEDIN INFRASTRUCTURE

Self-hosted LinkedIn sales software

Ornn is a self-hostable LinkedIn outreach system built for GTM agencies to increase margins. You get the full codebase so you can quickly vibe code custom GTM systems.

Has LinkedIn profile url?

yes / no

Yes

Didn't reply to Instantly campaign

trigger

Write a message

using website info

Update CRM

Send message

and request

Has LinkedIn profile url?

yes / no

Yes

Didn't reply to Instantly campaign

trigger

Write a message

using website info

Update CRM

Send message

and request

Has LinkedIn profile url?

yes / no

Yes

Didn't reply to Instantly campaign

trigger

Write a message

using website info

Update CRM

Send message

and request

Comparison

Fix your LinkedIn outreach margins

Fix your LinkedIn
outreach margins

Most LinkedIn tools charge per account, so scaling outbound means rising costs. With Ornn, you pay once. You get the full codebase, deploy it on your own infrastructure, and run unlimited LinkedIn accounts with no subscriptions or per-seat pricing.

Other tools
Ornn
Unlimited LinkedIn accounts
Unlimited LinkedIn accounts
One-time purchase
One-time
purchase
Full codebase access
Full codebase access
Fully customizable
Fully
customizable
Multiple workspaces
Fully
customizable
All LinkedIn actions
Fully
customizable
AI personalized messages
Fully
customizable
Research leads
Fully
customizable

Benefit 1: Increase Margins

Unlimited senders. No subscriptions

Manage outreach across multiple clients from a single system. Launch campaigns, track activity, and scale outbound without worrying about per-account limits.

Benefit 1: Increase Margins

Unlimited senders. No subscriptions

Manage outreach across multiple clients from a single system. Launch campaigns, track activity, and scale outbound without worrying about per-account limits.

Benefit 1: Increase Margins

Unlimited senders. No subscriptions

Manage outreach across multiple clients from a single system. Launch campaigns, track activity, and scale outbound without worrying about per-account limits.

|

Edit

Describe Changes

Regenerate

Send

Benefit 2: Fully Customizable Software

Own the codebase. Customize anything.

Ornn fits into your GTM stack. Customize workflows, integrate your tools, and run outbound your way - without being boxed in by SaaS limitations.

|

Edit

Describe Changes

Regenerate

Send

Benefit 2: Fully Customizable Software

Own the codebase. Customize anything.

Ornn fits into your GTM stack. Customize workflows, integrate your tools, and run outbound your way - without being boxed in by SaaS limitations.

|

Edit

Describe Changes

Regenerate

Send

Benefit 1: Increase Margins

Own the codebase. Customize anything.

Manage outreach across multiple clients from a single system. Launch campaigns, track activity, and scale outbound without worrying about per-account limits.

Features

The system architecture

Ornn is delivered as a complete, self-hostable codebase - including the frontend, backend, automation engine, and data layer.

Frontend / Webapp

Dashboard for managing accounts, campaigns, and workflows across all clients.

Backend / Automation Engine
  • webapp/├── api/
    │ └── craft-messages-api.ts
    ├── app/
    │ ├── api/
    │ │ └── data/
    │ │ ├── users/
    │ │ │ └── [userId]/
    │ │ └── workspaces/
    │ │ └── [workspaceId]/
    │ ├── campaigns/
    │ │ ├── campaigns-content.jsx
    │ │ ├── campaigns-page-content.jsx
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ └── page.tsx
    │ ├── prospects/
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ ├── page.tsx
    │ │ ├── page_ui_backup.jsx
    │ │ └── prospects-checkbox-fix.css
    │ ├── favicon.ico
    │ ├── globals.css
    │ ├── layout.tsx
    │ └── page.tsx
    ├── assets/
    │ └── data/
    │ ├── countries.js
    │ └── index.ts
    ├── auth/
    │ ├── guard/
    │ │ ├── auth-guard.tsx
    │ │ ├── country-guard.tsx
    │ │ └── index.ts
    │ └── hooks/
    │ ├── index.ts
    │ └── use-auth-context.tsx
    ├── components/
    │ ├── approvals/
    │ │ └── approvals-modal.tsx
    │ ├── automation-status-bar/
    │ │ ├── automation-status-bar.jsx
    │ │ ├── automation-status-bar.tsx
    │ │ └── index.js
    │ ├── campaign-workflow/
    │ │ ├── campaign-workflow-builder.jsx
    │ │ └── workflow-nodes.jsx
    │ ├── company-selection/
    │ │ └── index.tsx
    │ ├── country-select/
    │ │ ├── country-select.jsx
    │ │ └── index.js
    │ ├── custom-icon/
    │ │ └── custom-icon.tsx
    │ ├── desktop-leads-summary/
    │ │ ├── desktop-leads-summary-widget.jsx
    │ │ └── index.js
    │ ├── flag-icon/
    │ │ └── index.tsx
    │ ├── global-header/
    │ │ └── global-header.tsx
    │ ├── iconify/
    │ ├── import-popover/
    │ │ └── import-popover.tsx
    │ ├── lead-chat-popup/
    │ │ ├── lead-chat-popup.jsx
    │ │ └── lead-chat-popup-clean.jsx
    │ ├── lead-info-drawer-hub/
    │ │ ├── index.js
    │ │ └── lead-info-drawer-hub.jsx
    │ ├── left-nav-panel/
    │ │ └── manage-accounts-modal.tsx
    │ ├── mobile-block/
    │ │ └── mobile-block.tsx
    │ ├── mobile-leads-tiles/
    │ │ ├── leads-summary-widget.jsx
    │ │ ├── mobile-leads-tiles.jsx
    │ │ └── mobile-leads-tiles.tsx
    │ ├── modern-leads-table/
    │ │ ├── combined-filter-popover.jsx
    │ │ ├── modern-leads-table.jsx
    │ │ └── modern-leads-table-new.jsx
    │ ├── no-contact-popover/
    │ │ ├── no-contact-popover.jsx
    │ │ └── no-contact-popover.tsx
    │ ├── personalize-popover/
    │ │ ├── index.js
    │ │ └── personalize-popover.jsx
    │ ├── profile-avatar/
    │ │ ├── index.js
    │ │ └── profile-avatar.jsx
    │ ├── rewriting-status-bar/
    │ │ ├── index.js
    │ │ └── rewriting-status-bar.jsx
    │ ├── scraping-status-bar/
    │ │ └── scraping-status-bar.jsx
    │ ├── settings/
    │ │ ├── context/
    │ │ │ ├── index.js
    │ │ │ ├── settings-context.js
    │ │ │ ├── settings-context.tsx
    │ │ │ ├── settings-provider.jsx
    │ │ │ └── use-settings-context.js
    │ │ ├── drawer/
    │ │ │ ├── base-option.jsx
    │ │ │ ├── font-options.jsx
    │ │ │ ├── fullscreen-button.jsx
    │ │ │ ├── index.js
    │ │ │ ├── nav-layout-option.jsx
    │ │ │ ├── presets-options.jsx
    │ │ │ ├── settings-drawer.jsx
    │ │ │ ├── settings-drawer.tsx
    │ │ │ └── styles.jsx
    │ │ ├── accounts-modal.jsx
    │ │ ├── accounts-modal.tsx
    │ │ ├── accounts-nav-item.jsx
    │ │ ├── campaigns-tab-content.jsx
    │ │ ├── config-settings.js
    │ │ ├── find-leads-modal.jsx
    │ │ ├── find-leads-modal.tsx
    │ │ ├── hubspot-integration-content.jsx
    │ │ ├── index.js
    │ │ ├── index.tsx
    │ │ ├── integrations-content.jsx
    │ │ ├── integrations-modal.jsx
    │ │ ├── integrations-modal.tsx
    │ │ ├── palette-picker-content.jsx
    │ │ ├── server.js
    │ │ ├── settings-config.js
    │ │ ├── settings-content.jsx
    │ │ ├── settings-inline-view.jsx
    │ │ ├── settings-inline-view.tsx
    │ │ ├── settings-modal.jsx
    │ │ ├── settings-nav-item.jsx
    │ │ ├── smartlead-integration-content.jsx
    │ │ ├── smartlead-webhook-content.jsx
    │ │ ├── smartlead-webhook-management-content.jsx
    │ │ ├── subscription-content.jsx
    │ │ ├── subscription-pricing-content.jsx
    │ │ ├── theme-modal.jsx
    │ │ ├── theme-modal.tsx
    │ │ ├── webhook-management.jsx
    │ │ └── webhook-management-content.jsx
    │ ├── webhook-management-modal/
    │ │ └── webhook-management-modal.tsx
    │ ├── custom-icon.tsx
    │ ├── iconify.tsx
    │ ├── lead-info-drawer-hub.tsx
    │ ├── left-nav-panel.tsx
    │ ├── manage-accounts-content.tsx
    │ ├── personalize-popover.tsx
    │ └── theme-provider.tsx
    ├── contexts/
    │ ├── drawer-context.tsx
    │ ├── settings-modal-context.tsx
    │ ├── status-bar-context.tsx
    │ ├── user-initiated-context.tsx
    │ └── workspace-context.tsx
    ├── data/
    │ └── index.ts
    ├── hooks/
    │ ├── use-accent.js
    │ ├── use-accent.ts
    │ ├── use-boolean.js
    │ ├── use-boolean.ts
    │ ├── use-cookies.js
    │ ├── useFirestoreData.ts
    │ ├── use-lazy-leads.ts
    │ └── use-leads-data.ts
    ├── layouts/
    │ ├── components/
    │ │ └── trial-expiration-modal.tsx
    │ ├── core/
    │ │ ├── header-section.tsx
    │ │ ├── layout-section.tsx
    │ │ └── main-section.tsx
    │ ├── dashboard/
    │ │ └── css-vars.ts
    │ └── dashboard.tsx
    ├── lib/
    │ ├── firebase.ts
    │ ├── firestore-stubs.ts
    │ └── stripe.ts
    ├── minimal-shared/
    │ ├── hooks.ts
    │ └── utils.ts
    ├── public/
    │ ├── icons/
    │ │ ├── accounts.svg
    │ │ ├── add.svg
    │ │ ├── add_linkedin_account.svg
    │ │ ├── all.svg
    │ │ ├── analytics.svg
    │ │ ├── archive.svg
    │ │ ├── back_arrow.svg
    │ │ ├── banner_image.svg
    │ │ ├── bell.svg
    │ │ ├── briefcase.svg
    │ │ ├── calendar.svg
    │ │ ├── campaign.svg
    │ │ ├── chat.svg
    │ │ ├── check.svg
    │ │ ├── check_circle.svg
    │ │ ├── checklist.svg
    │ │ ├── clock.svg
    │ │ ├── close.svg
    │ │ ├── close2.svg
    │ │ ├── commented.svg
    │ │ ├── commentedall.svg
    │ │ ├── company.svg
    │ │ ├── company_search.svg
    │ │ ├── condition.svg
    │ │ ├── cookies.svg
    │ │ ├── copy.svg
    │ │ ├── crop.svg
    │ │ ├── csv.svg
    │ │ ├── delete.svg
    │ │ ├── dots.svg
    │ │ ├── edit.svg
    │ │ ├── edit_limits.svg
    │ │ ├── education.svg
    │ │ ├── event_attendees.svg
    │ │ ├── export.svg
    │ │ ├── eye.svg
    │ │ ├── eye_closed.svg
    │ │ ├── facebook.svg
    │ │ ├── feed.svg
    │ │ ├── filter.svg
    │ │ ├── find_leads.svg
    │ │ ├── followers.svg
    │ │ ├── globe.svg
    │ │ ├── headline.svg
    │ │ ├── help.svg
    │ │ ├── import.svg
    │ │ ├── industry.svg
    │ │ ├── info.svg
    │ │ ├── integrations.svg
    │ │ ├── leftarrow.svg
    │ │ ├── like_post.svg
    │ │ ├── link.svg
    │ │ ├── linkedin.svg
    │ │ ├── lists.svg
    │ │ ├── location.svg
    │ │ ├── logout.svg
    │ │ ├── maximise.svg
    │ │ ├── menu.svg
    │ │ ├── minimize.svg
    │ │ ├── new_list.svg
    │ │ ├── next_step.svg
    │ │ ├── no_leads_found.svg
    │ │ ├── not_connected.svg
    │ │ ├── notcommnted.svg
    │ │ ├── notrelevant.svg
    │ │ ├── overview.svg
    │ │ ├── palette.svg
    │ │ ├── pause.svg
    │ │ ├── people.svg
    │ │ ├── people_search.svg
    │ │ ├── play
    │ │ ├── play.svg
    │ │ ├── post_commenters.svg
    │ │ ├── post_reactors.svg
    │ │ ├── posts.svg
    │ │ ├── profile_urls.svg
    │ │ ├── proposed.svg
    │ │ ├── proxy.svg
    │ │ ├── reelevant.svg
    │ │ ├── regenerate_message.svg
    │ │ ├── rent_account.svg
    │ │ ├── replied.svg
    │ │ ├── rightarrow.svg
    │ │ ├── save.svg
    │ │ ├── search.svg
    │ │ ├── send.svg
    │ │ ├── settings.svg
    │ │ ├── sidebar.svg
    │ │ ├── star.svg
    │ │ ├── stop.svg
    │ │ ├── subscription.svg
    │ │ ├── sync.svg
    │ │ ├── tagline.svg
    │ │ ├── trending_up.svg
    │ │ ├── twitter.svg
    │ │ ├── unsend.svg
    │ │ ├── upload.svg
    │ │ ├── warning.svg
    │ │ ├── workflow.svg
    │ │ ├── workspaces.svg
    │ │ ├── zoomin.svg
    │ │ └── zoomout.svg
    │ ├── logo/
    │ │ └── logo.svg
    │ └── no_pic.png
    ├── routes/
    │ └── paths.ts
    ├── services/
    │ ├── leads-data-service.ts
    │ ├── linkedin-accounts-cache-service.ts
    │ └── manage-accounts-service.ts
    ├── theme/
    │ ├── components/
    │ │ ├── index.js
    │ │ └── table-overrides.js
    │ ├── core/
    │ │ ├── components/
    │ │ │ ├── accordion.jsx
    │ │ │ ├── alert.jsx
    │ │ │ ├── appbar.jsx
    │ │ │ ├── autocomplete.jsx
    │ │ │ ├── avatar.jsx
    │ │ │ ├── backdrop.jsx
    │ │ │ ├── badge.jsx
    │ │ │ ├── breadcrumbs.jsx
    │ │ │ ├── button.jsx
    │ │ │ ├── button-fab.jsx
    │ │ │ ├── button-group.jsx
    │ │ │ ├── button-toggle.jsx
    │ │ │ ├── card.jsx
    │ │ │ ├── checkbox.jsx
    │ │ │ ├── chip.jsx
    │ │ │ ├── container.js
    │ │ │ ├── dialog.jsx
    │ │ │ ├── drawer.jsx
    │ │ │ ├── form.jsx
    │ │ │ ├── index.js
    │ │ │ ├── link.jsx
    │ │ │ ├── list.jsx
    │ │ │ ├── menu.jsx
    │ │ │ ├── mui-x-data-grid.jsx
    │ │ │ ├── mui-x-date-picker.jsx
    │ │ │ ├── mui-x-tree-view.jsx
    │ │ │ ├── pagination.jsx
    │ │ │ ├── paper.jsx
    │ │ │ ├── popover.jsx
    │ │ │ ├── progress.jsx
    │ │ │ ├── radio.jsx
    │ │ │ ├── rating.jsx
    │ │ │ ├── select.jsx
    │ │ │ ├── skeleton.jsx
    │ │ │ ├── slider.jsx
    │ │ │ ├── stack.jsx
    │ │ │ ├── stepper.jsx
    │ │ │ ├── svg-icon.jsx
    │ │ │ ├── switch.jsx
    │ │ │ ├── table.jsx
    │ │ │ ├── tabs.jsx
    │ │ │ ├── textfield.jsx
    │ │ │ ├── timeline.jsx
    │ │ │ ├── tooltip.jsx
    │ │ │ └── typography.jsx
    │ │ ├── mixins/
    │ │ │ ├── background.js
    │ │ │ ├── border.js
    │ │ │ ├── global-styles-components.js
    │ │ │ ├── index.js
    │ │ │ ├── mixins.js
    │ │ │ └── text.js
    │ │ ├── custom-shadows.js
    │ │ ├── index.js
    │ │ ├── palette.js
    │ │ ├── shadows.js
    │ │ └── typography.js
    │ ├── with-settings/
    │ │ ├── color-presets.js
    │ │ ├── index.js
    │ │ ├── right-to-left.jsx
    │ │ ├── update-components.js
    │ │ └── update-core.js
    │ ├── accent-palette.js
    │ ├── accent-palette.ts
    │ ├── create-classes.js
    │ ├── create-theme.js
    │ ├── index.js
    │ ├── styles.js
    │ ├── theme-config.js
    │ ├── theme-overrides.js
    │ └── theme-provider.jsx
    ├── utils/
    │ └── account-count-service.ts
    ├── .gitignore
    ├── COMPLETE_FILE_LIST.txt
    ├── config-global.ts
    ├── COPIED_COMPONENTS.md
    ├── COPY_PLAN.md
    ├── CURRENT_STATUS.md
    ├── DEPENDENCIES.md
    ├── DIRECTORIES.txt
    ├── DIRECTORY_LISTING.txt
    ├── DIRECTORY_STRUCTURE.md
    ├── DIRECTORY_SUMMARY.md
    ├── DIRECTORY_TREE.txt
    ├── eslint.config.mjs
    ├── EXACT_DEPENDENCIES.md
    ├── FILES_LIST.json
    ├── FOLDER_STRUCTURE.txt
    ├── next.config.ts
    ├── next-env.d.ts
    ├── package.json
    ├── package-lock.json
    ├── PLAN.md
    ├── postcss.config.mjs
    ├── README.md
    ├── STATUS.md
    ├── SUMMARY.md
    └── tsconfig.json

  • webapp/├── api/
    │ └── craft-messages-api.ts
    ├── app/
    │ ├── api/
    │ │ └── data/
    │ │ ├── users/
    │ │ │ └── [userId]/
    │ │ └── workspaces/
    │ │ └── [workspaceId]/
    │ ├── campaigns/
    │ │ ├── campaigns-content.jsx
    │ │ ├── campaigns-page-content.jsx
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ └── page.tsx
    │ ├── prospects/
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ ├── page.tsx
    │ │ ├── page_ui_backup.jsx
    │ │ └── prospects-checkbox-fix.css
    │ ├── favicon.ico
    │ ├── globals.css
    │ ├── layout.tsx
    │ └── page.tsx
    ├── assets/
    │ └── data/
    │ ├── countries.js
    │ └── index.ts
    ├── auth/
    │ ├── guard/
    │ │ ├── auth-guard.tsx
    │ │ ├── country-guard.tsx
    │ │ └── index.ts
    │ └── hooks/
    │ ├── index.ts
    │ └── use-auth-context.tsx
    ├── components/
    │ ├── approvals/
    │ │ └── approvals-modal.tsx
    │ ├── automation-status-bar/
    │ │ ├── automation-status-bar.jsx
    │ │ ├── automation-status-bar.tsx
    │ │ └── index.js
    │ ├── campaign-workflow/
    │ │ ├── campaign-workflow-builder.jsx
    │ │ └── workflow-nodes.jsx
    │ ├── company-selection/
    │ │ └── index.tsx
    │ ├── country-select/
    │ │ ├── country-select.jsx
    │ │ └── index.js
    │ ├── custom-icon/
    │ │ └── custom-icon.tsx
    │ ├── desktop-leads-summary/
    │ │ ├── desktop-leads-summary-widget.jsx
    │ │ └── index.js
    │ ├── flag-icon/
    │ │ └── index.tsx
    │ ├── global-header/
    │ │ └── global-header.tsx
    │ ├── iconify/
    │ ├── import-popover/
    │ │ └── import-popover.tsx
    │ ├── lead-chat-popup/
    │ │ ├── lead-chat-popup.jsx
    │ │ └── lead-chat-popup-clean.jsx
    │ ├── lead-info-drawer-hub/
    │ │ ├── index.js
    │ │ └── lead-info-drawer-hub.jsx
    │ ├── left-nav-panel/
    │ │ └── manage-accounts-modal.tsx
    │ ├── mobile-block/
    │ │ └── mobile-block.tsx
    │ ├── mobile-leads-tiles/
    │ │ ├── leads-summary-widget.jsx
    │ │ ├── mobile-leads-tiles.jsx
    │ │ └── mobile-leads-tiles.tsx
    │ ├── modern-leads-table/
    │ │ ├── combined-filter-popover.jsx
    │ │ ├── modern-leads-table.jsx
    │ │ └── modern-leads-table-new.jsx
    │ ├── no-contact-popover/
    │ │ ├── no-contact-popover.jsx
    │ │ └── no-contact-popover.tsx
    │ ├── personalize-popover/
    │ │ ├── index.js
    │ │ └── personalize-popover.jsx
    │ ├── profile-avatar/
    │ │ ├── index.js
    │ │ └── profile-avatar.jsx
    │ ├── rewriting-status-bar/
    │ │ ├── index.js
    │ │ └── rewriting-status-bar.jsx
    │ ├── scraping-status-bar/
    │ │ └── scraping-status-bar.jsx
    │ ├── settings/
    │ │ ├── context/
    │ │ │ ├── index.js
    │ │ │ ├── settings-context.js
    │ │ │ ├── settings-context.tsx
    │ │ │ ├── settings-provider.jsx
    │ │ │ └── use-settings-context.js
    │ │ ├── drawer/
    │ │ │ ├── base-option.jsx
    │ │ │ ├── font-options.jsx
    │ │ │ ├── fullscreen-button.jsx
    │ │ │ ├── index.js
    │ │ │ ├── nav-layout-option.jsx
    │ │ │ ├── presets-options.jsx
    │ │ │ ├── settings-drawer.jsx
    │ │ │ ├── settings-drawer.tsx
    │ │ │ └── styles.jsx
    │ │ ├── accounts-modal.jsx
    │ │ ├── accounts-modal.tsx
    │ │ ├── accounts-nav-item.jsx
    │ │ ├── campaigns-tab-content.jsx
    │ │ ├── config-settings.js
    │ │ ├── find-leads-modal.jsx
    │ │ ├── find-leads-modal.tsx
    │ │ ├── hubspot-integration-content.jsx
    │ │ ├── index.js
    │ │ ├── index.tsx
    │ │ ├── integrations-content.jsx
    │ │ ├── integrations-modal.jsx
    │ │ ├── integrations-modal.tsx
    │ │ ├── palette-picker-content.jsx
    │ │ ├── server.js
    │ │ ├── settings-config.js
    │ │ ├── settings-content.jsx
    │ │ ├── settings-inline-view.jsx
    │ │ ├── settings-inline-view.tsx
    │ │ ├── settings-modal.jsx
    │ │ ├── settings-nav-item.jsx
    │ │ ├── smartlead-integration-content.jsx
    │ │ ├── smartlead-webhook-content.jsx
    │ │ ├── smartlead-webhook-management-content.jsx
    │ │ ├── subscription-content.jsx
    │ │ ├── subscription-pricing-content.jsx
    │ │ ├── theme-modal.jsx
    │ │ ├── theme-modal.tsx
    │ │ ├── webhook-management.jsx
    │ │ └── webhook-management-content.jsx
    │ ├── webhook-management-modal/
    │ │ └── webhook-management-modal.tsx
    │ ├── custom-icon.tsx
    │ ├── iconify.tsx
    │ ├── lead-info-drawer-hub.tsx
    │ ├── left-nav-panel.tsx
    │ ├── manage-accounts-content.tsx
    │ ├── personalize-popover.tsx
    │ └── theme-provider.tsx
    ├── contexts/
    │ ├── drawer-context.tsx
    │ ├── settings-modal-context.tsx
    │ ├── status-bar-context.tsx
    │ ├── user-initiated-context.tsx
    │ └── workspace-context.tsx
    ├── data/
    │ └── index.ts
    ├── hooks/
    │ ├── use-accent.js
    │ ├── use-accent.ts
    │ ├── use-boolean.js
    │ ├── use-boolean.ts
    │ ├── use-cookies.js
    │ ├── useFirestoreData.ts
    │ ├── use-lazy-leads.ts
    │ └── use-leads-data.ts
    ├── layouts/
    │ ├── components/
    │ │ └── trial-expiration-modal.tsx
    │ ├── core/
    │ │ ├── header-section.tsx
    │ │ ├── layout-section.tsx
    │ │ └── main-section.tsx
    │ ├── dashboard/
    │ │ └── css-vars.ts
    │ └── dashboard.tsx
    ├── lib/
    │ ├── firebase.ts
    │ ├── firestore-stubs.ts
    │ └── stripe.ts
    ├── minimal-shared/
    │ ├── hooks.ts
    │ └── utils.ts
    ├── public/
    │ ├── icons/
    │ │ ├── accounts.svg
    │ │ ├── add.svg
    │ │ ├── add_linkedin_account.svg
    │ │ ├── all.svg
    │ │ ├── analytics.svg
    │ │ ├── archive.svg
    │ │ ├── back_arrow.svg
    │ │ ├── banner_image.svg
    │ │ ├── bell.svg
    │ │ ├── briefcase.svg
    │ │ ├── calendar.svg
    │ │ ├── campaign.svg
    │ │ ├── chat.svg
    │ │ ├── check.svg
    │ │ ├── check_circle.svg
    │ │ ├── checklist.svg
    │ │ ├── clock.svg
    │ │ ├── close.svg
    │ │ ├── close2.svg
    │ │ ├── commented.svg
    │ │ ├── commentedall.svg
    │ │ ├── company.svg
    │ │ ├── company_search.svg
    │ │ ├── condition.svg
    │ │ ├── cookies.svg
    │ │ ├── copy.svg
    │ │ ├── crop.svg
    │ │ ├── csv.svg
    │ │ ├── delete.svg
    │ │ ├── dots.svg
    │ │ ├── edit.svg
    │ │ ├── edit_limits.svg
    │ │ ├── education.svg
    │ │ ├── event_attendees.svg
    │ │ ├── export.svg
    │ │ ├── eye.svg
    │ │ ├── eye_closed.svg
    │ │ ├── facebook.svg
    │ │ ├── feed.svg
    │ │ ├── filter.svg
    │ │ ├── find_leads.svg
    │ │ ├── followers.svg
    │ │ ├── globe.svg
    │ │ ├── headline.svg
    │ │ ├── help.svg
    │ │ ├── import.svg
    │ │ ├── industry.svg
    │ │ ├── info.svg
    │ │ ├── integrations.svg
    │ │ ├── leftarrow.svg
    │ │ ├── like_post.svg
    │ │ ├── link.svg
    │ │ ├── linkedin.svg
    │ │ ├── lists.svg
    │ │ ├── location.svg
    │ │ ├── logout.svg
    │ │ ├── maximise.svg
    │ │ ├── menu.svg
    │ │ ├── minimize.svg
    │ │ ├── new_list.svg
    │ │ ├── next_step.svg
    │ │ ├── no_leads_found.svg
    │ │ ├── not_connected.svg
    │ │ ├── notcommnted.svg
    │ │ ├── notrelevant.svg
    │ │ ├── overview.svg
    │ │ ├── palette.svg
    │ │ ├── pause.svg
    │ │ ├── people.svg
    │ │ ├── people_search.svg
    │ │ ├── play
    │ │ ├── play.svg
    │ │ ├── post_commenters.svg
    │ │ ├── post_reactors.svg
    │ │ ├── posts.svg
    │ │ ├── profile_urls.svg
    │ │ ├── proposed.svg
    │ │ ├── proxy.svg
    │ │ ├── reelevant.svg
    │ │ ├── regenerate_message.svg
    │ │ ├── rent_account.svg
    │ │ ├── replied.svg
    │ │ ├── rightarrow.svg
    │ │ ├── save.svg
    │ │ ├── search.svg
    │ │ ├── send.svg
    │ │ ├── settings.svg
    │ │ ├── sidebar.svg
    │ │ ├── star.svg
    │ │ ├── stop.svg
    │ │ ├── subscription.svg
    │ │ ├── sync.svg
    │ │ ├── tagline.svg
    │ │ ├── trending_up.svg
    │ │ ├── twitter.svg
    │ │ ├── unsend.svg
    │ │ ├── upload.svg
    │ │ ├── warning.svg
    │ │ ├── workflow.svg
    │ │ ├── workspaces.svg
    │ │ ├── zoomin.svg
    │ │ └── zoomout.svg
    │ ├── logo/
    │ │ └── logo.svg
    │ └── no_pic.png
    ├── routes/
    │ └── paths.ts
    ├── services/
    │ ├── leads-data-service.ts
    │ ├── linkedin-accounts-cache-service.ts
    │ └── manage-accounts-service.ts
    ├── theme/
    │ ├── components/
    │ │ ├── index.js
    │ │ └── table-overrides.js
    │ ├── core/
    │ │ ├── components/
    │ │ │ ├── accordion.jsx
    │ │ │ ├── alert.jsx
    │ │ │ ├── appbar.jsx
    │ │ │ ├── autocomplete.jsx
    │ │ │ ├── avatar.jsx
    │ │ │ ├── backdrop.jsx
    │ │ │ ├── badge.jsx
    │ │ │ ├── breadcrumbs.jsx
    │ │ │ ├── button.jsx
    │ │ │ ├── button-fab.jsx
    │ │ │ ├── button-group.jsx
    │ │ │ ├── button-toggle.jsx
    │ │ │ ├── card.jsx
    │ │ │ ├── checkbox.jsx
    │ │ │ ├── chip.jsx
    │ │ │ ├── container.js
    │ │ │ ├── dialog.jsx
    │ │ │ ├── drawer.jsx
    │ │ │ ├── form.jsx
    │ │ │ ├── index.js
    │ │ │ ├── link.jsx
    │ │ │ ├── list.jsx
    │ │ │ ├── menu.jsx
    │ │ │ ├── mui-x-data-grid.jsx
    │ │ │ ├── mui-x-date-picker.jsx
    │ │ │ ├── mui-x-tree-view.jsx
    │ │ │ ├── pagination.jsx
    │ │ │ ├── paper.jsx
    │ │ │ ├── popover.jsx
    │ │ │ ├── progress.jsx
    │ │ │ ├── radio.jsx
    │ │ │ ├── rating.jsx
    │ │ │ ├── select.jsx
    │ │ │ ├── skeleton.jsx
    │ │ │ ├── slider.jsx
    │ │ │ ├── stack.jsx
    │ │ │ ├── stepper.jsx
    │ │ │ ├── svg-icon.jsx
    │ │ │ ├── switch.jsx
    │ │ │ ├── table.jsx
    │ │ │ ├── tabs.jsx
    │ │ │ ├── textfield.jsx
    │ │ │ ├── timeline.jsx
    │ │ │ ├── tooltip.jsx
    │ │ │ └── typography.jsx
    │ │ ├── mixins/
    │ │ │ ├── background.js
    │ │ │ ├── border.js
    │ │ │ ├── global-styles-components.js
    │ │ │ ├── index.js
    │ │ │ ├── mixins.js
    │ │ │ └── text.js
    │ │ ├── custom-shadows.js
    │ │ ├── index.js
    │ │ ├── palette.js
    │ │ ├── shadows.js
    │ │ └── typography.js
    │ ├── with-settings/
    │ │ ├── color-presets.js
    │ │ ├── index.js
    │ │ ├── right-to-left.jsx
    │ │ ├── update-components.js
    │ │ └── update-core.js
    │ ├── accent-palette.js
    │ ├── accent-palette.ts
    │ ├── create-classes.js
    │ ├── create-theme.js
    │ ├── index.js
    │ ├── styles.js
    │ ├── theme-config.js
    │ ├── theme-overrides.js
    │ └── theme-provider.jsx
    ├── utils/
    │ └── account-count-service.ts
    ├── .gitignore
    ├── COMPLETE_FILE_LIST.txt
    ├── config-global.ts
    ├── COPIED_COMPONENTS.md
    ├── COPY_PLAN.md
    ├── CURRENT_STATUS.md
    ├── DEPENDENCIES.md
    ├── DIRECTORIES.txt
    ├── DIRECTORY_LISTING.txt
    ├── DIRECTORY_STRUCTURE.md
    ├── DIRECTORY_SUMMARY.md
    ├── DIRECTORY_TREE.txt
    ├── eslint.config.mjs
    ├── EXACT_DEPENDENCIES.md
    ├── FILES_LIST.json
    ├── FOLDER_STRUCTURE.txt
    ├── next.config.ts
    ├── next-env.d.ts
    ├── package.json
    ├── package-lock.json
    ├── PLAN.md
    ├── postcss.config.mjs
    ├── README.md
    ├── STATUS.md
    ├── SUMMARY.md
    └── tsconfig.json

Frontend / Webapp

Dashboard for managing accounts, campaigns, and workflows across all clients.

Backend / Automation Engine
  • webapp/├── api/
    │ └── craft-messages-api.ts
    ├── app/
    │ ├── api/
    │ │ └── data/
    │ │ ├── users/
    │ │ │ └── [userId]/
    │ │ └── workspaces/
    │ │ └── [workspaceId]/
    │ ├── campaigns/
    │ │ ├── campaigns-content.jsx
    │ │ ├── campaigns-page-content.jsx
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ └── page.tsx
    │ ├── prospects/
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ ├── page.tsx
    │ │ ├── page_ui_backup.jsx
    │ │ └── prospects-checkbox-fix.css
    │ ├── favicon.ico
    │ ├── globals.css
    │ ├── layout.tsx
    │ └── page.tsx
    ├── assets/
    │ └── data/
    │ ├── countries.js
    │ └── index.ts
    ├── auth/
    │ ├── guard/
    │ │ ├── auth-guard.tsx
    │ │ ├── country-guard.tsx
    │ │ └── index.ts
    │ └── hooks/
    │ ├── index.ts
    │ └── use-auth-context.tsx
    ├── components/
    │ ├── approvals/
    │ │ └── approvals-modal.tsx
    │ ├── automation-status-bar/
    │ │ ├── automation-status-bar.jsx
    │ │ ├── automation-status-bar.tsx
    │ │ └── index.js
    │ ├── campaign-workflow/
    │ │ ├── campaign-workflow-builder.jsx
    │ │ └── workflow-nodes.jsx
    │ ├── company-selection/
    │ │ └── index.tsx
    │ ├── country-select/
    │ │ ├── country-select.jsx
    │ │ └── index.js
    │ ├── custom-icon/
    │ │ └── custom-icon.tsx
    │ ├── desktop-leads-summary/
    │ │ ├── desktop-leads-summary-widget.jsx
    │ │ └── index.js
    │ ├── flag-icon/
    │ │ └── index.tsx
    │ ├── global-header/
    │ │ └── global-header.tsx
    │ ├── iconify/
    │ ├── import-popover/
    │ │ └── import-popover.tsx
    │ ├── lead-chat-popup/
    │ │ ├── lead-chat-popup.jsx
    │ │ └── lead-chat-popup-clean.jsx
    │ ├── lead-info-drawer-hub/
    │ │ ├── index.js
    │ │ └── lead-info-drawer-hub.jsx
    │ ├── left-nav-panel/
    │ │ └── manage-accounts-modal.tsx
    │ ├── mobile-block/
    │ │ └── mobile-block.tsx
    │ ├── mobile-leads-tiles/
    │ │ ├── leads-summary-widget.jsx
    │ │ ├── mobile-leads-tiles.jsx
    │ │ └── mobile-leads-tiles.tsx
    │ ├── modern-leads-table/
    │ │ ├── combined-filter-popover.jsx
    │ │ ├── modern-leads-table.jsx
    │ │ └── modern-leads-table-new.jsx
    │ ├── no-contact-popover/
    │ │ ├── no-contact-popover.jsx
    │ │ └── no-contact-popover.tsx
    │ ├── personalize-popover/
    │ │ ├── index.js
    │ │ └── personalize-popover.jsx
    │ ├── profile-avatar/
    │ │ ├── index.js
    │ │ └── profile-avatar.jsx
    │ ├── rewriting-status-bar/
    │ │ ├── index.js
    │ │ └── rewriting-status-bar.jsx
    │ ├── scraping-status-bar/
    │ │ └── scraping-status-bar.jsx
    │ ├── settings/
    │ │ ├── context/
    │ │ │ ├── index.js
    │ │ │ ├── settings-context.js
    │ │ │ ├── settings-context.tsx
    │ │ │ ├── settings-provider.jsx
    │ │ │ └── use-settings-context.js
    │ │ ├── drawer/
    │ │ │ ├── base-option.jsx
    │ │ │ ├── font-options.jsx
    │ │ │ ├── fullscreen-button.jsx
    │ │ │ ├── index.js
    │ │ │ ├── nav-layout-option.jsx
    │ │ │ ├── presets-options.jsx
    │ │ │ ├── settings-drawer.jsx
    │ │ │ ├── settings-drawer.tsx
    │ │ │ └── styles.jsx
    │ │ ├── accounts-modal.jsx
    │ │ ├── accounts-modal.tsx
    │ │ ├── accounts-nav-item.jsx
    │ │ ├── campaigns-tab-content.jsx
    │ │ ├── config-settings.js
    │ │ ├── find-leads-modal.jsx
    │ │ ├── find-leads-modal.tsx
    │ │ ├── hubspot-integration-content.jsx
    │ │ ├── index.js
    │ │ ├── index.tsx
    │ │ ├── integrations-content.jsx
    │ │ ├── integrations-modal.jsx
    │ │ ├── integrations-modal.tsx
    │ │ ├── palette-picker-content.jsx
    │ │ ├── server.js
    │ │ ├── settings-config.js
    │ │ ├── settings-content.jsx
    │ │ ├── settings-inline-view.jsx
    │ │ ├── settings-inline-view.tsx
    │ │ ├── settings-modal.jsx
    │ │ ├── settings-nav-item.jsx
    │ │ ├── smartlead-integration-content.jsx
    │ │ ├── smartlead-webhook-content.jsx
    │ │ ├── smartlead-webhook-management-content.jsx
    │ │ ├── subscription-content.jsx
    │ │ ├── subscription-pricing-content.jsx
    │ │ ├── theme-modal.jsx
    │ │ ├── theme-modal.tsx
    │ │ ├── webhook-management.jsx
    │ │ └── webhook-management-content.jsx
    │ ├── webhook-management-modal/
    │ │ └── webhook-management-modal.tsx
    │ ├── custom-icon.tsx
    │ ├── iconify.tsx
    │ ├── lead-info-drawer-hub.tsx
    │ ├── left-nav-panel.tsx
    │ ├── manage-accounts-content.tsx
    │ ├── personalize-popover.tsx
    │ └── theme-provider.tsx
    ├── contexts/
    │ ├── drawer-context.tsx
    │ ├── settings-modal-context.tsx
    │ ├── status-bar-context.tsx
    │ ├── user-initiated-context.tsx
    │ └── workspace-context.tsx
    ├── data/
    │ └── index.ts
    ├── hooks/
    │ ├── use-accent.js
    │ ├── use-accent.ts
    │ ├── use-boolean.js
    │ ├── use-boolean.ts
    │ ├── use-cookies.js
    │ ├── useFirestoreData.ts
    │ ├── use-lazy-leads.ts
    │ └── use-leads-data.ts
    ├── layouts/
    │ ├── components/
    │ │ └── trial-expiration-modal.tsx
    │ ├── core/
    │ │ ├── header-section.tsx
    │ │ ├── layout-section.tsx
    │ │ └── main-section.tsx
    │ ├── dashboard/
    │ │ └── css-vars.ts
    │ └── dashboard.tsx
    ├── lib/
    │ ├── firebase.ts
    │ ├── firestore-stubs.ts
    │ └── stripe.ts
    ├── minimal-shared/
    │ ├── hooks.ts
    │ └── utils.ts
    ├── public/
    │ ├── icons/
    │ │ ├── accounts.svg
    │ │ ├── add.svg
    │ │ ├── add_linkedin_account.svg
    │ │ ├── all.svg
    │ │ ├── analytics.svg
    │ │ ├── archive.svg
    │ │ ├── back_arrow.svg
    │ │ ├── banner_image.svg
    │ │ ├── bell.svg
    │ │ ├── briefcase.svg
    │ │ ├── calendar.svg
    │ │ ├── campaign.svg
    │ │ ├── chat.svg
    │ │ ├── check.svg
    │ │ ├── check_circle.svg
    │ │ ├── checklist.svg
    │ │ ├── clock.svg
    │ │ ├── close.svg
    │ │ ├── close2.svg
    │ │ ├── commented.svg
    │ │ ├── commentedall.svg
    │ │ ├── company.svg
    │ │ ├── company_search.svg
    │ │ ├── condition.svg
    │ │ ├── cookies.svg
    │ │ ├── copy.svg
    │ │ ├── crop.svg
    │ │ ├── csv.svg
    │ │ ├── delete.svg
    │ │ ├── dots.svg
    │ │ ├── edit.svg
    │ │ ├── edit_limits.svg
    │ │ ├── education.svg
    │ │ ├── event_attendees.svg
    │ │ ├── export.svg
    │ │ ├── eye.svg
    │ │ ├── eye_closed.svg
    │ │ ├── facebook.svg
    │ │ ├── feed.svg
    │ │ ├── filter.svg
    │ │ ├── find_leads.svg
    │ │ ├── followers.svg
    │ │ ├── globe.svg
    │ │ ├── headline.svg
    │ │ ├── help.svg
    │ │ ├── import.svg
    │ │ ├── industry.svg
    │ │ ├── info.svg
    │ │ ├── integrations.svg
    │ │ ├── leftarrow.svg
    │ │ ├── like_post.svg
    │ │ ├── link.svg
    │ │ ├── linkedin.svg
    │ │ ├── lists.svg
    │ │ ├── location.svg
    │ │ ├── logout.svg
    │ │ ├── maximise.svg
    │ │ ├── menu.svg
    │ │ ├── minimize.svg
    │ │ ├── new_list.svg
    │ │ ├── next_step.svg
    │ │ ├── no_leads_found.svg
    │ │ ├── not_connected.svg
    │ │ ├── notcommnted.svg
    │ │ ├── notrelevant.svg
    │ │ ├── overview.svg
    │ │ ├── palette.svg
    │ │ ├── pause.svg
    │ │ ├── people.svg
    │ │ ├── people_search.svg
    │ │ ├── play
    │ │ ├── play.svg
    │ │ ├── post_commenters.svg
    │ │ ├── post_reactors.svg
    │ │ ├── posts.svg
    │ │ ├── profile_urls.svg
    │ │ ├── proposed.svg
    │ │ ├── proxy.svg
    │ │ ├── reelevant.svg
    │ │ ├── regenerate_message.svg
    │ │ ├── rent_account.svg
    │ │ ├── replied.svg
    │ │ ├── rightarrow.svg
    │ │ ├── save.svg
    │ │ ├── search.svg
    │ │ ├── send.svg
    │ │ ├── settings.svg
    │ │ ├── sidebar.svg
    │ │ ├── star.svg
    │ │ ├── stop.svg
    │ │ ├── subscription.svg
    │ │ ├── sync.svg
    │ │ ├── tagline.svg
    │ │ ├── trending_up.svg
    │ │ ├── twitter.svg
    │ │ ├── unsend.svg
    │ │ ├── upload.svg
    │ │ ├── warning.svg
    │ │ ├── workflow.svg
    │ │ ├── workspaces.svg
    │ │ ├── zoomin.svg
    │ │ └── zoomout.svg
    │ ├── logo/
    │ │ └── logo.svg
    │ └── no_pic.png
    ├── routes/
    │ └── paths.ts
    ├── services/
    │ ├── leads-data-service.ts
    │ ├── linkedin-accounts-cache-service.ts
    │ └── manage-accounts-service.ts
    ├── theme/
    │ ├── components/
    │ │ ├── index.js
    │ │ └── table-overrides.js
    │ ├── core/
    │ │ ├── components/
    │ │ │ ├── accordion.jsx
    │ │ │ ├── alert.jsx
    │ │ │ ├── appbar.jsx
    │ │ │ ├── autocomplete.jsx
    │ │ │ ├── avatar.jsx
    │ │ │ ├── backdrop.jsx
    │ │ │ ├── badge.jsx
    │ │ │ ├── breadcrumbs.jsx
    │ │ │ ├── button.jsx
    │ │ │ ├── button-fab.jsx
    │ │ │ ├── button-group.jsx
    │ │ │ ├── button-toggle.jsx
    │ │ │ ├── card.jsx
    │ │ │ ├── checkbox.jsx
    │ │ │ ├── chip.jsx
    │ │ │ ├── container.js
    │ │ │ ├── dialog.jsx
    │ │ │ ├── drawer.jsx
    │ │ │ ├── form.jsx
    │ │ │ ├── index.js
    │ │ │ ├── link.jsx
    │ │ │ ├── list.jsx
    │ │ │ ├── menu.jsx
    │ │ │ ├── mui-x-data-grid.jsx
    │ │ │ ├── mui-x-date-picker.jsx
    │ │ │ ├── mui-x-tree-view.jsx
    │ │ │ ├── pagination.jsx
    │ │ │ ├── paper.jsx
    │ │ │ ├── popover.jsx
    │ │ │ ├── progress.jsx
    │ │ │ ├── radio.jsx
    │ │ │ ├── rating.jsx
    │ │ │ ├── select.jsx
    │ │ │ ├── skeleton.jsx
    │ │ │ ├── slider.jsx
    │ │ │ ├── stack.jsx
    │ │ │ ├── stepper.jsx
    │ │ │ ├── svg-icon.jsx
    │ │ │ ├── switch.jsx
    │ │ │ ├── table.jsx
    │ │ │ ├── tabs.jsx
    │ │ │ ├── textfield.jsx
    │ │ │ ├── timeline.jsx
    │ │ │ ├── tooltip.jsx
    │ │ │ └── typography.jsx
    │ │ ├── mixins/
    │ │ │ ├── background.js
    │ │ │ ├── border.js
    │ │ │ ├── global-styles-components.js
    │ │ │ ├── index.js
    │ │ │ ├── mixins.js
    │ │ │ └── text.js
    │ │ ├── custom-shadows.js
    │ │ ├── index.js
    │ │ ├── palette.js
    │ │ ├── shadows.js
    │ │ └── typography.js
    │ ├── with-settings/
    │ │ ├── color-presets.js
    │ │ ├── index.js
    │ │ ├── right-to-left.jsx
    │ │ ├── update-components.js
    │ │ └── update-core.js
    │ ├── accent-palette.js
    │ ├── accent-palette.ts
    │ ├── create-classes.js
    │ ├── create-theme.js
    │ ├── index.js
    │ ├── styles.js
    │ ├── theme-config.js
    │ ├── theme-overrides.js
    │ └── theme-provider.jsx
    ├── utils/
    │ └── account-count-service.ts
    ├── .gitignore
    ├── COMPLETE_FILE_LIST.txt
    ├── config-global.ts
    ├── COPIED_COMPONENTS.md
    ├── COPY_PLAN.md
    ├── CURRENT_STATUS.md
    ├── DEPENDENCIES.md
    ├── DIRECTORIES.txt
    ├── DIRECTORY_LISTING.txt
    ├── DIRECTORY_STRUCTURE.md
    ├── DIRECTORY_SUMMARY.md
    ├── DIRECTORY_TREE.txt
    ├── eslint.config.mjs
    ├── EXACT_DEPENDENCIES.md
    ├── FILES_LIST.json
    ├── FOLDER_STRUCTURE.txt
    ├── next.config.ts
    ├── next-env.d.ts
    ├── package.json
    ├── package-lock.json
    ├── PLAN.md
    ├── postcss.config.mjs
    ├── README.md
    ├── STATUS.md
    ├── SUMMARY.md
    └── tsconfig.json

  • webapp/├── api/
    │ └── craft-messages-api.ts
    ├── app/
    │ ├── api/
    │ │ └── data/
    │ │ ├── users/
    │ │ │ └── [userId]/
    │ │ └── workspaces/
    │ │ └── [workspaceId]/
    │ ├── campaigns/
    │ │ ├── campaigns-content.jsx
    │ │ ├── campaigns-page-content.jsx
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ └── page.tsx
    │ ├── prospects/
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ ├── page.tsx
    │ │ ├── page_ui_backup.jsx
    │ │ └── prospects-checkbox-fix.css
    │ ├── favicon.ico
    │ ├── globals.css
    │ ├── layout.tsx
    │ └── page.tsx
    ├── assets/
    │ └── data/
    │ ├── countries.js
    │ └── index.ts
    ├── auth/
    │ ├── guard/
    │ │ ├── auth-guard.tsx
    │ │ ├── country-guard.tsx
    │ │ └── index.ts
    │ └── hooks/
    │ ├── index.ts
    │ └── use-auth-context.tsx
    ├── components/
    │ ├── approvals/
    │ │ └── approvals-modal.tsx
    │ ├── automation-status-bar/
    │ │ ├── automation-status-bar.jsx
    │ │ ├── automation-status-bar.tsx
    │ │ └── index.js
    │ ├── campaign-workflow/
    │ │ ├── campaign-workflow-builder.jsx
    │ │ └── workflow-nodes.jsx
    │ ├── company-selection/
    │ │ └── index.tsx
    │ ├── country-select/
    │ │ ├── country-select.jsx
    │ │ └── index.js
    │ ├── custom-icon/
    │ │ └── custom-icon.tsx
    │ ├── desktop-leads-summary/
    │ │ ├── desktop-leads-summary-widget.jsx
    │ │ └── index.js
    │ ├── flag-icon/
    │ │ └── index.tsx
    │ ├── global-header/
    │ │ └── global-header.tsx
    │ ├── iconify/
    │ ├── import-popover/
    │ │ └── import-popover.tsx
    │ ├── lead-chat-popup/
    │ │ ├── lead-chat-popup.jsx
    │ │ └── lead-chat-popup-clean.jsx
    │ ├── lead-info-drawer-hub/
    │ │ ├── index.js
    │ │ └── lead-info-drawer-hub.jsx
    │ ├── left-nav-panel/
    │ │ └── manage-accounts-modal.tsx
    │ ├── mobile-block/
    │ │ └── mobile-block.tsx
    │ ├── mobile-leads-tiles/
    │ │ ├── leads-summary-widget.jsx
    │ │ ├── mobile-leads-tiles.jsx
    │ │ └── mobile-leads-tiles.tsx
    │ ├── modern-leads-table/
    │ │ ├── combined-filter-popover.jsx
    │ │ ├── modern-leads-table.jsx
    │ │ └── modern-leads-table-new.jsx
    │ ├── no-contact-popover/
    │ │ ├── no-contact-popover.jsx
    │ │ └── no-contact-popover.tsx
    │ ├── personalize-popover/
    │ │ ├── index.js
    │ │ └── personalize-popover.jsx
    │ ├── profile-avatar/
    │ │ ├── index.js
    │ │ └── profile-avatar.jsx
    │ ├── rewriting-status-bar/
    │ │ ├── index.js
    │ │ └── rewriting-status-bar.jsx
    │ ├── scraping-status-bar/
    │ │ └── scraping-status-bar.jsx
    │ ├── settings/
    │ │ ├── context/
    │ │ │ ├── index.js
    │ │ │ ├── settings-context.js
    │ │ │ ├── settings-context.tsx
    │ │ │ ├── settings-provider.jsx
    │ │ │ └── use-settings-context.js
    │ │ ├── drawer/
    │ │ │ ├── base-option.jsx
    │ │ │ ├── font-options.jsx
    │ │ │ ├── fullscreen-button.jsx
    │ │ │ ├── index.js
    │ │ │ ├── nav-layout-option.jsx
    │ │ │ ├── presets-options.jsx
    │ │ │ ├── settings-drawer.jsx
    │ │ │ ├── settings-drawer.tsx
    │ │ │ └── styles.jsx
    │ │ ├── accounts-modal.jsx
    │ │ ├── accounts-modal.tsx
    │ │ ├── accounts-nav-item.jsx
    │ │ ├── campaigns-tab-content.jsx
    │ │ ├── config-settings.js
    │ │ ├── find-leads-modal.jsx
    │ │ ├── find-leads-modal.tsx
    │ │ ├── hubspot-integration-content.jsx
    │ │ ├── index.js
    │ │ ├── index.tsx
    │ │ ├── integrations-content.jsx
    │ │ ├── integrations-modal.jsx
    │ │ ├── integrations-modal.tsx
    │ │ ├── palette-picker-content.jsx
    │ │ ├── server.js
    │ │ ├── settings-config.js
    │ │ ├── settings-content.jsx
    │ │ ├── settings-inline-view.jsx
    │ │ ├── settings-inline-view.tsx
    │ │ ├── settings-modal.jsx
    │ │ ├── settings-nav-item.jsx
    │ │ ├── smartlead-integration-content.jsx
    │ │ ├── smartlead-webhook-content.jsx
    │ │ ├── smartlead-webhook-management-content.jsx
    │ │ ├── subscription-content.jsx
    │ │ ├── subscription-pricing-content.jsx
    │ │ ├── theme-modal.jsx
    │ │ ├── theme-modal.tsx
    │ │ ├── webhook-management.jsx
    │ │ └── webhook-management-content.jsx
    │ ├── webhook-management-modal/
    │ │ └── webhook-management-modal.tsx
    │ ├── custom-icon.tsx
    │ ├── iconify.tsx
    │ ├── lead-info-drawer-hub.tsx
    │ ├── left-nav-panel.tsx
    │ ├── manage-accounts-content.tsx
    │ ├── personalize-popover.tsx
    │ └── theme-provider.tsx
    ├── contexts/
    │ ├── drawer-context.tsx
    │ ├── settings-modal-context.tsx
    │ ├── status-bar-context.tsx
    │ ├── user-initiated-context.tsx
    │ └── workspace-context.tsx
    ├── data/
    │ └── index.ts
    ├── hooks/
    │ ├── use-accent.js
    │ ├── use-accent.ts
    │ ├── use-boolean.js
    │ ├── use-boolean.ts
    │ ├── use-cookies.js
    │ ├── useFirestoreData.ts
    │ ├── use-lazy-leads.ts
    │ └── use-leads-data.ts
    ├── layouts/
    │ ├── components/
    │ │ └── trial-expiration-modal.tsx
    │ ├── core/
    │ │ ├── header-section.tsx
    │ │ ├── layout-section.tsx
    │ │ └── main-section.tsx
    │ ├── dashboard/
    │ │ └── css-vars.ts
    │ └── dashboard.tsx
    ├── lib/
    │ ├── firebase.ts
    │ ├── firestore-stubs.ts
    │ └── stripe.ts
    ├── minimal-shared/
    │ ├── hooks.ts
    │ └── utils.ts
    ├── public/
    │ ├── icons/
    │ │ ├── accounts.svg
    │ │ ├── add.svg
    │ │ ├── add_linkedin_account.svg
    │ │ ├── all.svg
    │ │ ├── analytics.svg
    │ │ ├── archive.svg
    │ │ ├── back_arrow.svg
    │ │ ├── banner_image.svg
    │ │ ├── bell.svg
    │ │ ├── briefcase.svg
    │ │ ├── calendar.svg
    │ │ ├── campaign.svg
    │ │ ├── chat.svg
    │ │ ├── check.svg
    │ │ ├── check_circle.svg
    │ │ ├── checklist.svg
    │ │ ├── clock.svg
    │ │ ├── close.svg
    │ │ ├── close2.svg
    │ │ ├── commented.svg
    │ │ ├── commentedall.svg
    │ │ ├── company.svg
    │ │ ├── company_search.svg
    │ │ ├── condition.svg
    │ │ ├── cookies.svg
    │ │ ├── copy.svg
    │ │ ├── crop.svg
    │ │ ├── csv.svg
    │ │ ├── delete.svg
    │ │ ├── dots.svg
    │ │ ├── edit.svg
    │ │ ├── edit_limits.svg
    │ │ ├── education.svg
    │ │ ├── event_attendees.svg
    │ │ ├── export.svg
    │ │ ├── eye.svg
    │ │ ├── eye_closed.svg
    │ │ ├── facebook.svg
    │ │ ├── feed.svg
    │ │ ├── filter.svg
    │ │ ├── find_leads.svg
    │ │ ├── followers.svg
    │ │ ├── globe.svg
    │ │ ├── headline.svg
    │ │ ├── help.svg
    │ │ ├── import.svg
    │ │ ├── industry.svg
    │ │ ├── info.svg
    │ │ ├── integrations.svg
    │ │ ├── leftarrow.svg
    │ │ ├── like_post.svg
    │ │ ├── link.svg
    │ │ ├── linkedin.svg
    │ │ ├── lists.svg
    │ │ ├── location.svg
    │ │ ├── logout.svg
    │ │ ├── maximise.svg
    │ │ ├── menu.svg
    │ │ ├── minimize.svg
    │ │ ├── new_list.svg
    │ │ ├── next_step.svg
    │ │ ├── no_leads_found.svg
    │ │ ├── not_connected.svg
    │ │ ├── notcommnted.svg
    │ │ ├── notrelevant.svg
    │ │ ├── overview.svg
    │ │ ├── palette.svg
    │ │ ├── pause.svg
    │ │ ├── people.svg
    │ │ ├── people_search.svg
    │ │ ├── play
    │ │ ├── play.svg
    │ │ ├── post_commenters.svg
    │ │ ├── post_reactors.svg
    │ │ ├── posts.svg
    │ │ ├── profile_urls.svg
    │ │ ├── proposed.svg
    │ │ ├── proxy.svg
    │ │ ├── reelevant.svg
    │ │ ├── regenerate_message.svg
    │ │ ├── rent_account.svg
    │ │ ├── replied.svg
    │ │ ├── rightarrow.svg
    │ │ ├── save.svg
    │ │ ├── search.svg
    │ │ ├── send.svg
    │ │ ├── settings.svg
    │ │ ├── sidebar.svg
    │ │ ├── star.svg
    │ │ ├── stop.svg
    │ │ ├── subscription.svg
    │ │ ├── sync.svg
    │ │ ├── tagline.svg
    │ │ ├── trending_up.svg
    │ │ ├── twitter.svg
    │ │ ├── unsend.svg
    │ │ ├── upload.svg
    │ │ ├── warning.svg
    │ │ ├── workflow.svg
    │ │ ├── workspaces.svg
    │ │ ├── zoomin.svg
    │ │ └── zoomout.svg
    │ ├── logo/
    │ │ └── logo.svg
    │ └── no_pic.png
    ├── routes/
    │ └── paths.ts
    ├── services/
    │ ├── leads-data-service.ts
    │ ├── linkedin-accounts-cache-service.ts
    │ └── manage-accounts-service.ts
    ├── theme/
    │ ├── components/
    │ │ ├── index.js
    │ │ └── table-overrides.js
    │ ├── core/
    │ │ ├── components/
    │ │ │ ├── accordion.jsx
    │ │ │ ├── alert.jsx
    │ │ │ ├── appbar.jsx
    │ │ │ ├── autocomplete.jsx
    │ │ │ ├── avatar.jsx
    │ │ │ ├── backdrop.jsx
    │ │ │ ├── badge.jsx
    │ │ │ ├── breadcrumbs.jsx
    │ │ │ ├── button.jsx
    │ │ │ ├── button-fab.jsx
    │ │ │ ├── button-group.jsx
    │ │ │ ├── button-toggle.jsx
    │ │ │ ├── card.jsx
    │ │ │ ├── checkbox.jsx
    │ │ │ ├── chip.jsx
    │ │ │ ├── container.js
    │ │ │ ├── dialog.jsx
    │ │ │ ├── drawer.jsx
    │ │ │ ├── form.jsx
    │ │ │ ├── index.js
    │ │ │ ├── link.jsx
    │ │ │ ├── list.jsx
    │ │ │ ├── menu.jsx
    │ │ │ ├── mui-x-data-grid.jsx
    │ │ │ ├── mui-x-date-picker.jsx
    │ │ │ ├── mui-x-tree-view.jsx
    │ │ │ ├── pagination.jsx
    │ │ │ ├── paper.jsx
    │ │ │ ├── popover.jsx
    │ │ │ ├── progress.jsx
    │ │ │ ├── radio.jsx
    │ │ │ ├── rating.jsx
    │ │ │ ├── select.jsx
    │ │ │ ├── skeleton.jsx
    │ │ │ ├── slider.jsx
    │ │ │ ├── stack.jsx
    │ │ │ ├── stepper.jsx
    │ │ │ ├── svg-icon.jsx
    │ │ │ ├── switch.jsx
    │ │ │ ├── table.jsx
    │ │ │ ├── tabs.jsx
    │ │ │ ├── textfield.jsx
    │ │ │ ├── timeline.jsx
    │ │ │ ├── tooltip.jsx
    │ │ │ └── typography.jsx
    │ │ ├── mixins/
    │ │ │ ├── background.js
    │ │ │ ├── border.js
    │ │ │ ├── global-styles-components.js
    │ │ │ ├── index.js
    │ │ │ ├── mixins.js
    │ │ │ └── text.js
    │ │ ├── custom-shadows.js
    │ │ ├── index.js
    │ │ ├── palette.js
    │ │ ├── shadows.js
    │ │ └── typography.js
    │ ├── with-settings/
    │ │ ├── color-presets.js
    │ │ ├── index.js
    │ │ ├── right-to-left.jsx
    │ │ ├── update-components.js
    │ │ └── update-core.js
    │ ├── accent-palette.js
    │ ├── accent-palette.ts
    │ ├── create-classes.js
    │ ├── create-theme.js
    │ ├── index.js
    │ ├── styles.js
    │ ├── theme-config.js
    │ ├── theme-overrides.js
    │ └── theme-provider.jsx
    ├── utils/
    │ └── account-count-service.ts
    ├── .gitignore
    ├── COMPLETE_FILE_LIST.txt
    ├── config-global.ts
    ├── COPIED_COMPONENTS.md
    ├── COPY_PLAN.md
    ├── CURRENT_STATUS.md
    ├── DEPENDENCIES.md
    ├── DIRECTORIES.txt
    ├── DIRECTORY_LISTING.txt
    ├── DIRECTORY_STRUCTURE.md
    ├── DIRECTORY_SUMMARY.md
    ├── DIRECTORY_TREE.txt
    ├── eslint.config.mjs
    ├── EXACT_DEPENDENCIES.md
    ├── FILES_LIST.json
    ├── FOLDER_STRUCTURE.txt
    ├── next.config.ts
    ├── next-env.d.ts
    ├── package.json
    ├── package-lock.json
    ├── PLAN.md
    ├── postcss.config.mjs
    ├── README.md
    ├── STATUS.md
    ├── SUMMARY.md
    └── tsconfig.json

  • Single executable

    Scheduled for tomorrow

  • Send connection requests

    Completed 2 days ago

  • Send messages

    Cancelled by user

  • Follow

    70% prepared

  • View profile

    Completed 2 days ago

  • Like posts

    Completed 2 days ago

  • Scrape connections

    Completed 2 days ago

  • Scrape messages

    Completed 2 days ago

  • Run multi-step sequences

    Completed 2 days ago

  • Human-like random waits

    Completed 2 days ago

  • Schedule management

    Completed 2 days ago

  • Withdraw connection requests

    Completed 2 days ago

Features

All the features you need

All the features
you need

Find Leads

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond. Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Features

Protect your
LinkedIn account

Find Leads

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond. Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond. Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Sending Connection Request..

United Kingdom

IT services

Founders

Draft

Schedule

Sent

Pricing

Save $14,670 on your first year

Full LinkedIn outbound system, delivered as a complete codebase

you can deploy on your own infrastructure.

What you will get

Frontend application (dashboard to manage accounts, campaigns, and workflows)

Backend & automation engine (LinkedIn-safe sequencing, rate limits, execution)

Database & lead infrastructure (store leads, activity, and campaign data)

Outreach campaign engine

Self-hosted deployment

Comparing an annual HeyReach subscription to Ornn's one-time payment
$17,988
HeyReach
$3,318
Ornn

Customer Impact

Built for GTM agencies

“Honestly, I was skeptical. We'd tried scheduling tools before and nothing stuck. But Ornn changed the way we actually think about LinkedIn - it's not a chore anymore. Content goes out, replies come in, and our pipeline reflects it

Sofia Klein

Platform Engineer

%

Connection Rate

%

Connection Rate

%

Reply Rate

%

Reply Rate

Meetings booked per month

Meetings booked per month

hrs

Meetings booked per month

Before Ornn, our LinkedIn activity was all over the place. Some weeks we'd post every day, other weeks nothing. Now there's an actual engine behind it - outreach goes out, it's consistent, and I'm not manually chasing anything.

Olivia Carter

Platform Engineer

Before Ornn, our LinkedIn activity was all over the place. Some weeks we'd post every day, other weeks nothing. Now there's an actual engine behind it - outreach goes out, it's consistent, and I'm not manually chasing anything.

Olivia Carter

Platform Engineer

The "what do I post today" paralysis was real. I'd open LinkedIn, stare at it, then close it. That doesn't happen anymore.

Ethan Caldwell

Engineering Lead

The "what do I post today" paralysis was real. I'd open LinkedIn, stare at it, then close it. That doesn't happen anymore.

Ethan Caldwell

Engineering Lead

I had it set up in under an hour. By the end of that same week I was already seeing activity I hadn't generated myself in months. Genuinely surprised by how fast it moved.

Maya Rodriguez

SaaS Growth Consultant

I had it set up in under an hour. By the end of that same week I was already seeing activity I hadn't generated myself in months. Genuinely surprised by how fast it moved.

Maya Rodriguez

SaaS Growth Consultant

We were paying a ghostwriter and still not posting enough. Now we're putting out content every day that actually sounds like us - and we haven't added a single person to do it.

Sofia Klein

COO at BioScale

We cut three tools and let our VA focus on other things. Ornn just does what all of them were supposed to do, in one place.

Daniel Foster

Co-founder at SparkPoint

LinkedIn always felt like a gamble for us - sometimes it worked, usually it didn't. Now it's a channel we actually rely on. That shift took maybe two weeks.

Aylin Demir

Co-founder at BuildOps

LinkedIn always felt like a gamble for us - sometimes it worked, usually it didn't. Now it's a channel we actually rely on. That shift took maybe two weeks.

Aylin Demir

Co-founder at BuildOps

Our outreach used to feel like cold spam and we knew it. Now it's targeted, it's timed well, and people actually respond. That's a pretty big deal.

Marcus Reed

Product Designer at Connectly

The comment automation was the thing I didn't know I needed. Profile visits literally doubled. It's one of those features that sounds small until you see the numbers.

Julia Novak

Head of Marketing at PayNow

The comment automation was the thing I didn't know I needed. Profile visits literally doubled. It's one of those features that sounds small until you see the numbers.

Julia Novak

Head of Marketing at PayNow

Scale was always the problem with outbound. Either it felt personal and we couldn't do much of it, or we could scale it and it felt robotic. Ornn somehow solved both sides of that.

Ryan Mitchell

Founder at Taskly

We booked three calls last Tuesday while I was asleep. I don't really need to say more than that.

Lina Berg

Product Marketing Manager at DataFuse

Benefit 2: Fully Customizable Software

Deploy in 5 minutes

Ornn fits into your GTM stack. Customize workflows, integrate your tools, and run outbound your way - without being boxed in by SaaS limitations.

No image selected

Setup

Deploy in less
than 5 minutes

Ornn fits into your GTM stack. Customize workflows, integrate your tools, and run outbound your way - without being boxed in by SaaS limitations.

No image selected

FAQs

Got questions?
We’ve got answers.

Still have questions?
Contact us and we’ll help you out.

01

What is the Ornn Partner Program?

It’s a partnership for agencies and GTM experts to earn up to 50% recurring revenue, receive qualified leads, and get certified as LinkedIn Outreach Experts using Ornn.

02

Who is this program for?

Agencies, LinkedIn outreach experts, GTM consultants, and automation specialists who offer outbound or LinkedIn automation to clients.

03

How much can I earn?

Partners earn up to 50% recurring commission on every active customer they refer.

04

Is the revenue recurring?

Yes. You earn commissions for as long as your referred customers stay subscribed.

05

Do you provide leads?

Yes. Qualified partners receive inbound, pre-qualified leads from Ornn.

06

What are the partner requirements?

You must post monthly on LinkedIn, have 5,000+ followers, and offer LinkedIn automation services.

07

How do I apply?

Click “Apply” on the partner page and submit your information for review.

01

What's the Partner Program?

It’s a partnership for agencies and GTM experts to earn up to 50% recurring revenue, receive qualified leads, and get certified as LinkedIn Outreach Experts using Ornn.

02

Who is this program for?

Agencies, LinkedIn outreach experts, GTM consultants, and automation specialists who offer outbound or LinkedIn automation to clients.

03

How much can I earn?

Partners earn up to 50% recurring commission on every active customer they refer.

04

Is the revenue recurring?

Yes. You earn commissions for as long as your referred customers stay subscribed.

05

Do you provide leads?

Yes. Qualified partners receive inbound, pre-qualified leads from Ornn.

Features

The system architecture

Ornn gives you the core LinkedIn automation layer - you get the full codebase to build anything on top of it.

Frontend / Webapp
Backend / Automation Engine
  • webapp/├── api/
    │ └── craft-messages-api.ts
    ├── app/
    │ ├── api/
    │ │ └── data/
    │ │ ├── users/
    │ │ │ └── [userId]/
    │ │ └── workspaces/
    │ │ └── [workspaceId]/
    │ ├── campaigns/
    │ │ ├── campaigns-content.jsx
    │ │ ├── campaigns-page-content.jsx
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ └── page.tsx
    │ ├── prospects/
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ ├── page.tsx
    │ │ ├── page_ui_backup.jsx
    │ │ └── prospects-checkbox-fix.css
    │ ├── favicon.ico
    │ ├── globals.css
    │ ├── layout.tsx
    │ └── page.tsx
    ├── assets/
    │ └── data/
    │ ├── countries.js
    │ └── index.ts
    ├── auth/
    │ ├── guard/
    │ │ ├── auth-guard.tsx
    │ │ ├── country-guard.tsx
    │ │ └── index.ts
    │ └── hooks/
    │ ├── index.ts
    │ └── use-auth-context.tsx
    ├── components/
    │ ├── approvals/
    │ │ └── approvals-modal.tsx
    │ ├── automation-status-bar/
    │ │ ├── automation-status-bar.jsx
    │ │ ├── automation-status-bar.tsx
    │ │ └── index.js
    │ ├── campaign-workflow/
    │ │ ├── campaign-workflow-builder.jsx
    │ │ └── workflow-nodes.jsx
    │ ├── company-selection/
    │ │ └── index.tsx
    │ ├── country-select/
    │ │ ├── country-select.jsx
    │ │ └── index.js
    │ ├── custom-icon/
    │ │ └── custom-icon.tsx
    │ ├── desktop-leads-summary/
    │ │ ├── desktop-leads-summary-widget.jsx
    │ │ └── index.js
    │ ├── flag-icon/
    │ │ └── index.tsx
    │ ├── global-header/
    │ │ └── global-header.tsx
    │ ├── iconify/
    │ ├── import-popover/
    │ │ └── import-popover.tsx
    │ ├── lead-chat-popup/
    │ │ ├── lead-chat-popup.jsx
    │ │ └── lead-chat-popup-clean.jsx
    │ ├── lead-info-drawer-hub/
    │ │ ├── index.js
    │ │ └── lead-info-drawer-hub.jsx
    │ ├── left-nav-panel/
    │ │ └── manage-accounts-modal.tsx
    │ ├── mobile-block/
    │ │ └── mobile-block.tsx
    │ ├── mobile-leads-tiles/
    │ │ ├── leads-summary-widget.jsx
    │ │ ├── mobile-leads-tiles.jsx
    │ │ └── mobile-leads-tiles.tsx
    │ ├── modern-leads-table/
    │ │ ├── combined-filter-popover.jsx
    │ │ ├── modern-leads-table.jsx
    │ │ └── modern-leads-table-new.jsx
    │ ├── no-contact-popover/
    │ │ ├── no-contact-popover.jsx
    │ │ └── no-contact-popover.tsx
    │ ├── personalize-popover/
    │ │ ├── index.js
    │ │ └── personalize-popover.jsx
    │ ├── profile-avatar/
    │ │ ├── index.js
    │ │ └── profile-avatar.jsx
    │ ├── rewriting-status-bar/
    │ │ ├── index.js
    │ │ └── rewriting-status-bar.jsx
    │ ├── scraping-status-bar/
    │ │ └── scraping-status-bar.jsx
    │ ├── settings/
    │ │ ├── context/
    │ │ │ ├── index.js
    │ │ │ ├── settings-context.js
    │ │ │ ├── settings-context.tsx
    │ │ │ ├── settings-provider.jsx
    │ │ │ └── use-settings-context.js
    │ │ ├── drawer/
    │ │ │ ├── base-option.jsx
    │ │ │ ├── font-options.jsx
    │ │ │ ├── fullscreen-button.jsx
    │ │ │ ├── index.js
    │ │ │ ├── nav-layout-option.jsx
    │ │ │ ├── presets-options.jsx
    │ │ │ ├── settings-drawer.jsx
    │ │ │ ├── settings-drawer.tsx
    │ │ │ └── styles.jsx
    │ │ ├── accounts-modal.jsx
    │ │ ├── accounts-modal.tsx
    │ │ ├── accounts-nav-item.jsx
    │ │ ├── campaigns-tab-content.jsx
    │ │ ├── config-settings.js
    │ │ ├── find-leads-modal.jsx
    │ │ ├── find-leads-modal.tsx
    │ │ ├── hubspot-integration-content.jsx
    │ │ ├── index.js
    │ │ ├── index.tsx
    │ │ ├── integrations-content.jsx
    │ │ ├── integrations-modal.jsx
    │ │ ├── integrations-modal.tsx
    │ │ ├── palette-picker-content.jsx
    │ │ ├── server.js
    │ │ ├── settings-config.js
    │ │ ├── settings-content.jsx
    │ │ ├── settings-inline-view.jsx
    │ │ ├── settings-inline-view.tsx
    │ │ ├── settings-modal.jsx
    │ │ ├── settings-nav-item.jsx
    │ │ ├── smartlead-integration-content.jsx
    │ │ ├── smartlead-webhook-content.jsx
    │ │ ├── smartlead-webhook-management-content.jsx
    │ │ ├── subscription-content.jsx
    │ │ ├── subscription-pricing-content.jsx
    │ │ ├── theme-modal.jsx
    │ │ ├── theme-modal.tsx
    │ │ ├── webhook-management.jsx
    │ │ └── webhook-management-content.jsx
    │ ├── webhook-management-modal/
    │ │ └── webhook-management-modal.tsx
    │ ├── custom-icon.tsx
    │ ├── iconify.tsx
    │ ├── lead-info-drawer-hub.tsx
    │ ├── left-nav-panel.tsx
    │ ├── manage-accounts-content.tsx
    │ ├── personalize-popover.tsx
    │ └── theme-provider.tsx
    ├── contexts/
    │ ├── drawer-context.tsx
    │ ├── settings-modal-context.tsx
    │ ├── status-bar-context.tsx
    │ ├── user-initiated-context.tsx
    │ └── workspace-context.tsx
    ├── data/
    │ └── index.ts
    ├── hooks/
    │ ├── use-accent.js
    │ ├── use-accent.ts
    │ ├── use-boolean.js
    │ ├── use-boolean.ts
    │ ├── use-cookies.js
    │ ├── useFirestoreData.ts
    │ ├── use-lazy-leads.ts
    │ └── use-leads-data.ts
    ├── layouts/
    │ ├── components/
    │ │ └── trial-expiration-modal.tsx
    │ ├── core/
    │ │ ├── header-section.tsx
    │ │ ├── layout-section.tsx
    │ │ └── main-section.tsx
    │ ├── dashboard/
    │ │ └── css-vars.ts
    │ └── dashboard.tsx
    ├── lib/
    │ ├── firebase.ts
    │ ├── firestore-stubs.ts
    │ └── stripe.ts
    ├── minimal-shared/
    │ ├── hooks.ts
    │ └── utils.ts
    ├── public/
    │ ├── icons/
    │ │ ├── accounts.svg
    │ │ ├── add.svg
    │ │ ├── add_linkedin_account.svg
    │ │ ├── all.svg
    │ │ ├── analytics.svg
    │ │ ├── archive.svg
    │ │ ├── back_arrow.svg
    │ │ ├── banner_image.svg
    │ │ ├── bell.svg
    │ │ ├── briefcase.svg
    │ │ ├── calendar.svg
    │ │ ├── campaign.svg
    │ │ ├── chat.svg
    │ │ ├── check.svg
    │ │ ├── check_circle.svg
    │ │ ├── checklist.svg
    │ │ ├── clock.svg
    │ │ ├── close.svg
    │ │ ├── close2.svg
    │ │ ├── commented.svg
    │ │ ├── commentedall.svg
    │ │ ├── company.svg
    │ │ ├── company_search.svg
    │ │ ├── condition.svg
    │ │ ├── cookies.svg
    │ │ ├── copy.svg
    │ │ ├── crop.svg
    │ │ ├── csv.svg
    │ │ ├── delete.svg
    │ │ ├── dots.svg
    │ │ ├── edit.svg
    │ │ ├── edit_limits.svg
    │ │ ├── education.svg
    │ │ ├── event_attendees.svg
    │ │ ├── export.svg
    │ │ ├── eye.svg
    │ │ ├── eye_closed.svg
    │ │ ├── facebook.svg
    │ │ ├── feed.svg
    │ │ ├── filter.svg
    │ │ ├── find_leads.svg
    │ │ ├── followers.svg
    │ │ ├── globe.svg
    │ │ ├── headline.svg
    │ │ ├── help.svg
    │ │ ├── import.svg
    │ │ ├── industry.svg
    │ │ ├── info.svg
    │ │ ├── integrations.svg
    │ │ ├── leftarrow.svg
    │ │ ├── like_post.svg
    │ │ ├── link.svg
    │ │ ├── linkedin.svg
    │ │ ├── lists.svg
    │ │ ├── location.svg
    │ │ ├── logout.svg
    │ │ ├── maximise.svg
    │ │ ├── menu.svg
    │ │ ├── minimize.svg
    │ │ ├── new_list.svg
    │ │ ├── next_step.svg
    │ │ ├── no_leads_found.svg
    │ │ ├── not_connected.svg
    │ │ ├── notcommnted.svg
    │ │ ├── notrelevant.svg
    │ │ ├── overview.svg
    │ │ ├── palette.svg
    │ │ ├── pause.svg
    │ │ ├── people.svg
    │ │ ├── people_search.svg
    │ │ ├── play
    │ │ ├── play.svg
    │ │ ├── post_commenters.svg
    │ │ ├── post_reactors.svg
    │ │ ├── posts.svg
    │ │ ├── profile_urls.svg
    │ │ ├── proposed.svg
    │ │ ├── proxy.svg
    │ │ ├── reelevant.svg
    │ │ ├── regenerate_message.svg
    │ │ ├── rent_account.svg
    │ │ ├── replied.svg
    │ │ ├── rightarrow.svg
    │ │ ├── save.svg
    │ │ ├── search.svg
    │ │ ├── send.svg
    │ │ ├── settings.svg
    │ │ ├── sidebar.svg
    │ │ ├── star.svg
    │ │ ├── stop.svg
    │ │ ├── subscription.svg
    │ │ ├── sync.svg
    │ │ ├── tagline.svg
    │ │ ├── trending_up.svg
    │ │ ├── twitter.svg
    │ │ ├── unsend.svg
    │ │ ├── upload.svg
    │ │ ├── warning.svg
    │ │ ├── workflow.svg
    │ │ ├── workspaces.svg
    │ │ ├── zoomin.svg
    │ │ └── zoomout.svg
    │ ├── logo/
    │ │ └── logo.svg
    │ └── no_pic.png
    ├── routes/
    │ └── paths.ts
    ├── services/
    │ ├── leads-data-service.ts
    │ ├── linkedin-accounts-cache-service.ts
    │ └── manage-accounts-service.ts
    ├── theme/
    │ ├── components/
    │ │ ├── index.js
    │ │ └── table-overrides.js
    │ ├── core/
    │ │ ├── components/
    │ │ │ ├── accordion.jsx
    │ │ │ ├── alert.jsx
    │ │ │ ├── appbar.jsx
    │ │ │ ├── autocomplete.jsx
    │ │ │ ├── avatar.jsx
    │ │ │ ├── backdrop.jsx
    │ │ │ ├── badge.jsx
    │ │ │ ├── breadcrumbs.jsx
    │ │ │ ├── button.jsx
    │ │ │ ├── button-fab.jsx
    │ │ │ ├── button-group.jsx
    │ │ │ ├── button-toggle.jsx
    │ │ │ ├── card.jsx
    │ │ │ ├── checkbox.jsx
    │ │ │ ├── chip.jsx
    │ │ │ ├── container.js
    │ │ │ ├── dialog.jsx
    │ │ │ ├── drawer.jsx
    │ │ │ ├── form.jsx
    │ │ │ ├── index.js
    │ │ │ ├── link.jsx
    │ │ │ ├── list.jsx
    │ │ │ ├── menu.jsx
    │ │ │ ├── mui-x-data-grid.jsx
    │ │ │ ├── mui-x-date-picker.jsx
    │ │ │ ├── mui-x-tree-view.jsx
    │ │ │ ├── pagination.jsx
    │ │ │ ├── paper.jsx
    │ │ │ ├── popover.jsx
    │ │ │ ├── progress.jsx
    │ │ │ ├── radio.jsx
    │ │ │ ├── rating.jsx
    │ │ │ ├── select.jsx
    │ │ │ ├── skeleton.jsx
    │ │ │ ├── slider.jsx
    │ │ │ ├── stack.jsx
    │ │ │ ├── stepper.jsx
    │ │ │ ├── svg-icon.jsx
    │ │ │ ├── switch.jsx
    │ │ │ ├── table.jsx
    │ │ │ ├── tabs.jsx
    │ │ │ ├── textfield.jsx
    │ │ │ ├── timeline.jsx
    │ │ │ ├── tooltip.jsx
    │ │ │ └── typography.jsx
    │ │ ├── mixins/
    │ │ │ ├── background.js
    │ │ │ ├── border.js
    │ │ │ ├── global-styles-components.js
    │ │ │ ├── index.js
    │ │ │ ├── mixins.js
    │ │ │ └── text.js
    │ │ ├── custom-shadows.js
    │ │ ├── index.js
    │ │ ├── palette.js
    │ │ ├── shadows.js
    │ │ └── typography.js
    │ ├── with-settings/
    │ │ ├── color-presets.js
    │ │ ├── index.js
    │ │ ├── right-to-left.jsx
    │ │ ├── update-components.js
    │ │ └── update-core.js
    │ ├── accent-palette.js
    │ ├── accent-palette.ts
    │ ├── create-classes.js
    │ ├── create-theme.js
    │ ├── index.js
    │ ├── styles.js
    │ ├── theme-config.js
    │ ├── theme-overrides.js
    │ └── theme-provider.jsx
    ├── utils/
    │ └── account-count-service.ts
    ├── .gitignore
    ├── COMPLETE_FILE_LIST.txt
    ├── config-global.ts
    ├── COPIED_COMPONENTS.md
    ├── COPY_PLAN.md
    ├── CURRENT_STATUS.md
    ├── DEPENDENCIES.md
    ├── DIRECTORIES.txt
    ├── DIRECTORY_LISTING.txt
    ├── DIRECTORY_STRUCTURE.md
    ├── DIRECTORY_SUMMARY.md
    ├── DIRECTORY_TREE.txt
    ├── eslint.config.mjs
    ├── EXACT_DEPENDENCIES.md
    ├── FILES_LIST.json
    ├── FOLDER_STRUCTURE.txt
    ├── next.config.ts
    ├── next-env.d.ts
    ├── package.json
    ├── package-lock.json
    ├── PLAN.md
    ├── postcss.config.mjs
    ├── README.md
    ├── STATUS.md
    ├── SUMMARY.md
    └── tsconfig.json

  • webapp/├── api/
    │ └── craft-messages-api.ts
    ├── app/
    │ ├── api/
    │ │ └── data/
    │ │ ├── users/
    │ │ │ └── [userId]/
    │ │ └── workspaces/
    │ │ └── [workspaceId]/
    │ ├── campaigns/
    │ │ ├── campaigns-content.jsx
    │ │ ├── campaigns-page-content.jsx
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ └── page.tsx
    │ ├── prospects/
    │ │ ├── layout.jsx
    │ │ ├── loading.jsx
    │ │ ├── page.tsx
    │ │ ├── page_ui_backup.jsx
    │ │ └── prospects-checkbox-fix.css
    │ ├── favicon.ico
    │ ├── globals.css
    │ ├── layout.tsx
    │ └── page.tsx
    ├── assets/
    │ └── data/
    │ ├── countries.js
    │ └── index.ts
    ├── auth/
    │ ├── guard/
    │ │ ├── auth-guard.tsx
    │ │ ├── country-guard.tsx
    │ │ └── index.ts
    │ └── hooks/
    │ ├── index.ts
    │ └── use-auth-context.tsx
    ├── components/
    │ ├── approvals/
    │ │ └── approvals-modal.tsx
    │ ├── automation-status-bar/
    │ │ ├── automation-status-bar.jsx
    │ │ ├── automation-status-bar.tsx
    │ │ └── index.js
    │ ├── campaign-workflow/
    │ │ ├── campaign-workflow-builder.jsx
    │ │ └── workflow-nodes.jsx
    │ ├── company-selection/
    │ │ └── index.tsx
    │ ├── country-select/
    │ │ ├── country-select.jsx
    │ │ └── index.js
    │ ├── custom-icon/
    │ │ └── custom-icon.tsx
    │ ├── desktop-leads-summary/
    │ │ ├── desktop-leads-summary-widget.jsx
    │ │ └── index.js
    │ ├── flag-icon/
    │ │ └── index.tsx
    │ ├── global-header/
    │ │ └── global-header.tsx
    │ ├── iconify/
    │ ├── import-popover/
    │ │ └── import-popover.tsx
    │ ├── lead-chat-popup/
    │ │ ├── lead-chat-popup.jsx
    │ │ └── lead-chat-popup-clean.jsx
    │ ├── lead-info-drawer-hub/
    │ │ ├── index.js
    │ │ └── lead-info-drawer-hub.jsx
    │ ├── left-nav-panel/
    │ │ └── manage-accounts-modal.tsx
    │ ├── mobile-block/
    │ │ └── mobile-block.tsx
    │ ├── mobile-leads-tiles/
    │ │ ├── leads-summary-widget.jsx
    │ │ ├── mobile-leads-tiles.jsx
    │ │ └── mobile-leads-tiles.tsx
    │ ├── modern-leads-table/
    │ │ ├── combined-filter-popover.jsx
    │ │ ├── modern-leads-table.jsx
    │ │ └── modern-leads-table-new.jsx
    │ ├── no-contact-popover/
    │ │ ├── no-contact-popover.jsx
    │ │ └── no-contact-popover.tsx
    │ ├── personalize-popover/
    │ │ ├── index.js
    │ │ └── personalize-popover.jsx
    │ ├── profile-avatar/
    │ │ ├── index.js
    │ │ └── profile-avatar.jsx
    │ ├── rewriting-status-bar/
    │ │ ├── index.js
    │ │ └── rewriting-status-bar.jsx
    │ ├── scraping-status-bar/
    │ │ └── scraping-status-bar.jsx
    │ ├── settings/
    │ │ ├── context/
    │ │ │ ├── index.js
    │ │ │ ├── settings-context.js
    │ │ │ ├── settings-context.tsx
    │ │ │ ├── settings-provider.jsx
    │ │ │ └── use-settings-context.js
    │ │ ├── drawer/
    │ │ │ ├── base-option.jsx
    │ │ │ ├── font-options.jsx
    │ │ │ ├── fullscreen-button.jsx
    │ │ │ ├── index.js
    │ │ │ ├── nav-layout-option.jsx
    │ │ │ ├── presets-options.jsx
    │ │ │ ├── settings-drawer.jsx
    │ │ │ ├── settings-drawer.tsx
    │ │ │ └── styles.jsx
    │ │ ├── accounts-modal.jsx
    │ │ ├── accounts-modal.tsx
    │ │ ├── accounts-nav-item.jsx
    │ │ ├── campaigns-tab-content.jsx
    │ │ ├── config-settings.js
    │ │ ├── find-leads-modal.jsx
    │ │ ├── find-leads-modal.tsx
    │ │ ├── hubspot-integration-content.jsx
    │ │ ├── index.js
    │ │ ├── index.tsx
    │ │ ├── integrations-content.jsx
    │ │ ├── integrations-modal.jsx
    │ │ ├── integrations-modal.tsx
    │ │ ├── palette-picker-content.jsx
    │ │ ├── server.js
    │ │ ├── settings-config.js
    │ │ ├── settings-content.jsx
    │ │ ├── settings-inline-view.jsx
    │ │ ├── settings-inline-view.tsx
    │ │ ├── settings-modal.jsx
    │ │ ├── settings-nav-item.jsx
    │ │ ├── smartlead-integration-content.jsx
    │ │ ├── smartlead-webhook-content.jsx
    │ │ ├── smartlead-webhook-management-content.jsx
    │ │ ├── subscription-content.jsx
    │ │ ├── subscription-pricing-content.jsx
    │ │ ├── theme-modal.jsx
    │ │ ├── theme-modal.tsx
    │ │ ├── webhook-management.jsx
    │ │ └── webhook-management-content.jsx
    │ ├── webhook-management-modal/
    │ │ └── webhook-management-modal.tsx
    │ ├── custom-icon.tsx
    │ ├── iconify.tsx
    │ ├── lead-info-drawer-hub.tsx
    │ ├── left-nav-panel.tsx
    │ ├── manage-accounts-content.tsx
    │ ├── personalize-popover.tsx
    │ └── theme-provider.tsx
    ├── contexts/
    │ ├── drawer-context.tsx
    │ ├── settings-modal-context.tsx
    │ ├── status-bar-context.tsx
    │ ├── user-initiated-context.tsx
    │ └── workspace-context.tsx
    ├── data/
    │ └── index.ts
    ├── hooks/
    │ ├── use-accent.js
    │ ├── use-accent.ts
    │ ├── use-boolean.js
    │ ├── use-boolean.ts
    │ ├── use-cookies.js
    │ ├── useFirestoreData.ts
    │ ├── use-lazy-leads.ts
    │ └── use-leads-data.ts
    ├── layouts/
    │ ├── components/
    │ │ └── trial-expiration-modal.tsx
    │ ├── core/
    │ │ ├── header-section.tsx
    │ │ ├── layout-section.tsx
    │ │ └── main-section.tsx
    │ ├── dashboard/
    │ │ └── css-vars.ts
    │ └── dashboard.tsx
    ├── lib/
    │ ├── firebase.ts
    │ ├── firestore-stubs.ts
    │ └── stripe.ts
    ├── minimal-shared/
    │ ├── hooks.ts
    │ └── utils.ts
    ├── public/
    │ ├── icons/
    │ │ ├── accounts.svg
    │ │ ├── add.svg
    │ │ ├── add_linkedin_account.svg
    │ │ ├── all.svg
    │ │ ├── analytics.svg
    │ │ ├── archive.svg
    │ │ ├── back_arrow.svg
    │ │ ├── banner_image.svg
    │ │ ├── bell.svg
    │ │ ├── briefcase.svg
    │ │ ├── calendar.svg
    │ │ ├── campaign.svg
    │ │ ├── chat.svg
    │ │ ├── check.svg
    │ │ ├── check_circle.svg
    │ │ ├── checklist.svg
    │ │ ├── clock.svg
    │ │ ├── close.svg
    │ │ ├── close2.svg
    │ │ ├── commented.svg
    │ │ ├── commentedall.svg
    │ │ ├── company.svg
    │ │ ├── company_search.svg
    │ │ ├── condition.svg
    │ │ ├── cookies.svg
    │ │ ├── copy.svg
    │ │ ├── crop.svg
    │ │ ├── csv.svg
    │ │ ├── delete.svg
    │ │ ├── dots.svg
    │ │ ├── edit.svg
    │ │ ├── edit_limits.svg
    │ │ ├── education.svg
    │ │ ├── event_attendees.svg
    │ │ ├── export.svg
    │ │ ├── eye.svg
    │ │ ├── eye_closed.svg
    │ │ ├── facebook.svg
    │ │ ├── feed.svg
    │ │ ├── filter.svg
    │ │ ├── find_leads.svg
    │ │ ├── followers.svg
    │ │ ├── globe.svg
    │ │ ├── headline.svg
    │ │ ├── help.svg
    │ │ ├── import.svg
    │ │ ├── industry.svg
    │ │ ├── info.svg
    │ │ ├── integrations.svg
    │ │ ├── leftarrow.svg
    │ │ ├── like_post.svg
    │ │ ├── link.svg
    │ │ ├── linkedin.svg
    │ │ ├── lists.svg
    │ │ ├── location.svg
    │ │ ├── logout.svg
    │ │ ├── maximise.svg
    │ │ ├── menu.svg
    │ │ ├── minimize.svg
    │ │ ├── new_list.svg
    │ │ ├── next_step.svg
    │ │ ├── no_leads_found.svg
    │ │ ├── not_connected.svg
    │ │ ├── notcommnted.svg
    │ │ ├── notrelevant.svg
    │ │ ├── overview.svg
    │ │ ├── palette.svg
    │ │ ├── pause.svg
    │ │ ├── people.svg
    │ │ ├── people_search.svg
    │ │ ├── play
    │ │ ├── play.svg
    │ │ ├── post_commenters.svg
    │ │ ├── post_reactors.svg
    │ │ ├── posts.svg
    │ │ ├── profile_urls.svg
    │ │ ├── proposed.svg
    │ │ ├── proxy.svg
    │ │ ├── reelevant.svg
    │ │ ├── regenerate_message.svg
    │ │ ├── rent_account.svg
    │ │ ├── replied.svg
    │ │ ├── rightarrow.svg
    │ │ ├── save.svg
    │ │ ├── search.svg
    │ │ ├── send.svg
    │ │ ├── settings.svg
    │ │ ├── sidebar.svg
    │ │ ├── star.svg
    │ │ ├── stop.svg
    │ │ ├── subscription.svg
    │ │ ├── sync.svg
    │ │ ├── tagline.svg
    │ │ ├── trending_up.svg
    │ │ ├── twitter.svg
    │ │ ├── unsend.svg
    │ │ ├── upload.svg
    │ │ ├── warning.svg
    │ │ ├── workflow.svg
    │ │ ├── workspaces.svg
    │ │ ├── zoomin.svg
    │ │ └── zoomout.svg
    │ ├── logo/
    │ │ └── logo.svg
    │ └── no_pic.png
    ├── routes/
    │ └── paths.ts
    ├── services/
    │ ├── leads-data-service.ts
    │ ├── linkedin-accounts-cache-service.ts
    │ └── manage-accounts-service.ts
    ├── theme/
    │ ├── components/
    │ │ ├── index.js
    │ │ └── table-overrides.js
    │ ├── core/
    │ │ ├── components/
    │ │ │ ├── accordion.jsx
    │ │ │ ├── alert.jsx
    │ │ │ ├── appbar.jsx
    │ │ │ ├── autocomplete.jsx
    │ │ │ ├── avatar.jsx
    │ │ │ ├── backdrop.jsx
    │ │ │ ├── badge.jsx
    │ │ │ ├── breadcrumbs.jsx
    │ │ │ ├── button.jsx
    │ │ │ ├── button-fab.jsx
    │ │ │ ├── button-group.jsx
    │ │ │ ├── button-toggle.jsx
    │ │ │ ├── card.jsx
    │ │ │ ├── checkbox.jsx
    │ │ │ ├── chip.jsx
    │ │ │ ├── container.js
    │ │ │ ├── dialog.jsx
    │ │ │ ├── drawer.jsx
    │ │ │ ├── form.jsx
    │ │ │ ├── index.js
    │ │ │ ├── link.jsx
    │ │ │ ├── list.jsx
    │ │ │ ├── menu.jsx
    │ │ │ ├── mui-x-data-grid.jsx
    │ │ │ ├── mui-x-date-picker.jsx
    │ │ │ ├── mui-x-tree-view.jsx
    │ │ │ ├── pagination.jsx
    │ │ │ ├── paper.jsx
    │ │ │ ├── popover.jsx
    │ │ │ ├── progress.jsx
    │ │ │ ├── radio.jsx
    │ │ │ ├── rating.jsx
    │ │ │ ├── select.jsx
    │ │ │ ├── skeleton.jsx
    │ │ │ ├── slider.jsx
    │ │ │ ├── stack.jsx
    │ │ │ ├── stepper.jsx
    │ │ │ ├── svg-icon.jsx
    │ │ │ ├── switch.jsx
    │ │ │ ├── table.jsx
    │ │ │ ├── tabs.jsx
    │ │ │ ├── textfield.jsx
    │ │ │ ├── timeline.jsx
    │ │ │ ├── tooltip.jsx
    │ │ │ └── typography.jsx
    │ │ ├── mixins/
    │ │ │ ├── background.js
    │ │ │ ├── border.js
    │ │ │ ├── global-styles-components.js
    │ │ │ ├── index.js
    │ │ │ ├── mixins.js
    │ │ │ └── text.js
    │ │ ├── custom-shadows.js
    │ │ ├── index.js
    │ │ ├── palette.js
    │ │ ├── shadows.js
    │ │ └── typography.js
    │ ├── with-settings/
    │ │ ├── color-presets.js
    │ │ ├── index.js
    │ │ ├── right-to-left.jsx
    │ │ ├── update-components.js
    │ │ └── update-core.js
    │ ├── accent-palette.js
    │ ├── accent-palette.ts
    │ ├── create-classes.js
    │ ├── create-theme.js
    │ ├── index.js
    │ ├── styles.js
    │ ├── theme-config.js
    │ ├── theme-overrides.js
    │ └── theme-provider.jsx
    ├── utils/
    │ └── account-count-service.ts
    ├── .gitignore
    ├── COMPLETE_FILE_LIST.txt
    ├── config-global.ts
    ├── COPIED_COMPONENTS.md
    ├── COPY_PLAN.md
    ├── CURRENT_STATUS.md
    ├── DEPENDENCIES.md
    ├── DIRECTORIES.txt
    ├── DIRECTORY_LISTING.txt
    ├── DIRECTORY_STRUCTURE.md
    ├── DIRECTORY_SUMMARY.md
    ├── DIRECTORY_TREE.txt
    ├── eslint.config.mjs
    ├── EXACT_DEPENDENCIES.md
    ├── FILES_LIST.json
    ├── FOLDER_STRUCTURE.txt
    ├── next.config.ts
    ├── next-env.d.ts
    ├── package.json
    ├── package-lock.json
    ├── PLAN.md
    ├── postcss.config.mjs
    ├── README.md
    ├── STATUS.md
    ├── SUMMARY.md
    └── tsconfig.json

Pricing

Save $14,670 on
your first year

Full LinkedIn outbound system, delivered as a complete codebase so you can deploy on your own infrastructure.

What you will get

Frontend application (dashboard to manage messages, campaigns, and accounts)

Backend & automation engine (LinkedIn-safe sequencing, rate limits, execution)

Database & lead infrastructure (store leads, activity, and campaign data)

Outreach campaign engine

Self-hosted deployment

Comparing an annual HeyReach subscription to Ornn's one-time payment

$17,988
HeyReach
$3,318
Ornn
  • Single executable

    Scheduled for tomorrow

  • Send connection requests

    Completed 2 days ago

  • Send messages

    Cancelled by user

  • Follow

    70% prepared

  • View profile

    Completed 2 days ago

  • Like posts

    Completed 2 days ago

  • Scrape connections

    Completed 2 days ago

  • Scrape messages

    Completed 2 days ago

  • Run multi-step sequences

    Completed 2 days ago

  • Human-like random waits

    Completed 2 days ago

  • Schedule management

    Completed 2 days ago

  • Withdraw connection requests

    Completed 2 days ago

Features

All the features
you need

Find Leads

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond. Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Features

Protect your
LinkedIn account

Find Leads

Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond. Build targeted prospect lists directly from LinkedIn. Filter by role, company, location, and activity signals to focus outreach on the people most likely to respond.

Sending Connection Request..

United Kingdom

IT services

Founders

Draft

Schedule

Sent

Fix your LinkedIn outreach margins

Get the full Ornn codebase and run unlimited client accounts on your own infrastructure. Eliminate per-account costs, remove subscriptions, and scale outbound without increasing tool spend.

Fix your LinkedIn outreach margins

Get the full Ornn codebase and run unlimited client accounts on your own infrastructure. Eliminate per-account costs, remove subscriptions, and scale outbound without increasing tool spend.