Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion signals/700-billion-compute-divide/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

<main class="sig-wrap sig-article">
<a href="/signals/" class="sig-back">&larr; The Signal Archive</a>
<p class="sig-eyebrow">Technology &middot; 16 August 2026</p>
<p class="sig-eyebrow">Technology &middot; 16 August 2026 &middot; 5 min read</p>
<h1 class="sig-title">The $700 Billion Compute Divide</h1>
<p class="sig-claim">American technology firms are committing close to $700 billion to AI infrastructure this year. Africa holds roughly 0.6 percent of global data centre capacity, and the binding constraint is power rather than capital.</p>
<p class="sig-byline sig-byline--top">By <a href="https://adetuyi.com" target="_blank" rel="author noopener noreferrer">Tolu Adetuyi</a></p>
Expand Down Expand Up @@ -134,6 +134,22 @@ <h2>Disclosure</h2>
<p>Tolu Adetuyi is co-founder and Chief Innovation Officer of <a href="https://prembly.com" target="_blank" rel="noopener noreferrer">Prembly</a>, which builds identity and compliance infrastructure. Signals regularly cover payments, identity and regulation, which is his commercial interest as well as his subject.</p>
</div>
</main>
<div class="sig-progress" id="sig-progress" role="presentation"></div>
<script>
(function () {
var bar = document.getElementById('sig-progress');
var article = document.querySelector('.sig-article');
if (!bar || !article) return;
var tick = function () {
var span = article.offsetHeight - window.innerHeight;
var pct = span > 0 ? (window.scrollY - article.offsetTop) / span : 1;
bar.style.width = Math.max(0, Math.min(1, pct)) * 100 + '%';
};
addEventListener('scroll', tick, { passive: true });
addEventListener('resize', tick);
tick();
}());
</script>
<footer class="footer" role="contentinfo">
<div class="container">
<div class="footer-inner">
Expand Down
32 changes: 27 additions & 5 deletions signals/build.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ const rfc822 = (iso) => new Date(iso + 'T12:00:00Z').toUTCString();
const editionPath = (s) => `/signals/${s.slug}/`; // root-relative, for on-site links
const editionUrl = (s) => `${BASE}${editionPath(s)}`; // absolute, for canonical/OG/RSS/sitemap/citation
const label = (s) => (s.number ? `Signal ${s.number}` : 'Signal');
// Counts the prose a reader actually reads, at 230 wpm, rounded to the nearest minute.
const readMinutes = (s) => {
const parts = [...(s.written || []).map((x) => (typeof x === 'string' ? x : x.h || '')),
s.method || '', s.proveWrong || '', ...(s.nextMove || []).map((m) => m.do)];
return Math.max(1, Math.round(parts.join(' ').trim().split(/\s+/).length / 230));
};
// Titles may end in a full stop, which would read as "Nigeria., 13 September" in a citation.
const citeTitle = (s) => s.title.replace(/\.$/, '');
const citation = (s) =>
Expand Down Expand Up @@ -226,7 +232,7 @@ const videoWatch = (s) => `https://www.youtube.com/watch?v=${s.videoId}`;
// ── Per-edition page ──
function editionPage(s) {
const url = editionUrl(s);
const eyebrowBits = [s.theme, longDate(s.date)];
const eyebrowBits = [s.theme, longDate(s.date), `${readMinutes(s)} min read`];
if (s.number) eyebrowBits.unshift(`Signal ${s.number}`);

// A written item is a paragraph (string) or a section subheading ({ h: '...' }).
Expand Down Expand Up @@ -363,7 +369,23 @@ function editionPage(s) {
<h2>Disclosure</h2>
<p>${esc(AUTHOR.name)} is co-founder and Chief Innovation Officer of <a href="https://prembly.com" target="_blank" rel="noopener noreferrer">Prembly</a>, which builds identity and compliance infrastructure. Signals regularly cover payments, identity and regulation, which is his commercial interest as well as his subject.</p>
</div>
</main>`;
</main>
<div class="sig-progress" id="sig-progress" role="presentation"></div>
<script>
(function () {
var bar = document.getElementById('sig-progress');
var article = document.querySelector('.sig-article');
if (!bar || !article) return;
var tick = function () {
var span = article.offsetHeight - window.innerHeight;
var pct = span > 0 ? (window.scrollY - article.offsetTop) / span : 1;
bar.style.width = Math.max(0, Math.min(1, pct)) * 100 + '%';
};
addEventListener('scroll', tick, { passive: true });
addEventListener('resize', tick);
tick();
}());
</script>`;

return shell({
title: `${s.seoTitle || s.title} | ZeroToAct ${label(s)}`,
Expand All @@ -378,10 +400,10 @@ function indexPage() {
.concat(themes.map((t) => `<button class="sig-filter" data-theme="${esc(t)}" type="button">${esc(t)}</button>`))
.join('\n ');

const cards = signals.map((s) => `
<article class="sig-card" data-theme="${esc(s.theme)}">
const cards = signals.map((s, i) => `
<article class="sig-card${i === 0 ? ' sig-card--latest' : ''}" data-theme="${esc(s.theme)}">
<a class="sig-card-link" href="${editionPath(s)}">
<div class="sig-card-meta"><span>${s.number ? `Signal ${s.number} &middot; ` : ''}${esc(longDate(s.date))}</span><span class="sig-card-theme">${esc(s.theme)}</span></div>
<div class="sig-card-meta"><span>${i === 0 ? '<span class="sig-card-latest">Latest</span>' : ''}${s.number ? `Signal ${s.number} &middot; ` : ''}${esc(longDate(s.date))} &middot; ${readMinutes(s)} min</span><span class="sig-card-theme">${esc(s.theme)}</span></div>
<h2 class="sig-card-title">${esc(s.title)}</h2>
<p class="sig-card-claim">${esc(s.headlineClaim)}</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand Down
18 changes: 17 additions & 1 deletion signals/dfis-stopped-writing-equity/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

<main class="sig-wrap sig-article">
<a href="/signals/" class="sig-back">&larr; The Signal Archive</a>
<p class="sig-eyebrow">Capital &middot; 2 August 2026</p>
<p class="sig-eyebrow">Capital &middot; 2 August 2026 &middot; 5 min read</p>
<h1 class="sig-title">DFIs Have Stopped Writing Equity Cheques</h1>
<p class="sig-claim">Development finance did not leave Africa. It changed instrument, from equity to debt, and that quietly changed which companies are fundable at all.</p>
<p class="sig-byline sig-byline--top">By <a href="https://adetuyi.com" target="_blank" rel="author noopener noreferrer">Tolu Adetuyi</a></p>
Expand Down Expand Up @@ -133,6 +133,22 @@ <h2>Disclosure</h2>
<p>Tolu Adetuyi is co-founder and Chief Innovation Officer of <a href="https://prembly.com" target="_blank" rel="noopener noreferrer">Prembly</a>, which builds identity and compliance infrastructure. Signals regularly cover payments, identity and regulation, which is his commercial interest as well as his subject.</p>
</div>
</main>
<div class="sig-progress" id="sig-progress" role="presentation"></div>
<script>
(function () {
var bar = document.getElementById('sig-progress');
var article = document.querySelector('.sig-article');
if (!bar || !article) return;
var tick = function () {
var span = article.offsetHeight - window.innerHeight;
var pct = span > 0 ? (window.scrollY - article.offsetTop) / span : 1;
bar.style.width = Math.max(0, Math.min(1, pct)) * 100 + '%';
};
addEventListener('scroll', tick, { passive: true });
addEventListener('resize', tick);
tick();
}());
</script>
<footer class="footer" role="contentinfo">
<div class="container">
<div class="footer-inner">
Expand Down
18 changes: 17 additions & 1 deletion signals/fed-might-hike-not-cut/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

<main class="sig-wrap sig-article">
<a href="/signals/" class="sig-back">&larr; The Signal Archive</a>
<p class="sig-eyebrow">Signal 6 &middot; Policy &middot; 26 July 2026</p>
<p class="sig-eyebrow">Signal 6 &middot; Policy &middot; 26 July 2026 &middot; 6 min read</p>
<h1 class="sig-title">The Fed Might Hike on July 29, Not Cut</h1>
<p class="sig-claim">Consensus says the Fed&#39;s next move is a cut. Put the odds of a hike on 29 July at roughly one in three. That is not the base case, and it is far too high to ignore if you are pricing dollars.</p>
<p class="sig-byline sig-byline--top">By <a href="https://adetuyi.com" target="_blank" rel="author noopener noreferrer">Tolu Adetuyi</a></p>
Expand Down Expand Up @@ -136,6 +136,22 @@ <h2>Disclosure</h2>
<p>Tolu Adetuyi is co-founder and Chief Innovation Officer of <a href="https://prembly.com" target="_blank" rel="noopener noreferrer">Prembly</a>, which builds identity and compliance infrastructure. Signals regularly cover payments, identity and regulation, which is his commercial interest as well as his subject.</p>
</div>
</main>
<div class="sig-progress" id="sig-progress" role="presentation"></div>
<script>
(function () {
var bar = document.getElementById('sig-progress');
var article = document.querySelector('.sig-article');
if (!bar || !article) return;
var tick = function () {
var span = article.offsetHeight - window.innerHeight;
var pct = span > 0 ? (window.scrollY - article.offsetTop) / span : 1;
bar.style.width = Math.max(0, Math.min(1, pct)) * 100 + '%';
};
addEventListener('scroll', tick, { passive: true });
addEventListener('resize', tick);
tick();
}());
</script>
<footer class="footer" role="contentinfo">
<div class="container">
<div class="footer-inner">
Expand Down
20 changes: 10 additions & 10 deletions signals/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,9 @@ <h1 class="sig-index-title">The Signal Archive</h1>
<button class="sig-filter" data-theme="Macro" type="button">Macro</button>
</div>
<div class="sig-grid">
<article class="sig-card" data-theme="Capital">
<article class="sig-card sig-card--latest" data-theme="Capital">
<a class="sig-card-link" href="/signals/money-got-more-expensive-except-in-nigeria/">
<div class="sig-card-meta"><span>13 September 2026</span><span class="sig-card-theme">Capital</span></div>
<div class="sig-card-meta"><span><span class="sig-card-latest">Latest</span>13 September 2026 &middot; 6 min</span><span class="sig-card-theme">Capital</span></div>
<h2 class="sig-card-title">Money Got More Expensive Everywhere. Except in Nigeria.</h2>
<p class="sig-card-claim">The ECB hiked on Thursday and the Fed may follow on Wednesday. Nigerian treasury bills went the other way, clearing almost ten points below the policy rate. The gap is real, and the money holding it open can leave in a week.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -106,7 +106,7 @@ <h2 class="sig-card-title">Money Got More Expensive Everywhere. Except in Nigeri

<article class="sig-card" data-theme="Macro">
<a class="sig-card-link" href="/signals/three-prices-all-in-dollars/">
<div class="sig-card-meta"><span>6 September 2026</span><span class="sig-card-theme">Macro</span></div>
<div class="sig-card-meta"><span>6 September 2026 &middot; 6 min</span><span class="sig-card-theme">Macro</span></div>
<h2 class="sig-card-title">Three Prices Moved. All of Them in Dollars.</h2>
<p class="sig-card-claim">Access to America got cheaper, energy got dearer, and money is about to cost more. All three prices are set in dollars. If none of your income is, that gap is now your largest exposure.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -115,7 +115,7 @@ <h2 class="sig-card-title">Three Prices Moved. All of Them in Dollars.</h2>

<article class="sig-card" data-theme="Policy">
<a class="sig-card-link" href="/signals/the-stablecoin-rulebook/">
<div class="sig-card-meta"><span>30 August 2026</span><span class="sig-card-theme">Policy</span></div>
<div class="sig-card-meta"><span>30 August 2026 &middot; 5 min</span><span class="sig-card-theme">Policy</span></div>
<h2 class="sig-card-title">The Stablecoin Rulebook</h2>
<p class="sig-card-claim">Jackson Hole made payments its theme, but the stablecoin rulebook is being drafted in comment files, not on a stage. The continent with the most operating evidence is not in the room.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -124,7 +124,7 @@ <h2 class="sig-card-title">The Stablecoin Rulebook</h2>

<article class="sig-card" data-theme="Macro">
<a class="sig-card-link" href="/signals/the-demographic-shift/">
<div class="sig-card-meta"><span>23 August 2026</span><span class="sig-card-theme">Macro</span></div>
<div class="sig-card-meta"><span>23 August 2026 &middot; 5 min</span><span class="sig-card-theme">Macro</span></div>
<h2 class="sig-card-title">The Demographic Dividend Is Not Automatic</h2>
<p class="sig-card-claim">Africa&#39;s youth bulge is the most agreed-upon idea in African macro. That consensus is the risk, because it is held as an inevitability when the institutions that own it call it a window that has to be earned.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -133,7 +133,7 @@ <h2 class="sig-card-title">The Demographic Dividend Is Not Automatic</h2>

<article class="sig-card" data-theme="Technology">
<a class="sig-card-link" href="/signals/700-billion-compute-divide/">
<div class="sig-card-meta"><span>16 August 2026</span><span class="sig-card-theme">Technology</span></div>
<div class="sig-card-meta"><span>16 August 2026 &middot; 5 min</span><span class="sig-card-theme">Technology</span></div>
<h2 class="sig-card-title">The $700 Billion Compute Divide</h2>
<p class="sig-card-claim">American technology firms are committing close to $700 billion to AI infrastructure this year. Africa holds roughly 0.6 percent of global data centre capacity, and the binding constraint is power rather than capital.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -142,7 +142,7 @@ <h2 class="sig-card-title">The $700 Billion Compute Divide</h2>

<article class="sig-card" data-theme="Capital">
<a class="sig-card-link" href="/signals/the-africa-window/">
<div class="sig-card-meta"><span>9 August 2026</span><span class="sig-card-theme">Capital</span></div>
<div class="sig-card-meta"><span>9 August 2026 &middot; 5 min</span><span class="sig-card-theme">Capital</span></div>
<h2 class="sig-card-title">The Africa Window</h2>
<p class="sig-card-claim">A weak payroll print cracked the dollar and opened a financing window onto Africa. It is a debt window, and a debt window chooses its own winners.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -151,7 +151,7 @@ <h2 class="sig-card-title">The Africa Window</h2>

<article class="sig-card" data-theme="Capital">
<a class="sig-card-link" href="/signals/dfis-stopped-writing-equity/">
<div class="sig-card-meta"><span>2 August 2026</span><span class="sig-card-theme">Capital</span></div>
<div class="sig-card-meta"><span>2 August 2026 &middot; 5 min</span><span class="sig-card-theme">Capital</span></div>
<h2 class="sig-card-title">DFIs Have Stopped Writing Equity Cheques</h2>
<p class="sig-card-claim">Development finance did not leave Africa. It changed instrument, from equity to debt, and that quietly changed which companies are fundable at all.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -160,7 +160,7 @@ <h2 class="sig-card-title">DFIs Have Stopped Writing Equity Cheques</h2>

<article class="sig-card" data-theme="Policy">
<a class="sig-card-link" href="/signals/fed-might-hike-not-cut/">
<div class="sig-card-meta"><span>Signal 6 &middot; 26 July 2026</span><span class="sig-card-theme">Policy</span></div>
<div class="sig-card-meta"><span>Signal 6 &middot; 26 July 2026 &middot; 6 min</span><span class="sig-card-theme">Policy</span></div>
<h2 class="sig-card-title">The Fed Might Hike on July 29, Not Cut</h2>
<p class="sig-card-claim">Consensus says the Fed&#39;s next move is a cut. Put the odds of a hike on 29 July at roughly one in three. That is not the base case, and it is far too high to ignore if you are pricing dollars.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand All @@ -169,7 +169,7 @@ <h2 class="sig-card-title">The Fed Might Hike on July 29, Not Cut</h2>

<article class="sig-card" data-theme="Macro">
<a class="sig-card-link" href="/signals/us-economy-service-power/">
<div class="sig-card-meta"><span>19 July 2026</span><span class="sig-card-theme">Macro</span></div>
<div class="sig-card-meta"><span>19 July 2026 &middot; 5 min</span><span class="sig-card-theme">Macro</span></div>
<h2 class="sig-card-title">The US Economy Dominating Through Service</h2>
<p class="sig-card-claim">US power is a service system. It profits by sitting where everyone else has to settle, and the African version of that position is not another rail.</p>
<span class="sig-card-cta">Read the Signal &rarr;</span>
Expand Down
18 changes: 17 additions & 1 deletion signals/money-got-more-expensive-except-in-nigeria/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

<main class="sig-wrap sig-article">
<a href="/signals/" class="sig-back">&larr; The Signal Archive</a>
<p class="sig-eyebrow">Capital &middot; 13 September 2026</p>
<p class="sig-eyebrow">Capital &middot; 13 September 2026 &middot; 6 min read</p>
<h1 class="sig-title">Money Got More Expensive Everywhere. Except in Nigeria.</h1>
<p class="sig-claim">The ECB hiked on Thursday and the Fed may follow on Wednesday. Nigerian treasury bills went the other way, clearing almost ten points below the policy rate. The gap is real, and the money holding it open can leave in a week.</p>
<p class="sig-byline sig-byline--top">By <a href="https://adetuyi.com" target="_blank" rel="author noopener noreferrer">Tolu Adetuyi</a></p>
Expand Down Expand Up @@ -132,6 +132,22 @@ <h2>Disclosure</h2>
<p>Tolu Adetuyi is co-founder and Chief Innovation Officer of <a href="https://prembly.com" target="_blank" rel="noopener noreferrer">Prembly</a>, which builds identity and compliance infrastructure. Signals regularly cover payments, identity and regulation, which is his commercial interest as well as his subject.</p>
</div>
</main>
<div class="sig-progress" id="sig-progress" role="presentation"></div>
<script>
(function () {
var bar = document.getElementById('sig-progress');
var article = document.querySelector('.sig-article');
if (!bar || !article) return;
var tick = function () {
var span = article.offsetHeight - window.innerHeight;
var pct = span > 0 ? (window.scrollY - article.offsetTop) / span : 1;
bar.style.width = Math.max(0, Math.min(1, pct)) * 100 + '%';
};
addEventListener('scroll', tick, { passive: true });
addEventListener('resize', tick);
tick();
}());
</script>
<footer class="footer" role="contentinfo">
<div class="container">
<div class="footer-inner">
Expand Down
Loading