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.

You get the full codebase. Modify anything, integrate everything, and build outbound infrastructure that works exactly the way your agency does. No feature requests, no workarounds, no waiting on a vendor.

|

Edit

Describe Changes

Regenerate

Send

Benefit 2: Fully Customizable Software

Own the codebase. Customize anything.

You get the full codebase. Modify anything, integrate everything, and build outbound infrastructure that works exactly the way your agency does. No feature requests, no workarounds, no waiting on a vendor.

|

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

Your codebase. Your rules.

Every feature you need to run LinkedIn outreach for clients, built into a system you actually own. Customize workflows, plug in your own tools, and run it exactly how your agency operates. No SaaS vendor deciding what you can and can't do.

Account Safety

Protect your
LinkedIn account

Safe Automation

Most automation tools get accounts flagged because they cut corners on safety. Ornn doesn't. Every LinkedIn account runs inside its own isolated browser profile with a unique fingerprint, paired with a dedicated residential proxy through IPRoyal. Proxy rotation and assignment is fully automated with no manual setup. Add in human-like randomised delays between every action, and LinkedIn sees normal user behaviour, not a bot.

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

Didn't overthink it. Four accounts and it's already cheaper than what we were paying. We're running way more than four.

Olivia Carter

Platform Engineer

Didn't overthink it. Four accounts and it's already cheaper than what we were paying. We're running way more than four.

Olivia Carter

Platform Engineer

We'd had accounts restricted on two different tools before this. It was becoming a client relationship problem.

Ethan Caldwell

Engineering Lead

We'd had accounts restricted on two different tools before this. It was becoming a client relationship problem.

Ethan Caldwell

Engineering Lead

Honestly not thinking about adding a new subscription every time we had a new client was the ticket for us

Maya Rodriguez

SaaS Growth Consultant

Honestly not thinking about adding a new subscription every time we had a new client was the ticket for us

Maya Rodriguez

SaaS Growth Consultant

We were running outbound for 8 clients and every tool charged per account. The maths just didn't work.

Lucas Bennett

Creative Director at LaunchLab

I'd tried white-labelling other tools before. Always hit a wall eventually. Owning the code changes everything.

Sofia Klein

COO at BioScale

We built a LinkedIn post scheduler on top of it for one of our clients in a weekend. Wouldn't have been possible with any other tool.

Daniel Foster

Co-founder at SparkPoint

The margins on LinkedIn outreach as a service used to be thin. They're not anymore.

Aylin Demir

Co-founder at BuildOps

Our dev added a content generation layer to it in about a week. Now we're selling that as a separate service.

Marcus Reed

Product Designer at Connectly

We white-labelled the whole thing and built a custom reporting dashboard on top. Clients think it's our proprietary software. Technically it is

Julia Novak

Head of Marketing at PayNow

The margins on LinkedIn outreach as a service used to be thin. They're not anymore.

Aylin Demir

Co-founder at BuildOps

Our dev added a content generation layer to it in about a week. Now we're selling that as a separate service.

Marcus Reed

Product Designer at Connectly

We white-labelled the whole thing and built a custom reporting dashboard on top. Clients think it's our proprietary software. Technically it is

Julia Novak

Head of Marketing at PayNow

FAQs

Got questions?
We’ve got answers.

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

01

What exactly do I get when I purchase Ornn?

You get the full codebase, including the frontend dashboard, backend automation engine, database infrastructure, and campaign system. You deploy it on your own server and own it outright.

02

Do I need a developer to set it up?

No. If you can follow a setup guide, you can get Ornn running. Most users are up and running within an hour.

03

How many LinkedIn accounts can I run?

Unlimited. There are no per-seat or per-account limits. You pay once and run as many accounts as your infrastructure supports.

04

Will my clients' accounts get flagged or restricted?

Ornn is built with account safety at its core. Every account gets its own dedicated residential proxy via IPRoyal and an isolated browser profile. Combined with human-like delays, LinkedIn sees normal user behaviour.

05

Can I customise or build on top of the codebase?

Yes, that's the point. You own the code so you can modify workflows, add features, integrate your own tools, or white-label it entirely for your clients.

06

How does the pricing compare to other tools?

Most LinkedIn automation tools charge around $79 per seat per month. If you're running 4 or more accounts, Ornn's one-time payment of $3,318 pays for itself within the first year. After that it costs you nothing.

07

Is there a free trial?

No free trial, but you can book a demo to see the full system before purchasing.

01

What's the Partner Program?

You get the full codebase, including the frontend dashboard, backend automation engine, database infrastructure, and campaign system. You deploy it on your own server and own it outright.

02

Do I need a developer to set it up?

No. If you can follow a setup guide, you can get Ornn running. Most users are up and running within an hour.

03

How many LinkedIn accounts can I run?

Unlimited. There are no per-seat or per-account limits. You pay once and run as many accounts as your infrastructure supports.

04

Will my clients' accounts get flagged or restricted?

Ornn is built with account safety at its core. Every account gets its own dedicated residential proxy via IPRoyal and an isolated browser profile. Combined with human-like delays, LinkedIn sees normal user behaviour.

05

Can I customise or build on top of the codebase?

Yes, that's the point. You own the code so you can modify workflows, add features, integrate your own tools, or white-label it entirely for your clients.

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.