/* The Knowledge: owned growth layer (site-wide).
- Referral capture (?ref=) for every Kit form and every form rendered here
- Welcome note for readers arriving from a friend's link
- Mid-essay subscribe card
- Bottom sheets: subscribe (new readers), Sovereign free chapter (known subscribers)
- Sharer sheet for readers arriving from the email's share buttons (?share=)
- /join: invite page and the page shown after signing up
No third-party code. Everything fails quiet: if anything here breaks, the page is untouched. */
(function () {
'use strict';
if (window.__tkGrow) return;
window.__tkGrow = { v: 1 };
var CDN = 'https://cdn.getmidnight.com/a26398dca6f47b49876cbaffbc9954f9/2026/11/';
var API = 'https://decision-hacker-fulfilment.davidelikwu.workers.dev';
var FORM_SUB = '2864506', FORM_SOV = '3758993';
var MSG = "Thought you'd like this. It's from a newsletter I read every week";
var DAY = 864e5;
var doc = document, body = doc.body, qs = new URLSearchParams(location.search);
/* ---------- storage ---------- */
function get(k) { try { return JSON.parse(localStorage.getItem(k) || 'null'); } catch (e) { return null; } }
function set(k, v) { try { localStorage.setItem(k, JSON.stringify(v)); } catch (e) {} }
/* ---------- referral capture (same rules as before: 30 days, URL wins) ---------- */
var m = /^[a-z0-9-]{6,40}$/i.exec(qs.get('ref') || ''), refFromUrl = !!m, ref = m ? m[0].toLowerCase() : null;
if (ref) set('tk_ref', { ref: ref, t: Date.now() });
else { var s = get('tk_ref'); if (s && Date.now() - s.t < 30 * DAY) ref = s.ref; }
function stampKitForms() {
if (!ref) return;
doc.querySelectorAll('form.formkit-form, form[action*="kit.com/forms"], form[action*="convertkit.com/forms"]').forEach(function (f) {
var i = f.querySelector('input[name="fields[tk_referred_by]"]');
if (!i) { i = doc.createElement('input'); i.type = 'hidden'; i.name = 'fields[tk_referred_by]'; f.appendChild(i); i.value = ref; }
else if (refFromUrl && i.value !== ref) i.value = ref;
});
}
stampKitForms();
try { new MutationObserver(stampKitForms).observe(doc.documentElement, { childList: true, subtree: true }); } catch (e) {}
/* ---------- who is this ---------- */
var share = /^[a-z0-9-]{6,40}$/i.test(qs.get('share') || '') ? qs.get('share').toLowerCase() : null;
if (share || qs.get('ck_subscriber_id')) set('tk_sub', 1);
var isSub = !!get('tk_sub');
var isJoin = body.classList.contains('page-join');
var article = doc.querySelector('article.ghost-content');
var isPost = body.classList.contains('post-template') && !!article && !body.className.match(/tag-hash-|tag-decision-hacker/);
/* ---------- styles ---------- */
var css = [
':root{--tk-bg:#fff;--tk-card:#f7f6f4;--tk-line:#e6e3de;--tk-ink:#262626;--tk-mut:#6f6b66;--tk-acc:#ff4c29;--tk-field:#fff;--tk-field2:#f3f1ed;--tk-dark:#1a1a1a}',
'html[data-color-scheme=dark]{--tk-bg:#1a1a1a;--tk-card:#232322;--tk-line:#353432;--tk-ink:#e6e6e6;--tk-mut:#a29e98;--tk-field:#121212;--tk-field2:#111;--tk-dark:#2b2a28}',
'@media (prefers-color-scheme:dark){html[data-color-scheme=system]{--tk-bg:#1a1a1a;--tk-card:#232322;--tk-line:#353432;--tk-ink:#e6e6e6;--tk-mut:#a29e98;--tk-field:#121212;--tk-field2:#111;--tk-dark:#2b2a28}}',
'.tkx{font-family:"DM Sans",system-ui,sans-serif;color:var(--tk-ink);-webkit-font-smoothing:antialiased;text-align:left;line-height:1.4}',
'.tkx *{box-sizing:border-box}',
'.tkx img{margin:0!important;max-width:none;display:block}',
'.tkx p,.tkx h2,.tkx h3{margin:0!important}',
'.tkx .serif{font-family:"Source Serif 4","Source Serif Pro",Georgia,serif}',
'.tkx .mut{color:var(--tk-mut)}',
'.tkx form.combo{display:flex;align-items:center;gap:6px;margin:0;padding:5px 5px 5px 6px;border-radius:12px;background:var(--tk-field);border:1px solid var(--tk-line)}',
'.tkx form.combo:focus-within{border-color:var(--tk-acc)}',
'.tkx form.combo input{flex:1 1 0;width:0;min-width:0;height:40px;margin:0;padding:0 10px;border:0!important;outline:0!important;box-shadow:none!important;background:transparent!important;font:inherit;font-size:16px;color:var(--tk-ink)}',
'.tkx form.combo input::placeholder{color:var(--tk-mut);opacity:1}',
'.tkx form.combo button{height:40px;margin:0;padding:0 16px;border:0;border-radius:9px;background:var(--tk-acc);color:#fff;font:inherit;font-size:15px;font-weight:600;white-space:nowrap;cursor:pointer;flex:none}',
'.tkx form.combo button[disabled]{opacity:.6;cursor:default}',
'.tkx form.combo.f2{background:var(--tk-field2)}',
'.tkx form.combo.onbg{background:var(--tk-bg)}',
'.tkx .tk-err{font-size:13px;color:#c0392b;margin-top:8px}.tkx .tk-err:empty{display:none}',
'.tkx .tk-done{font-size:15px;line-height:1.45;padding:12px 2px 2px}',
'.tkx .stars{color:#f5b301;letter-spacing:1px;font-size:12px;white-space:nowrap}',
'.tkx .faces{display:flex;flex:none}.tkx .faces img{width:24px;height:24px;border-radius:999px;object-fit:cover;box-shadow:0 0 0 2px var(--tk-bg)}.tkx .faces img+img{margin-left:-7px!important}',
'.tkx .av{border-radius:999px;object-fit:cover;flex:none}',
'.tk-card{margin:28px 0 30px;padding:18px;border-radius:16px;background:var(--tk-card);border:1px solid var(--tk-line)}',
'.tk-card .faces img{box-shadow:0 0 0 2px var(--tk-card)}',
'.tk-note{margin:0 0 26px;padding:16px;border-radius:18px;background:var(--tk-card);border:1px solid var(--tk-line)}',
'.tk-sheet{position:fixed;left:0;right:0;bottom:0;z-index:9999;padding:10px 20px calc(28px + env(safe-area-inset-bottom));border-radius:22px 22px 0 0;background:var(--tk-bg);border-top:1px solid var(--tk-line);box-shadow:0 -16px 44px -14px rgb(0 0 0 / .38);transform:translateY(105%);transition:transform .34s cubic-bezier(.2,.8,.2,1);will-change:transform}',
'.tk-sheet.in{transform:none}',
'.tk-sheet .grab{width:36px;height:4px;border-radius:2px;background:var(--tk-line);margin:0 auto 26px}',
'.tk-sheet .x{position:absolute;right:14px;top:12px;width:30px;height:30px;padding:0;border:0;border-radius:999px;background:var(--tk-card);color:var(--tk-mut);display:grid;place-items:center;cursor:pointer}',
'.tk-sheet.sov{padding:0 0 calc(28px + env(safe-area-inset-bottom));overflow:hidden}',
'.tk-sheet.sov .x{background:rgb(0 0 0 / .45);color:#fff}',
'.tk-back{position:fixed;inset:0;z-index:9998;background:rgb(0 0 0 / .35);opacity:0;transition:opacity .3s}.tk-back.in{opacity:1}',
'.tk-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;height:48px;padding:0 16px;border:0;border-radius:12px;background:var(--tk-acc);color:#fff;font:inherit;font-size:15px;font-weight:600;cursor:pointer;text-decoration:none}',
'.tk-btn.alt{background:var(--tk-card);color:var(--tk-ink)}',
'.tk-prev{display:flex;gap:12px;align-items:center;padding:10px;border-radius:14px;background:var(--tk-card)}',
'.tk-prev img{width:56px;height:56px;border-radius:10px;object-fit:cover;flex:none}',
'.tk-guard{position:fixed;inset:0;z-index:10001;background:rgb(0 0 0 / .5);display:grid;place-items:center;padding:16px}.tk-guard iframe{width:100%;max-width:420px;height:520px;border:0;border-radius:16px;background:#fff}',
'@media (min-width:700px){.tk-sheet{left:auto;right:24px;bottom:96px;width:400px;border-radius:22px;border:1px solid var(--tk-line);padding-bottom:24px;transform:translateY(calc(100% + 40px))}.tk-sheet.sov{padding-bottom:24px}.tk-sheet .grab{visibility:hidden;margin-bottom:22px}.tk-sheet.sov .grabw{display:none}.tk-sheet.mid{left:50%;right:auto;bottom:50%;transform:translate(-50%,calc(50% + 40px));opacity:0;transition:transform .3s,opacity .3s}.tk-sheet.mid.in{transform:translate(-50%,50%);opacity:1}}',
'@media (prefers-reduced-motion:reduce){.tk-sheet,.tk-back{transition:none}}'
].join('');
var st = doc.createElement('style'); st.id = 'tk-grow-css'; st.textContent = css; doc.head.appendChild(st);
/* ---------- pieces ---------- */
var X = '';
var SHARE_IC = '';
var COPY_IC = '';
var AV = CDN + 'tk-david.jpg';
var FACES = '' + ['maya', 'merve-goulding', 'brian-muriithi', 'koko'].map(function (n) { return '
'; }).join('') + '';
function esc(t) { return String(t).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); }
function form(id, label, cls) {
return '
';
}
/* ---------- forms: submit to Kit, keep the reader on the site ---------- */
function guard(url, done) {
var w = doc.createElement('div'); w.className = 'tk-guard'; w.innerHTML = '';
function fin(ok) { window.removeEventListener('message', on); w.remove(); done(ok); }
function on(e) { if (e.data && e.data.name === 'ckjs:guard:confirmed') fin(true); }
window.addEventListener('message', on);
w.addEventListener('click', function (e) { if (e.target === w) fin(false); });
body.appendChild(w);
}
function wire(f) {
if (f.__tk) return; f.__tk = 1;
f.addEventListener('submit', function (ev) {
ev.preventDefault();
var btn = f.querySelector('button'), err = f.nextElementSibling && f.nextElementSibling.classList.contains('tk-err') ? f.nextElementSibling : null;
var id = f.getAttribute('data-tk-form'), fd = new FormData(f);
if (ref) fd.set('fields[tk_referred_by]', ref);
fd.append('referrer', doc.referrer); fd.append('host', location.href.split('?')[0]); fd.append('ckjs_version', '6');
if (err) err.textContent = '';
btn.disabled = true;
function ok() {
set('tk_sub', 1); isSub = true;
try { f.dispatchEvent(new CustomEvent('tk:subscribed', { bubbles: true, detail: { form: id } })); } catch (e) {}
if (id === FORM_SOV) {
f.outerHTML = 'Chapter one is on its way. Check your inbox in a minute.
';
} else if (isJoin && window.__tkJoinWelcome) {
window.__tkJoinWelcome();
} else {
location.href = '/join/?welcome=1';
}
}
function fail(msg) { btn.disabled = false; if (err) err.textContent = msg || 'That did not go through. Please try again.'; }
fetch(f.action, { method: 'POST', body: fd, headers: { Accept: 'application/json', 'X-CKJS-Version': '6' } })
.then(function (r) { if (!r.ok) throw new Error('http'); return r.json(); })
.then(function (j) {
if (j.status === 'success') ok();
else if (j.status === 'quarantined' && j.url) guard(j.url, function (passed) { passed ? ok() : fail('Please confirm the check to subscribe.'); });
else fail(j.errors && j.errors.messages && j.errors.messages[0]);
})
.catch(function () { try { f.__tk = 0; HTMLFormElement.prototype.submit.call(f); } catch (e) { fail(); } });
});
}
function wireAll(root) { (root || doc).querySelectorAll('form[data-tk-form]').forEach(wire); }
window.__tkGrow.wire = wireAll;
/* ---------- sharing ---------- */
function canonical() {
var c = doc.querySelector('link[rel=canonical]');
return ((c && c.href) || (location.origin + location.pathname)).split('?')[0].split('#')[0];
}
function shareTarget(code) {
if (!code) return isPost ? canonical() : 'https://theknowledge.io/';
return isPost ? canonical() + '?ref=' + code : 'https://theknowledge.io/r/' + code;
}
function copy(text, btn) {
function done() { if (btn) { var o = btn.innerHTML; btn.innerHTML = 'Link copied'; setTimeout(function () { btn.innerHTML = o; }, 2200); } }
if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(text).then(done, legacy); else legacy();
function legacy() { var t = doc.createElement('textarea'); t.value = text; t.style.cssText = 'position:fixed;opacity:0'; body.appendChild(t); t.select(); try { doc.execCommand('copy'); done(); } catch (e) {} t.remove(); }
}
function doShare(url, btn) {
if (navigator.share) navigator.share({ text: MSG, url: url }).catch(function () {});
else copy(url, btn);
}
window.__tkGrow.share = function (btn) { doShare(shareTarget(share), btn); };
/* ---------- sheets ---------- */
var sheetOpen = false;
function openSheet(html, cls, opts) {
if (sheetOpen) return null;
sheetOpen = true; opts = opts || {};
if (opts.mark) set('tk_sheet', { t: Date.now(), k: opts.mark });
var el = doc.createElement('div'), back = null;
el.className = 'tkx tk-sheet ' + (cls || ''); el.setAttribute('role', 'dialog'); el.setAttribute('aria-label', opts.label || 'The Knowledge');
el.innerHTML = html;
if (opts.backdrop) { back = doc.createElement('div'); back.className = 'tk-back'; body.appendChild(back); back.addEventListener('click', close); }
body.appendChild(el); wireAll(el);
requestAnimationFrame(function () { requestAnimationFrame(function () { el.classList.add('in'); if (back) back.classList.add('in'); }); });
function close() {
if (!sheetOpen) return; sheetOpen = false;
el.classList.remove('in'); if (back) back.classList.remove('in');
doc.removeEventListener('keydown', key);
setTimeout(function () { el.remove(); if (back) back.remove(); }, 380);
if (opts.onClose) opts.onClose();
}
function key(e) { if (e.key === 'Escape') close(); }
doc.addEventListener('keydown', key);
var x = el.querySelector('.x'); if (x) x.addEventListener('click', close);
el.close = close;
return el;
}
var GRAB = '', XB = '';
function subSheet() {
return openSheet(GRAB + XB +
'
Get an essay like this every Thursday
' +
'I write The Knowledge for 40,000+ people who want to think deeper and work smarter.
' +
'' + form(FORM_SUB, 'Subscribe', 'f2') + '
' +
'' + FACES + '★★★★★ rated 5.0 by readers
',
'', { label: 'Subscribe to The Knowledge', mark: 'sub' });
}
function sovSheet() {
return openSheet(
'
' + XB + '
' +
'
Sovereign
The owner’s manual for a remarkable life
' +
'★★★★★“A manual for life. Modern stoicism at its best.”
' +
'
' + form(FORM_SOV, 'Read chapter one', 'f2') + '
',
'sov', { label: 'Sovereign: read chapter one', mark: 'sov' });
}
function sharerSheet(copyFirst) {
var url = shareTarget(share), native = !!navigator.share && !copyFirst;
var img = isPost ? ((doc.querySelector('meta[property="og:image"]') || {}).content || CDN + 'tk-join-cafe.jpg') : CDN + 'tk-join-cafe.jpg';
var title = isPost ? ((doc.querySelector('meta[property="og:title"]') || {}).content || doc.title) : 'The Knowledge';
var sub = isPost ? 'The Knowledge' : 'One essay every Thursday';
var el = openSheet(GRAB + XB +
'Send this to a friend
' +
' + ')
' + esc(title) + '
' + sub + '
' + esc(url.replace('https://', '')) + '
' +
'' +
'When they subscribe, it counts towards your rewards.
',
'mid', { label: 'Share with a friend', backdrop: true });
if (!el) return;
el.querySelector('.tk-btn').addEventListener('click', function () { native ? doShare(url, this) : copy(url, this); });
}
/* ---------- on-page pieces ---------- */
function midCard() {
var kids = [].filter.call(article.children, function (n) { return n.tagName === 'P' && n.textContent.trim().length > 60; });
if (kids.length < 8) return;
var at = kids[Math.floor(kids.length * 0.45)];
var nx = at.nextElementSibling; if (nx && nx.tagName !== 'P') return;
var d = doc.createElement('div'); d.className = 'tkx tk-card not-prose';
d.innerHTML = '
Enjoying this one?
I send an essay like it every Thursday.
' +
'' + form(FORM_SUB, 'Subscribe') + '
' +
'' + FACES + 'Join 40,000+ readers ★★★★★
';
at.parentNode.insertBefore(d, at.nextSibling); wireAll(d);
}
function welcomeNote(who) {
var d = doc.createElement('div'); d.className = 'tkx tk-note not-prose';
d.innerHTML = '
' + esc(who) + ' thought you’d like this.
It’s from my weekly newsletter.
' +
'' + form(FORM_SUB, 'Subscribe', 'onbg') + '
' +
'One essay every Thursday. Join 40,000+ readers.
';
var h = doc.querySelector('main h1'), at = h ? (h.previousElementSibling || h) : null;
if (at && at.parentNode) at.parentNode.insertBefore(d, at); else article.insertBefore(d, article.firstChild);
wireAll(d);
}
function friendName(code, cb) {
var done = false, t = setTimeout(function () { fin('A friend'); }, 1200);
function fin(n) { if (done) return; done = true; clearTimeout(t); cb(n); }
try {
fetch(API + '/referrals/name?ref=' + encodeURIComponent(code), { credentials: 'omit' })
.then(function (r) { return r.ok ? r.json() : {}; })
.then(function (j) { var n = j && typeof j.name === 'string' ? j.name.trim() : ''; fin(/^[\p{L}][\p{L}' -]{0,23}$/u.test(n) ? n : 'A friend'); })
.catch(function () { fin('A friend'); });
} catch (e) { fin('A friend'); }
}
window.__tkGrow.friendName = friendName;
/* ---------- run ---------- */
function cleanUrl() {
try { ['share', 'copy', 'via'].forEach(function (k) { qs.delete(k); }); var q = qs.toString(); history.replaceState(null, '', location.pathname + (q ? '?' + q : '') + location.hash); } catch (e) {}
}
function onScroll(frac, fn) {
function chk() {
var r = article.getBoundingClientRect();
if (r.height && (innerHeight - r.top) / r.height >= frac) { removeEventListener('scroll', chk); fn(); }
}
addEventListener('scroll', chk, { passive: true }); chk();
}
function quiet() { var a = doc.activeElement; return !(a && /INPUT|TEXTAREA|SELECT/.test(a.tagName)); }
function run() {
wireAll();
if (share) {
var via = qs.get('via'), wantCopy = qs.get('copy') === '1', target = shareTarget(share);
cleanUrl();
if (via === 'sms') location.href = 'sms:?&body=' + encodeURIComponent(MSG + ' ' + target);
else if (via === 'email') location.href = 'mailto:?subject=' + encodeURIComponent("Thought you'd like this") + '&body=' + encodeURIComponent(MSG + ':\n\n' + target);
setTimeout(function () { sharerSheet(wantCopy); }, via ? 900 : 350);
return;
}
if (!isPost) return;
if (!isSub && refFromUrl) {
friendName(ref, welcomeNote);
} else if (!isSub) {
midCard();
}
var last = get('tk_sheet') || {}, age = Date.now() - (last.t || 0);
if (!isSub) {
if (age > 14 * DAY) onScroll(refFromUrl ? 0.7 : 0.55, function () { if (!isSub && quiet()) subSheet(); });
} else if (age > (last.k === 'sov' ? 30 : 3) * DAY && !get('tk_sov')) {
onScroll(0.75, function () { if (quiet()) { var s = sovSheet(); if (s) s.addEventListener('tk:subscribed', function () { set('tk_sov', 1); }); } });
}
}
if (doc.readyState === 'loading') doc.addEventListener('DOMContentLoaded', run); else run();
})();