Restructure CRM Research into a root + Notes drill-down page

Matches the Marketing/Sales breadcrumb pattern: the comparison table stays
on the root view, "Notes ->" drills into a dedicated sub-page linking out
to CRM_Research_Notes.md, with back navigation and breadcrumbs. Left
CRM_Research_Notes.md's own changes uncommitted — that file belongs to the
CRM Research session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
beantownbabeandClaude Sonnet 5 committed 2026-08-17 20:24:57 +02:00
1 parent a7e4aa5138
commit 24ce2b748c
1 file changed
+141 -6
+141 -6
View File
@@ -261,6 +261,27 @@
}
.tree-row .open-link:hover { background: #1b3a5c; }
#tab-crm-research h2 { margin: 0 0 12px; font-size: 1.3rem; font-weight: 800; color: #1b3a5c; }
#tab-crm-research .narrative {
font-size: 0.95rem; line-height: 1.65; color: #3d4c5c;
max-width: none; margin: 0 0 20px;
}
.crm-table-wrap { overflow-x: auto; margin-bottom: 10px; }
.crm-table { border-collapse: collapse; width: 100%; font-size: 0.85rem; }
.crm-table th, .crm-table td { padding: 10px 12px; border-bottom: 1px solid #e0e7ef; text-align: left; white-space: nowrap; }
.crm-table th {
color: #1b3a5c; font-weight: 800; font-size: 0.72rem;
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 {
font-size: 0.78rem;
font-weight: 600;
@@ -4497,11 +4518,118 @@
</div>
<div id="tab-crm-research" class="tab-content">
<div class="card">
<div class="card" style="padding: 0;">
<div style="padding: 20px 32px 0;">
<div class="drill-crumbs" id="crm-crumbs"></div>
</div>
<div class="drill-view active" data-view="crm-root">
<h2>CRM Research</h2>
<p class="narrative">No CRM today — contacts live across Excel sheets, the LinkedIn follower list, and the conference mail-merge sheet. This page tracks the research into what TXproducts actually needs before picking one. [Placeholder narrative — edit me.]</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">
<table class="crm-table">
<thead>
<tr>
<th>Company</th>
<th>CSV/Excel Import</th>
<th>Sales Pipeline</th>
<th>Generic IMAP/SMTP</th>
<th>EU Hosting + DPA</th>
<th>Self-Hosted</th>
<th>Free / Open-Source</th>
</tr>
</thead>
<tbody>
<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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
<td class="crm-feature"><span class="crm-x">✗</span><sup>*</sup></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span><sup>*</sup></td>
<td class="crm-feature"><span class="crm-check">✓</span><sup>‡</sup></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span><sup>‡</sup></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span><sup>*</sup></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
<td class="crm-feature"><span class="crm-x">✗</span><sup>†</sup></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
<td class="crm-feature"><span class="crm-x">✗</span><sup>†</sup></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span><sup>‡</sup></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
</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 class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-x">✗</span><sup>*</sup></td>
<td class="crm-feature"><span class="crm-x">✗</span><sup>*</sup></td>
<td class="crm-feature"><span class="crm-check">✓</span></td>
<td class="crm-feature"><span class="crm-x">✗</span></td>
</tr>
</tbody>
</table>
</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">
<a class="open-link" href="address_book/CRM_Research_Notes.md" target="_blank" rel="noopener">Open CRM Research Notes ↗</a>
<button class="drill-next" data-target="notes">Notes →</button>
</div>
</div>
<div class="drill-view" data-view="notes">
<h2>Notes</h2>
<p class="narrative">Requirements and the candidate survey behind the table above — maintained separately, in its own research session.</p>
<div class="drill-actions">
<button class="drill-back" data-target="crm-root">← CRM Research</button>
<a class="open-link" href="address_book/CRM_Research_Notes.md" target="_blank" rel="noopener">Open full research notes ↗</a>
</div>
</div>
</div>
</div>
@@ -4514,7 +4642,7 @@
"marketing": ["Marketing", ""],
"sales": ["Sales", ""],
"opportunities": ["Opportunities", ""],
"crm-research": ["CRM Research", "Evaluating CRM options for TXproducts."]
"crm-research": ["CRM Research", ""]
};
var btns = document.querySelectorAll(".sidebar-nav-btn");
btns.forEach(function (btn) {
@@ -4536,7 +4664,7 @@
/* ---- Drill-downs: Marketing -> Social Media (dropdown) -> LinkedIn -> Dash
Sales -> Market Intelligence -> site (goes there directly, one child today) ---- */
var HERO_NAV_BY_TAB = { marketing: ["hero-nav-social", "hero-nav-conferences"] };
var DRILL_DEFAULT_VIEW = { marketing: "marketing-root", sales: "market-intelligence" };
var DRILL_DEFAULT_VIEW = { marketing: "marketing-root", sales: "market-intelligence", "crm-research": "crm-root" };
var DRILL_CONFIG = {
marketing: {
crumbsEl: "mkt-crumbs",
@@ -4552,6 +4680,13 @@
"sales-root": [["Sales", "sales-root"]],
"market-intelligence": [["Sales", "sales-root"], ["Intelligence Board", "market-intelligence"], ["Market Intelligence", "market-intelligence"]]
}
},
"crm-research": {
crumbsEl: "crm-crumbs",
crumbs: {
"crm-root": [["CRM Research", "crm-root"]],
"notes": [["CRM Research", "crm-root"], ["Notes", "notes"]]
}
}
};
/* Feature modules loaded async (see opportunities/opportunities.js) register their own
@@ -4584,7 +4719,7 @@
crumbsEl.appendChild(el);
});
}
["marketing", "sales"].forEach(function (scope) {
["marketing", "sales", "crm-research"].forEach(function (scope) {
document.querySelectorAll("#tab-" + scope + " .drill-back, #tab-" + scope + " .drill-next").forEach(function (b) {
b.addEventListener("click", function () { setDrillView(scope, b.getAttribute("data-target")); });
});