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.
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

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent
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
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
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.
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.
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
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

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent

Jack Daniel
Founder - Xavier LLC
Not Sent

Gorge Chapel
Founder - Chapel LLC
Not Sent

Mike Tylor
Founder - CMB LLC
Not Sent

Thomas Shelby
Founder - Shelby.co
Not Sent
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.
