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

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