Build out CRM Research: Requirements and Pricing pages, click-to-toggle info badges
From the CRM Research session: replaces the plain comparison table with a richer one (origin, catch column), adds a full Requirements page (must-have/ nice-to-have, other names looked at, sources) and a new Pricing page, following the same hero-nav + drill-view pattern as Marketing/Sales. Adds click-triggered info-badge popovers for contested/unverified facts (Zoho's EU/DPA tier, Capsule's IMAP support, etc.), replicating the info_popover() pattern from linkedin_analytics as vanilla JS since this dash has no Dash runtime. Also adds CRM_Research_README.md documenting the whole section, and tracks CRM_Research_Notes.md's latest revisions. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b193aaa388
commit
95eac39434
3 files changed
+329
-123
No files matched your search
@@ -1,6 +1,6 @@
|
|||||||
# CRM Requirements & Option Survey — Research Notes
|
# CRM Requirements & Option Survey — Research Notes
|
||||||
|
|
||||||
**Status:** Neutral survey, no recommendation made — per instruction to stay unbiased on solution direction until requirements are locked.
|
**Status:** Neutral survey, no recommendation made — per instruction to stay unbiased on solution direction until requirements are locked. Scope limited to non-US vendors (EU or otherwise, but not US-headquartered or US-owned) for data-sovereignty reasons.
|
||||||
**Date:** 2026-08-17
|
**Date:** 2026-08-17
|
||||||
|
|
||||||
## 1. Requirements
|
## 1. Requirements
|
||||||
@@ -27,49 +27,33 @@
|
|||||||
- Free tier to trial before commitment
|
- Free tier to trial before commitment
|
||||||
- Calendar sync
|
- Calendar sync
|
||||||
|
|
||||||
## 2. Candidate Survey (8 candidates, alphabetical, no ranking)
|
## 2. Candidate Survey (non-US vendors only, alphabetical, no ranking)
|
||||||
|
|
||||||
| CRM | CSV Import | Pipeline | Generic IMAP/SMTP | EU Hosting/GDPR | Self-Hosted | ~Cost, 8 users | Catch |
|
| CRM | Origin | CSV Import | Pipeline | Generic IMAP/SMTP | EU Hosting/GDPR | Self-Hosted | ~Cost, 8 users | Catch |
|
||||||
|---|---|---|---|---|---|---|---|
|
|---|---|---|---|---|---|---|---|---|
|
||||||
| Bitrix24 | Yes | Yes | Yes (on-premise edition) | On-prem = full control; cloud EU region exists | Yes (paid license) | Cloud free tier possible; on-prem is per-instance license | On-prem setup/maintenance is real work; UI is dense |
|
| Capsule CRM | UK | Yes | Yes | **No** — Gmail/Outlook native only, others SMTP-send only | GDPR-oriented, data-center specifics unclear | No | Quote-based | Fails the IMAP must-have — needs a live check before including further |
|
||||||
| Capsule CRM | Yes | Yes | **No** — Gmail/Outlook native only, others SMTP-send only | GDPR-oriented, data-center specifics unclear | No | Quote-based | Contradicts earlier assumption of easy IMAP — needs live trial |
|
| EspoCRM | Ukraine (core dev entity) | Yes | Yes | **Yes**, native, well-documented | Self-hosted = full control; cloud plans exist | Yes, free open-source | Free self-hosted (server cost only) | Needs a server + basic PHP/MySQL upkeep |
|
||||||
| EspoCRM | Yes | Yes | **Yes**, native, well-documented | Self-hosted = full control; cloud plans exist | Yes, free open-source | Free self-hosted (server cost only) | Needs a server + basic PHP/MySQL upkeep |
|
| Odoo CRM | Belgium (EU) | Yes | Yes | Documented generic IMAP/POP3 support (not independently re-verified live) | Community self-hosted = full control; Online EU terms unclear | Yes, Community free | Cloud pricing varies by region | Full suite — easy to over-buy for CRM-only needs |
|
||||||
| Odoo CRM | Yes | Yes | Documented generic IMAP/POP3 support (not independently re-verified live) | Community self-hosted = full control; Online EU terms unclear | Yes, Community free | Cloud ~$9–39/user/mo | Full suite — easy to over-buy for CRM-only needs |
|
| SuiteCRM | UK (Scotland) | Yes | Yes | Yes, standard IMAP config | Self-hosted = full control | Yes, free open-source | Free (server cost only) | Most feature-rich but heaviest of the open-source options |
|
||||||
| Pipedrive | Yes | Yes (core strength) | Yes, but **only Growth plan and above**, not entry Lite plan | Standard SaaS terms, check DPA specifics | No | Growth ~$39/seat/mo × 8 ≈ $312/mo | Cheapest plan lacks the IMAP feature actually needed |
|
| Zoho CRM | India | Yes | Yes | Supported at protocol level (TLS) | EU data center (Netherlands); **sources conflict on whether DPA/EU-region needs Enterprise tier** | No | Mid-tier pricing per seat, varies by plan | Cheapest tier may not include the EU-hosting guarantee needed |
|
||||||
| SuiteCRM | Yes | Yes | Yes, standard IMAP config | Self-hosted = full control | Yes, free open-source | Free (server cost only) | Most feature-rich but heaviest of the open-source options |
|
|
||||||
| Twenty CRM | Yes | Yes | **Partial/immature** — generic IMAP still being built per own GitHub discussions | Self-hosted = full control | Yes, free, active dev | Free (server cost only) | High risk for a Mailcow-only shop today |
|
|
||||||
| Zoho CRM | Yes | Yes | Supported at protocol level (TLS) | EU data center (Netherlands); **sources conflict on whether DPA/EU-region needs Enterprise tier** | No | ~$14–40/user/mo (annual); 8 users ≈ $112–320/mo | Cheapest tier may not include the EU-hosting guarantee needed |
|
|
||||||
|
|
||||||
**Lower-confidence, not fully checked:** Freshsales (custom-email-server config exists, $9–71/user/mo, free-for-3-users), Vtiger (self-host reportedly de-emphasized by vendor), Salesflare/Close (appear Gmail/Outlook-centric, IMAP unclear), Insightly (insufficient detail found).
|
**New EU-native names, now checked against the same requirements:**
|
||||||
|
| CRM | Origin | CSV Import | Pipeline | Generic IMAP/SMTP | EU Hosting/GDPR | Self-Hosted | Free/OSS | Catch |
|
||||||
|
|---|---|---|---|---|---|---|---|---|
|
||||||
|
| CentralStationCRM | Germany (Cologne) | Yes | Yes | **No** — email is BCC-to-proprietary-address or forward-to-inbox, or a Microsoft 365-specific add-on; no generic IMAP/SMTP host+port setup found | Yes — hosted in Frankfurt, online-clickthrough DPA (AVV) provided | No — SaaS-only | Free tier capped at 3 users/200 contacts, not usable at 8 | Fails the IMAP must-have despite being the most "German" option |
|
||||||
|
| Dolibarr | France (non-profit association, GPL) | Yes | Yes | **Yes** — plain IMAP login (host+port+SSL) to any server, OAuth2 optional not required | N/A — self-hosted, so EU hosting/DPA is whatever server you pick; no official DoliCloud DPA found | Yes, GPL, unlimited users | Yes, fully free/open-source | Cleanest sovereignty story and meets every must-have; only cost is your own hosting |
|
||||||
|
| Efficy CRM | Belgium | Yes | Yes (industry-standard feature, not independently verified) | **Unclear** — only Outlook/Gmail/Exchange/Kerio sync confirmed in public docs, no generic IMAP host+port setup found | Unclear — a third-party site claims EU data centers + on-prem/hybrid, no official DPA page located | Yes — cloud, on-prem, and hybrid offered | No — paid only | Needs a direct answer from Efficy sales on IMAP + DPA before it can be trusted |
|
||||||
|
|
||||||
## 2b. Corporate-origin filter (2026-08-17): US-headquartered/US-owned vendors excluded
|
Dolibarr is the strongest fit found among the three; CentralStationCRM and Efficy both fail or leave unresolved the generic-IMAP requirement.
|
||||||
|
|
||||||
Requirement added: exclude vendors headquartered or majority-owned in the US, for data-sovereignty reasons (not just data-center location — corporate/legal exposure).
|
**Lower-confidence, not fully checked:** Vtiger (self-host reportedly de-emphasized by vendor), Salesflare/Close (appear Gmail/Outlook-centric, IMAP unclear), Insightly (insufficient detail found), Freshsales (custom-email-server config exists, but Freshworks/Freshsales ownership needs a sovereignty check before including).
|
||||||
|
|
||||||
**Excluded on this basis:**
|
|
||||||
- **Bitrix24** — Russian-origin dev, commercial arm run via Bitrix, Inc. (Virginia, US) + a Cyprus entity. Double exposure (Russia + US).
|
|
||||||
- **Pipedrive** — HQ New York, US; majority-owned by Vista Equity Partners (US PE, Austin TX). No self-host option to route around this.
|
|
||||||
- **Twenty CRM** — legal entity is Twenty.com PBC, Delaware, US (YC-backed), despite the team being Paris-based. Self-hosting the open-source (AGPL) edition sidesteps the US entity, but the vendor itself is American.
|
|
||||||
- **weclapp** (a candidate surfaced below) — German-founded but now owned by Exact Group (Netherlands), itself majority-owned by KKR (US PE). Not clean despite the German branding.
|
|
||||||
|
|
||||||
**Remain viable (non-US):**
|
|
||||||
- **EspoCRM** — core dev entity Letrium LLC, Chernivtsi, Ukraine; also runs a newer US commercial arm (EspoCRM, Inc.) for cloud/paid support. Self-hosting the open-source edition avoids both entities entirely — cleanest way to keep using it.
|
|
||||||
- **Odoo CRM** — Odoo SA/NV, Ramillies, **Belgium (EU)**, independently owned, not PE-backed. Clean.
|
|
||||||
- **SuiteCRM** — SalesAgility Ltd, Stirling, **Scotland, UK** — non-EU but non-US, independent. Fully open-source/self-hostable — strongest sovereignty story of the original 8.
|
|
||||||
- **Zoho CRM** — Zoho Corporation, Chennai, **India**; privately held by the Vembu family, no VC/PE. Non-US, non-EU.
|
|
||||||
- **Capsule CRM** — Zestia Ltd, Manchester, **UK** — already deprioritized for lacking generic IMAP, but confirmed non-US anyway.
|
|
||||||
|
|
||||||
**New EU-native alternatives surfaced (not on the original 8, worth adding to the survey):**
|
|
||||||
- **CentralStationCRM** — genuinely German (42he GmbH, Cologne), native IMAP/SMTP, cloud-hosted in Germany. Worth checking against the requirements list directly.
|
|
||||||
- **Dolibarr** — French **non-profit association**, not a company at all — no corporate parent, no PE exposure. Fully self-hosted open source. Cleanest sovereignty story found, but needs a features/IMAP check against the requirements list (not yet verified this pass).
|
|
||||||
- **Efficy CRM** (Belgium) — plausible EU option, but current ownership/investor structure not fully verified — confirm before shortlisting.
|
|
||||||
|
|
||||||
## 3. Notes / Caveats
|
## 3. Notes / Caveats
|
||||||
- HubSpot's EU hosting confirmed tier-gated (free = US-only). monday.com confirmed to lack native IMAP/SMTP. Both re-confirm earlier scouting — still dropped.
|
- monday.com confirmed to lack native IMAP/SMTP (Gmail/Outlook only, or third-party connector apps) — dropped on requirements grounds.
|
||||||
- **New finding:** Capsule CRM, often assumed simple = flexible, does not appear to support full generic IMAP — worth a live trial before including or excluding it.
|
- Capsule CRM, often assumed simple = flexible, does not appear to support full generic IMAP — worth a live trial before including or excluding it.
|
||||||
- **Zoho's EU/DPA tier requirement is contested** across sources — get this in writing from Zoho sales before assuming the Standard tier covers it.
|
- Zoho's EU/DPA tier requirement is contested across sources — get this in writing from Zoho sales before assuming the Standard tier covers it.
|
||||||
- EspoCRM cloud pricing figures found were inconsistently formatted — unverified, check EspoCRM's own site directly.
|
- EspoCRM cloud pricing figures found were inconsistently formatted — unverified, check EspoCRM's own site directly.
|
||||||
- Pricing pages change often; the figures above are an August 2026 snapshot, not a quote.
|
- Pricing pages change often; figures above are an August 2026 snapshot, not a quote.
|
||||||
- Self-hosted options shift cost from license fees to server + maintenance time — real even when "free," for a team with no dedicated sysadmin.
|
- Self-hosted options shift cost from license fees to server + maintenance time — real even when "free," for a team with no dedicated sysadmin.
|
||||||
|
|
||||||
**Sources:** [Pipedrive IMAP/SMTP](https://support.pipedrive.com/en/article/how-can-i-find-my-imap-and-smtp-information) · [Pipedrive email sync plans](https://support.pipedrive.com/en/article/email-sync) · [Pipedrive pricing](https://www.forbes.com/advisor/business/software/pipedrive-pricing/) · [Zoho GDPR](https://www.zoho.com/gdpr.html) · [Zoho pricing](https://chatarmin.com/en/blog/zoho-pricing) · [EspoCRM IMAP/SMTP docs](https://docs.espocrm.com/user-guide/imap-smtp-configuration/) · [EspoCRM pricing](https://pricingnow.com/question/espocrm-pricing/) · [Comparison: SuiteCRM/EspoCRM/Vtiger/Odoo](https://www.saasworthy.com/compare/suitecrm-vs-vtiger-vs-espocrm-vs-odoo-crm?pIds=2075%2C2203%2C10771%2C29829) · [Odoo pricing](https://oec.sh/odoo-pricing) · [Twenty CRM IMAP discussion](https://github.com/twentyhq/twenty/discussions/5489) · [Twenty vs EspoCRM](https://use-apify.com/blog/twenty-crm-vs-espocrm-2026) · [HubSpot EU hosting tiers](https://whitehat-seo.co.uk/blog/hubspot-crm-uk-guide) · [monday.com IMAP limitation](https://community.monday.com/t/can-we-use-a-standard-hosted-imap-email-service-for-email-integration-rather-than-microsoft-business-premium/61461) · [Bitrix24 on-premise](https://www.bitrix24.com/self-hosted/) · [Freshsales custom email servers](https://crmsupport.freshworks.com/support/solutions/articles/195170-set-up-emails-on-gmail-microsoft-office-and-other-customer-servers) · [Capsule email integrations](https://capsulecrm.com/blog/bring-outlook-and-gmail-into-capsule-crm/) · [GDPR CRM DSAR guidance](https://usercentrics.com/knowledge-hub/crm-gdpr/)
|
**Sources:** [Zoho GDPR](https://www.zoho.com/gdpr.html) · [Zoho pricing](https://chatarmin.com/en/blog/zoho-pricing) · [EspoCRM IMAP/SMTP docs](https://docs.espocrm.com/user-guide/imap-smtp-configuration/) · [EspoCRM pricing](https://pricingnow.com/question/espocrm-pricing/) · [Comparison: SuiteCRM/EspoCRM/Vtiger/Odoo](https://www.saasworthy.com/compare/suitecrm-vs-vtiger-vs-espocrm-vs-odoo-crm?pIds=2075%2C2203%2C10771%2C29829) · [Odoo pricing](https://oec.sh/odoo-pricing) · [monday.com IMAP limitation](https://community.monday.com/t/can-we-use-a-standard-hosted-imap-email-service-for-email-integration-rather-than-microsoft-business-premium/61461) · [Capsule email integrations](https://capsulecrm.com/blog/bring-outlook-and-gmail-into-capsule-crm/) · [GDPR CRM DSAR guidance](https://usercentrics.com/knowledge-hub/crm-gdpr/)
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
# CRM Research
|
||||||
|
|
||||||
|
Research into what CRM (if any) TXproducts should get — requirements first,
|
||||||
|
no product chosen yet. Lives in the Sales & Marketing dash's CRM Research
|
||||||
|
tab (localhost:8500), as a sixth sidebar section below a divider, separate
|
||||||
|
from the five main department branches.
|
||||||
|
|
||||||
|
## Where it lives
|
||||||
|
|
||||||
|
Unlike Opportunities (see `../opportunities/README.md`), this section is
|
||||||
|
authored directly inside `index.html`, not fetched as its own module. It's a
|
||||||
|
three-view drill-down under `#tab-crm-research`, using the same shared
|
||||||
|
`DRILL_CONFIG` / `setDrillView` machinery as Marketing and Sales:
|
||||||
|
|
||||||
|
- **CRM Research** (`crm-root`, the default view) — the main candidate
|
||||||
|
comparison table: 8 non-US vendors, checked against CSV import, sales
|
||||||
|
pipeline, generic IMAP/SMTP, EU hosting/GDPR, self-hosting, and cost.
|
||||||
|
- **Requirements** (`notes`, reached via the hero-bar "Requirements" pill) —
|
||||||
|
the full must-have/nice-to-have list, "other names looked at" but not
|
||||||
|
fully checked, and sources.
|
||||||
|
- **Pricing** (`pricing`, reached via the hero-bar "Pricing" pill) — cost
|
||||||
|
and free-tier status only, pulled from the same survey.
|
||||||
|
|
||||||
|
`address_book/CRM_Research_Notes.md` is the underlying research doc these
|
||||||
|
views are built from — same data, fuller prose reasoning per candidate. It
|
||||||
|
isn't linked from the page anymore (all its content now lives inline in the
|
||||||
|
tabs above); it stays as the working notes file for whoever continues this
|
||||||
|
research.
|
||||||
|
|
||||||
|
## Why non-US vendors only
|
||||||
|
|
||||||
|
TXproducts requires a signed EU DPA and wants to avoid US corporate/legal
|
||||||
|
exposure (not just data-center location) — so any US-headquartered or
|
||||||
|
US-owned vendor is excluded from the survey entirely, not just flagged.
|
||||||
|
See `CRM_Research_Notes.md` for the full reasoning on each candidate's
|
||||||
|
corporate origin.
|
||||||
|
|
||||||
|
## Caveats: click-triggered info badges, not hover tooltips
|
||||||
|
|
||||||
|
A handful of facts in the tables are contested, unverified, or need a live
|
||||||
|
vendor check (e.g. Zoho's EU/DPA tier requirement, Capsule's IMAP support,
|
||||||
|
EspoCRM's inconsistent cloud pricing). These show as a yellow "?" badge next
|
||||||
|
to the relevant CRM's name or page title — click to open a popover, click
|
||||||
|
elsewhere to close it.
|
||||||
|
|
||||||
|
This is the same pattern already used in `~/Documents/linkedin_analytics/`
|
||||||
|
(the `info_popover()` helper in `app.py`, replicated as vanilla JS/CSS here
|
||||||
|
since this dash has no Dash/React runtime): `.crm-info-badge` is the yellow
|
||||||
|
circle, `.crm-popover` is the popup, and `crmTogglePopover()` in `index.html`
|
||||||
|
wires them together. Deliberately **not** the native HTML `title` attribute
|
||||||
|
— that has a slow, OS-controlled hover delay; this opens instantly on click.
|
||||||
|
|
||||||
|
To add a new caveat: add a badge (`<span class="crm-info-badge"
|
||||||
|
id="crm-info-X" onclick="crmTogglePopover(this)">?</span>`) next to whatever
|
||||||
|
it's about, and a matching `<div class="crm-popover"
|
||||||
|
data-target="crm-info-X">...</div>` anywhere inside the same drill-view.
|
||||||
|
|
||||||
|
## Updating the data
|
||||||
|
|
||||||
|
No build step — the candidate tables are plain HTML directly in
|
||||||
|
`index.html`, hand-maintained alongside `CRM_Research_Notes.md`. When a
|
||||||
|
candidate's status changes (e.g. a live trial resolves one of the "unclear"
|
||||||
|
marks), update both: the relevant `<td>` in whichever view(s) show that
|
||||||
|
candidate, and the corresponding row in `CRM_Research_Notes.md`.
|
||||||
+243
-85
@@ -267,20 +267,36 @@
|
|||||||
max-width: none; margin: 0 0 20px;
|
max-width: none; margin: 0 0 20px;
|
||||||
}
|
}
|
||||||
.crm-table-wrap { overflow-x: auto; margin-bottom: 10px; }
|
.crm-table-wrap { overflow-x: auto; margin-bottom: 10px; }
|
||||||
.crm-table { border-collapse: collapse; width: 100%; font-size: 0.85rem; }
|
.crm-note { font-size: 0.78rem; color: #6b7a8d; margin: 10px 0 20px; }
|
||||||
.crm-table th, .crm-table td { padding: 10px 12px; border-bottom: 1px solid #e0e7ef; text-align: left; white-space: nowrap; }
|
.crm-info-badge {
|
||||||
.crm-table th {
|
display: inline-flex; align-items: center; justify-content: center;
|
||||||
color: #1b3a5c; font-weight: 800; font-size: 0.72rem;
|
width: 22px; height: 22px; border-radius: 50%;
|
||||||
|
background-color: #FFD600; color: #1a2533; font-size: 0.8rem; font-weight: 800;
|
||||||
|
cursor: pointer; margin-left: 8px; vertical-align: middle;
|
||||||
|
box-shadow: 0 1px 4px rgba(0,0,0,0.3); border: 2px solid white;
|
||||||
|
}
|
||||||
|
.crm-popover {
|
||||||
|
position: fixed; z-index: 2000; background: white; border: 1px solid #ccc;
|
||||||
|
border-radius: 6px; box-shadow: 0 4px 16px rgba(0,0,0,0.15); max-width: 340px; padding: 12px 14px;
|
||||||
|
font-size: 0.82rem; color: #1a2533; line-height: 1.55; display: none;
|
||||||
|
}
|
||||||
|
#tab-crm-research h3 { margin: 26px 0 10px; font-size: 1.02rem; font-weight: 800; color: #1b3a5c; }
|
||||||
|
#tab-crm-research .req-status { font-size: 0.82rem; color: #6b7a8d; margin: 0 0 20px; }
|
||||||
|
#tab-crm-research .req-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 6px; }
|
||||||
|
#tab-crm-research .req-cols h4 {
|
||||||
|
margin: 0 0 8px; font-size: 0.76rem; font-weight: 800;
|
||||||
|
text-transform: uppercase; letter-spacing: 0.04em; color: #6b7a8d;
|
||||||
|
}
|
||||||
|
#tab-crm-research ul.req-list { margin: 0; padding-left: 18px; font-size: 0.88rem; line-height: 1.6; color: #3d4c5c; }
|
||||||
|
#tab-crm-research ul.req-list li { margin-bottom: 4px; }
|
||||||
|
#tab-crm-research ul.plain-list { margin: 0 0 4px; padding-left: 18px; font-size: 0.88rem; line-height: 1.65; color: #3d4c5c; }
|
||||||
|
#tab-crm-research ul.plain-list li { margin-bottom: 8px; }
|
||||||
|
.crm-detail-table { border-collapse: collapse; width: 100%; font-size: 0.83rem; margin-bottom: 8px; }
|
||||||
|
.crm-detail-table th, .crm-detail-table td { padding: 10px 12px; border-bottom: 1px solid #e0e7ef; text-align: left; vertical-align: top; line-height: 1.5; }
|
||||||
|
.crm-detail-table th {
|
||||||
|
color: #1b3a5c; font-weight: 800; font-size: 0.68rem;
|
||||||
text-transform: uppercase; letter-spacing: 0.04em; background: #f7f9fc;
|
text-transform: uppercase; letter-spacing: 0.04em; background: #f7f9fc;
|
||||||
}
|
}
|
||||||
.crm-table td.crm-feature { text-align: center; }
|
|
||||||
.crm-table tbody tr:hover td { background: #f7f9fc; }
|
|
||||||
.crm-company a { color: #1a2533; font-weight: 700; text-decoration: none; }
|
|
||||||
.crm-company a:hover { color: #2d6a9f; text-decoration: underline; }
|
|
||||||
.crm-company .crm-site { display: block; font-size: 0.75rem; font-weight: 500; color: #6b7a8d; margin-top: 2px; }
|
|
||||||
.crm-check { color: #1a8a60; font-weight: 800; font-size: 1rem; }
|
|
||||||
.crm-x { color: #b3261e; font-weight: 800; font-size: 1rem; }
|
|
||||||
.crm-note { font-size: 0.78rem; color: #6b7a8d; margin: 10px 0 20px; }
|
|
||||||
|
|
||||||
.drill-crumbs {
|
.drill-crumbs {
|
||||||
font-size: 0.78rem;
|
font-size: 0.78rem;
|
||||||
@@ -806,6 +822,9 @@
|
|||||||
<div class="hero-nav" id="hero-nav-crm-requirements" style="display:none;">
|
<div class="hero-nav" id="hero-nav-crm-requirements" style="display:none;">
|
||||||
<button class="hero-nav-btn" id="hero-nav-crm-requirements-btn">Requirements</button>
|
<button class="hero-nav-btn" id="hero-nav-crm-requirements-btn">Requirements</button>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="hero-nav" id="hero-nav-crm-pricing" style="display:none;">
|
||||||
|
<button class="hero-nav-btn" id="hero-nav-crm-pricing-btn">Pricing</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -4531,107 +4550,218 @@
|
|||||||
<p class="narrative">No CRM exists at TXproducts today — contacts and outreach are scattered across Excel sheets, the LinkedIn follower list, and the conference mail-merge sheet. This page tracks research into what a CRM needs to support before any product is chosen. No recommendation has been made; non-US vendors only, checked against the must-have requirements below.</p>
|
<p class="narrative">No CRM exists at TXproducts today — contacts and outreach are scattered across Excel sheets, the LinkedIn follower list, and the conference mail-merge sheet. This page tracks research into what a CRM needs to support before any product is chosen. No recommendation has been made; non-US vendors only, checked against the must-have requirements below.</p>
|
||||||
|
|
||||||
<div class="crm-table-wrap">
|
<div class="crm-table-wrap">
|
||||||
<table class="crm-table">
|
<table class="crm-detail-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Company</th>
|
<th>CRM</th><th>Origin</th><th>CSV Import</th><th>Pipeline</th>
|
||||||
<th>CSV/Excel Import</th>
|
<th>Generic IMAP/SMTP</th><th>EU Hosting/GDPR</th>
|
||||||
<th>Sales Pipeline</th>
|
|
||||||
<th>Generic IMAP/SMTP</th>
|
|
||||||
<th>EU Hosting + DPA</th>
|
|
||||||
<th>Self-Hosted</th>
|
<th>Self-Hosted</th>
|
||||||
<th>Free / Open-Source</th>
|
<th>Cost / Free Tier</th>
|
||||||
|
<th>Catch</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://capsulecrm.com" target="_blank" rel="noopener">Capsule CRM</a><span class="crm-site">capsulecrm.com</span></td>
|
<td><a href="https://capsulecrm.com" target="_blank" rel="noopener">Capsule CRM</a><span class="crm-info-badge" id="crm-info-capsule" onclick="crmTogglePopover(this)">?</span></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>UK</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>No — Gmail/Outlook native only, others SMTP-send only</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
<td>GDPR-oriented, data-center specifics unclear</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span><sup>*</sup></td>
|
<td>No</td><td>Quote-based</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
<td>Fails the IMAP must-have — needs a live check before including further</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://www.espocrm.com" target="_blank" rel="noopener">EspoCRM</a><span class="crm-site">espocrm.com</span></td>
|
<td><a href="https://www.espocrm.com" target="_blank" rel="noopener">EspoCRM</a><span class="crm-info-badge" id="crm-info-espocrm-root" onclick="crmTogglePopover(this)">?</span></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Ukraine (core dev entity)</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Yes, native, well-documented</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Self-hosted = full control; cloud plans exist</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Yes, free open-source</td><td>Free self-hosted (server cost only)</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Needs a server + basic PHP/MySQL upkeep</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://www.odoo.com/app/crm" target="_blank" rel="noopener">Odoo CRM</a><span class="crm-site">odoo.com</span></td>
|
<td><a href="https://www.odoo.com/app/crm" target="_blank" rel="noopener">Odoo CRM</a></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Belgium (EU)</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Documented generic IMAP/POP3 support (not independently re-verified live)</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span><sup>*</sup></td>
|
<td>Community self-hosted = full control; Online EU terms unclear</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span><sup>‡</sup></td>
|
<td>Yes, Community free</td><td>Cloud pricing varies by region</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Full suite — easy to over-buy for CRM-only needs</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://suitecrm.com" target="_blank" rel="noopener">SuiteCRM</a><span class="crm-site">suitecrm.com</span></td>
|
<td><a href="https://suitecrm.com" target="_blank" rel="noopener">SuiteCRM</a></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>UK (Scotland)</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Yes, standard IMAP config</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Self-hosted = full control</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span><sup>‡</sup></td>
|
<td>Yes, free open-source</td><td>Free (server cost only)</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Most feature-rich but heaviest of the open-source options</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://www.zoho.com/crm/" target="_blank" rel="noopener">Zoho CRM</a><span class="crm-site">zoho.com/crm</span></td>
|
<td><a href="https://www.zoho.com/crm/" target="_blank" rel="noopener">Zoho CRM</a><span class="crm-info-badge" id="crm-info-zoho" onclick="crmTogglePopover(this)">?</span></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>India</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Supported at protocol level (TLS)</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>EU data center (Netherlands); sources conflict on whether DPA/EU-region needs Enterprise tier</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span><sup>*</sup></td>
|
<td>No</td><td>Mid-tier pricing per seat, varies by plan</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
<td>Cheapest tier may not include the EU-hosting guarantee needed</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span><sup>†</sup></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://centralstationcrm.de" target="_blank" rel="noopener">CentralStationCRM</a><span class="crm-site">centralstationcrm.de</span></td>
|
<td><a href="https://centralstationcrm.de" target="_blank" rel="noopener">CentralStationCRM</a></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Germany (Cologne)</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>No — email is BCC-to-proprietary-address or forward-to-inbox, or a Microsoft 365-specific add-on; no generic IMAP/SMTP host+port setup found</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
<td>Yes — hosted in Frankfurt, online-clickthrough DPA (AVV) provided</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>No — SaaS-only</td><td>Free tier capped at 3 users/200 contacts, not usable at 8</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
<td>Fails the IMAP must-have despite being the most "German" option</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span><sup>†</sup></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://www.dolibarr.org" target="_blank" rel="noopener">Dolibarr</a><span class="crm-site">dolibarr.org</span></td>
|
<td><a href="https://www.dolibarr.org" target="_blank" rel="noopener">Dolibarr</a></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>France (non-profit association, GPL)</td><td>Yes</td><td>Yes</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Yes — plain IMAP login (host+port+SSL) to any server, OAuth2 optional not required</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>N/A — self-hosted, so EU hosting/DPA is whatever server you pick; no official DoliCloud DPA found</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span><sup>‡</sup></td>
|
<td>Yes, GPL, unlimited users</td><td>Free, fully open-source</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Cleanest sovereignty story and meets every must-have; only cost is your own hosting</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="crm-company"><a href="https://www.efficy.com" target="_blank" rel="noopener">Efficy CRM</a><span class="crm-site">efficy.com</span></td>
|
<td><a href="https://www.efficy.com" target="_blank" rel="noopener">Efficy CRM</a></td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Belgium</td><td>Yes</td><td>Yes (industry-standard feature, not independently verified)</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Unclear — only Outlook/Gmail/Exchange/Kerio sync confirmed in public docs, no generic IMAP host+port setup found</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span><sup>*</sup></td>
|
<td>Unclear — a third-party site claims EU data centers + on-prem/hybrid, no official DPA page located</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span><sup>*</sup></td>
|
<td>Yes — cloud, on-prem, and hybrid offered</td><td>Paid only</td>
|
||||||
<td class="crm-feature"><span class="crm-check">✓</span></td>
|
<td>Needs a direct answer from Efficy sales on IMAP + DPA before it can be trusted</td>
|
||||||
<td class="crm-feature"><span class="crm-x">✗</span></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<p class="crm-note"><sup>*</sup> unconfirmed / conflicting sources — needs direct vendor confirmation before relying on it. <sup>†</sup> has a free tier, but capped well below 8 users. <sup>‡</sup> self-hosted, so EU hosting + DPA is whatever server you choose, not vendor-provided.</p>
|
|
||||||
|
|
||||||
<div class="drill-actions">
|
<div class="crm-popover" data-target="crm-info-capsule">
|
||||||
<button class="drill-next" data-target="notes">Notes →</button>
|
Often assumed simple = flexible, but Capsule does not appear to support full generic IMAP — Gmail/Outlook native only, others SMTP-send only. Worth a live trial before including or excluding it.
|
||||||
|
</div>
|
||||||
|
<div class="crm-popover" data-target="crm-info-espocrm-root">
|
||||||
|
EspoCRM cloud pricing figures found were inconsistently formatted — unverified, check EspoCRM's own site directly.
|
||||||
|
</div>
|
||||||
|
<div class="crm-popover" data-target="crm-info-zoho">
|
||||||
|
Zoho's EU/DPA tier requirement is contested across sources — get this in writing from Zoho sales before assuming the Standard tier covers it.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="drill-view" data-view="notes">
|
<div class="drill-view" data-view="notes">
|
||||||
<h2>Notes</h2>
|
<h2>Requirements</h2>
|
||||||
<p class="narrative">Requirements and the candidate survey behind the table above — maintained separately, in its own research session.</p>
|
<p class="req-status">Neutral survey, no recommendation made — non-US vendors only, for data-sovereignty reasons. Last updated 2026-08-17.</p>
|
||||||
<div class="drill-actions">
|
|
||||||
<button class="drill-back" data-target="crm-root">← CRM Research</button>
|
<h3>Must-Have / Nice-to-Have</h3>
|
||||||
<a class="open-link" href="address_book/CRM_Research_Notes.md" target="_blank" rel="noopener">Open full research notes ↗</a>
|
<div class="req-cols">
|
||||||
|
<div>
|
||||||
|
<h4>Must-Have</h4>
|
||||||
|
<ul class="req-list">
|
||||||
|
<li>Contact + company records with custom fields, tagging, duplicate detection</li>
|
||||||
|
<li>Excel/CSV import with field mapping</li>
|
||||||
|
<li>Deal/pipeline with customizable stages and value tracking</li>
|
||||||
|
<li>Activity/interaction logging (calls, meetings, notes) tied to contact/deal</li>
|
||||||
|
<li>Generic IMAP/SMTP email integration — connects to any mail server via host/port/user/pass, not just an OAuth app for Gmail/Outlook (the single biggest filter for a Mailcow shop)</li>
|
||||||
|
<li>Multi-user roles/permissions</li>
|
||||||
|
<li>EU data hosting + a signed DPA (GDPR Art. 28)</li>
|
||||||
|
<li>Export/delete tooling for data-subject access/erasure requests (Art. 15/17)</li>
|
||||||
|
<li>Admin burden proportional to a non-technical 8-person team</li>
|
||||||
|
<li>Basic reporting: pipeline value, stage conversion, activity counts</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4>Nice-to-Have</h4>
|
||||||
|
<ul class="req-list">
|
||||||
|
<li>Mobile app</li>
|
||||||
|
<li>Email templates/sequencing/mail merge (may overlap with the existing in-house mail-merge tool)</li>
|
||||||
|
<li>Bulk CSV export of LinkedIn-sourced contacts</li>
|
||||||
|
<li>Workflow automation/triggers</li>
|
||||||
|
<li>Self-hosted option (plausible given existing Nextcloud self-hosting)</li>
|
||||||
|
<li>API access (for future integration with the mail-merge tool)</li>
|
||||||
|
<li>Free tier to trial before commitment</li>
|
||||||
|
<li>Calendar sync</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Other Names Looked At</h3>
|
||||||
|
<ul class="plain-list">
|
||||||
|
<li><strong>Vtiger</strong> — self-host reportedly being de-emphasized by the vendor.</li>
|
||||||
|
<li><strong>Salesflare / Close</strong> — appear Gmail/Outlook-centric; generic IMAP support unclear from public docs.</li>
|
||||||
|
<li><strong>Insightly</strong> — insufficient public detail found to evaluate.</li>
|
||||||
|
<li><strong>Freshsales</strong> — a custom-email-server config exists, but Freshworks/Freshsales ownership needs a sovereignty check before it can be added to the survey.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Sources</h3>
|
||||||
|
<p class="crm-note">
|
||||||
|
<a href="https://www.zoho.com/gdpr.html" target="_blank" rel="noopener">Zoho GDPR</a> ·
|
||||||
|
<a href="https://chatarmin.com/en/blog/zoho-pricing" target="_blank" rel="noopener">Zoho pricing</a> ·
|
||||||
|
<a href="https://docs.espocrm.com/user-guide/imap-smtp-configuration/" target="_blank" rel="noopener">EspoCRM IMAP/SMTP docs</a> ·
|
||||||
|
<a href="https://pricingnow.com/question/espocrm-pricing/" target="_blank" rel="noopener">EspoCRM pricing</a> ·
|
||||||
|
<a href="https://www.saasworthy.com/compare/suitecrm-vs-vtiger-vs-espocrm-vs-odoo-crm?pIds=2075%2C2203%2C10771%2C29829" target="_blank" rel="noopener">SuiteCRM/EspoCRM/Vtiger/Odoo comparison</a> ·
|
||||||
|
<a href="https://oec.sh/odoo-pricing" target="_blank" rel="noopener">Odoo pricing</a> ·
|
||||||
|
<a href="https://community.monday.com/t/can-we-use-a-standard-hosted-imap-email-service-for-email-integration-rather-than-microsoft-business-premium/61461" target="_blank" rel="noopener">monday.com IMAP limitation</a> ·
|
||||||
|
<a href="https://capsulecrm.com/blog/bring-outlook-and-gmail-into-capsule-crm/" target="_blank" rel="noopener">Capsule email integrations</a> ·
|
||||||
|
<a href="https://usercentrics.com/knowledge-hub/crm-gdpr/" target="_blank" rel="noopener">GDPR CRM DSAR guidance</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="drill-view" data-view="pricing">
|
||||||
|
<h2>Pricing<span class="crm-info-badge" id="crm-info-pricing-general" onclick="crmTogglePopover(this)">?</span></h2>
|
||||||
|
<p class="narrative">Cost and free-tier status for each candidate, pulled from the same survey as the main comparison table. Self-hosted "free" options still carry a real cost in hosting and admin time, just not a license fee.</p>
|
||||||
|
|
||||||
|
<div class="crm-table-wrap">
|
||||||
|
<table class="crm-detail-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>CRM</th>
|
||||||
|
<th>Self-Hosted</th>
|
||||||
|
<th>Cost / Free Tier</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://capsulecrm.com" target="_blank" rel="noopener">Capsule CRM</a></td>
|
||||||
|
<td>No</td>
|
||||||
|
<td>Quote-based</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://www.espocrm.com" target="_blank" rel="noopener">EspoCRM</a><span class="crm-info-badge" id="crm-info-espocrm-pricing" onclick="crmTogglePopover(this)">?</span></td>
|
||||||
|
<td>Yes, free open-source</td>
|
||||||
|
<td>Free self-hosted (server cost only)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://www.odoo.com/app/crm" target="_blank" rel="noopener">Odoo CRM</a></td>
|
||||||
|
<td>Yes, Community free</td>
|
||||||
|
<td>Cloud pricing varies by region</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://suitecrm.com" target="_blank" rel="noopener">SuiteCRM</a></td>
|
||||||
|
<td>Yes, free open-source</td>
|
||||||
|
<td>Free (server cost only)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://www.zoho.com/crm/" target="_blank" rel="noopener">Zoho CRM</a></td>
|
||||||
|
<td>No</td>
|
||||||
|
<td>Mid-tier pricing per seat, varies by plan</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://centralstationcrm.de" target="_blank" rel="noopener">CentralStationCRM</a></td>
|
||||||
|
<td>No — SaaS-only</td>
|
||||||
|
<td>Free tier capped at 3 users/200 contacts, not usable at 8</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://www.dolibarr.org" target="_blank" rel="noopener">Dolibarr</a></td>
|
||||||
|
<td>Yes, GPL, unlimited users</td>
|
||||||
|
<td>Free, fully open-source</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="https://www.efficy.com" target="_blank" rel="noopener">Efficy CRM</a></td>
|
||||||
|
<td>Yes — cloud, on-prem, and hybrid offered</td>
|
||||||
|
<td>Paid only</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="crm-popover" data-target="crm-info-pricing-general">
|
||||||
|
Self-hosted "free" options still shift cost from license fees to server + maintenance time — real even for a team with no dedicated sysadmin.<br><br>
|
||||||
|
Figures here are an August 2026 snapshot, not a quote — pricing pages change often.
|
||||||
|
</div>
|
||||||
|
<div class="crm-popover" data-target="crm-info-espocrm-pricing">
|
||||||
|
EspoCRM cloud pricing figures found were inconsistently formatted — unverified, check EspoCRM's own site directly.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4666,7 +4796,7 @@
|
|||||||
|
|
||||||
/* ---- Drill-downs: Marketing -> Social Media (dropdown) -> LinkedIn -> Dash
|
/* ---- Drill-downs: Marketing -> Social Media (dropdown) -> LinkedIn -> Dash
|
||||||
Sales -> Market Intelligence -> site (goes there directly, one child today) ---- */
|
Sales -> Market Intelligence -> site (goes there directly, one child today) ---- */
|
||||||
var HERO_NAV_BY_TAB = { marketing: ["hero-nav-social", "hero-nav-conferences"], "crm-research": ["hero-nav-crm-requirements"] };
|
var HERO_NAV_BY_TAB = { marketing: ["hero-nav-social", "hero-nav-conferences"], "crm-research": ["hero-nav-crm-requirements", "hero-nav-crm-pricing"] };
|
||||||
var DRILL_DEFAULT_VIEW = { marketing: "marketing-root", sales: "market-intelligence", "crm-research": "crm-root" };
|
var DRILL_DEFAULT_VIEW = { marketing: "marketing-root", sales: "market-intelligence", "crm-research": "crm-root" };
|
||||||
var DRILL_CONFIG = {
|
var DRILL_CONFIG = {
|
||||||
marketing: {
|
marketing: {
|
||||||
@@ -4688,7 +4818,8 @@
|
|||||||
crumbsEl: "crm-crumbs",
|
crumbsEl: "crm-crumbs",
|
||||||
crumbs: {
|
crumbs: {
|
||||||
"crm-root": [["CRM Research", "crm-root"]],
|
"crm-root": [["CRM Research", "crm-root"]],
|
||||||
"notes": [["CRM Research", "crm-root"], ["Notes", "notes"]]
|
"notes": [["CRM Research", "crm-root"], ["Requirements", "notes"]],
|
||||||
|
"pricing": [["CRM Research", "crm-root"], ["Pricing", "pricing"]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -4753,6 +4884,33 @@
|
|||||||
document.getElementById("hero-nav-crm-requirements-btn").addEventListener("click", function () {
|
document.getElementById("hero-nav-crm-requirements-btn").addEventListener("click", function () {
|
||||||
setDrillView("crm-research", "notes");
|
setDrillView("crm-research", "notes");
|
||||||
});
|
});
|
||||||
|
document.getElementById("hero-nav-crm-pricing-btn").addEventListener("click", function () {
|
||||||
|
setDrillView("crm-research", "pricing");
|
||||||
|
});
|
||||||
|
|
||||||
|
/* ---- CRM Research: click-triggered info badges (instant, unlike a native title tooltip) ---- */
|
||||||
|
function crmCloseAllPopovers(except) {
|
||||||
|
document.querySelectorAll(".crm-popover").forEach(function (p) {
|
||||||
|
if (p !== except) p.style.display = "none";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function crmTogglePopover(badge) {
|
||||||
|
var pop = document.querySelector('.crm-popover[data-target="' + badge.id + '"]');
|
||||||
|
if (!pop) return;
|
||||||
|
var willOpen = pop.style.display !== "block";
|
||||||
|
crmCloseAllPopovers();
|
||||||
|
if (willOpen) {
|
||||||
|
var rect = badge.getBoundingClientRect();
|
||||||
|
pop.style.top = (rect.bottom + 6) + "px";
|
||||||
|
pop.style.left = Math.min(rect.left, window.innerWidth - 360) + "px";
|
||||||
|
pop.style.display = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener("click", function (ev) {
|
||||||
|
if (ev.target.classList && ev.target.classList.contains("crm-info-badge")) return;
|
||||||
|
if (ev.target.closest && ev.target.closest(".crm-popover")) return;
|
||||||
|
crmCloseAllPopovers();
|
||||||
|
});
|
||||||
|
|
||||||
/* ---- Conferences (Directory pattern: conference cards on the left, drill into
|
/* ---- Conferences (Directory pattern: conference cards on the left, drill into
|
||||||
its own presentation sub-directory on the right) ---- */
|
its own presentation sub-directory on the right) ---- */
|
||||||
|
|||||||
Reference in new issue
Block a user