Internal · 2026-08-04 · NiCE Organic Intel

Your brief,
and the code it became.

One month ago this was a thirteen-section document and a diagram with twenty-four boxes. This is what happened to it: which parts became working code more or less word for word, the one thing we changed on purpose and why, what we built that was never asked for, and what is still just a drawing.

Told in the order it happened. The section-by-section verdicts are in 004; the diagram with build status on every box is 005. This is the story between them.

4
specs that shipped near-verbatim
31
days from brief to running engine
3
things built that you never asked for
9
of 24 diagram boxes still undrawn in code

01 — The ask

The sentence the whole system was built around

The workflow should not just “find keywords.”
It should answer: What topic is emerging? Where is it showing up? What format is winning? What team needs to act? What should they create first? Should it be amplified with paid or PR? the brief · §1, core principle

Six questions. It is worth being blunt about which of them the running system can answer today, because that is the honest measure of the last month — not how many boxes are coloured in.

Your questionAnswerable today?By what
What topic is emerging?yesDaily news clustering plus weekly velocity — rising and dying, per topic and per company
Where is it showing up?partlyNews and search demand, yes. Reddit is built but has no credentials. YouTube and LinkedIn were never started
What format is winning?noThis is your §9 Content Intelligence pass. It remains the largest single gap
What team needs to act?named, not routedEvery opportunity and brief carries a primary and supporting teams. Nothing creates a task for them
What should they create first?yesA brief with angle, hook, keywords, formats and a publish-ready LinkedIn post
Amplify with paid or PR?noYour §13 governance rules for this are written down and unimplemented
Three and a half out of six
That is the real state. The half is "what team" — the system knows the answer and cannot act on it, because acting means creating a task in a system nobody has agreed to yet.

02 — What happened when

Thirty-one days, in order

Coral marks the days that changed the design. Teal marks the days something started working.

4 July
The spine exists
Google News in, normalised, deduplicated, scored, onto a board. Your §5 node chain, minus the sources that needed someone's approval.
5 July
The score would not sit still
An audit replayed the same article twice and got 72, then 62. The model was re-judging the scale each run. This is the day your §6 rubric got split in two — §04 below.
9 July
"Which channel should the digest go to?"
Asked, and still open today. It is one word. The engine has produced 47 complete digests that no human has read.
10 July
The loop closes — on paper
Publish, wait, check, re-queue if flat. Nothing in your brief asked for this. It is still the part with no data in it.
21 July
The database moves
Off a community plugin we maintained ourselves, onto Supabase. Invisible from the outside; it is what makes the pipeline portable off a laptop later.
24 July
Search demand goes live in a day
SEMrush, from nothing to running in one working day — because the spine was already proven and a new source only has to speak the shared 12-field shape. That is the payoff of your §5 normalisation step.
30 July
Search Console access lands
The first time we could see what Google actually served for nice.com rather than what a vendor estimated. Changed what the system is for — §06.
31 July – 3 August
Four days of silence
Nothing ran. Every workflow was active; the laptop hosting them was not. Nobody noticed, because the alerting path posts to a test address. This is the strongest argument for the one-word decision from 9 July.
3 August
500 days captured, and a real bug found
Google keeps roughly sixteen months of our own search history and deletes the oldest day daily. We now hold 8.4 million rows of it. The same day, a latent fault that had been silently breaking the daily run was traced and fixed.
4 August
The first findings — and a correction
What the search data says, in 007. It also corrected an earlier headline of ours that was wrong, which is why the evidence tab in 004 now carries a superseded note.

03 — Spec as code

Four things you wrote that are running unchanged

Not paraphrased into code. These are your words, and then the same thing in the system.

The data shape

you wrote · §5
{
  "source_type": "reddit",
  "source_name": "Reddit",
  "topic": "AI call center",
  "headline": "Best AI tools for...",
  "url": "",
  "engagement": 247,
  "sentiment": "mixed",
  "brand_mentioned": false,
  "competitors_mentioned":
    ["Genesys", "Five9"],
  "content_format_detected":
    "discussion",
  "published_at": "2026-03-20..."
}
running now · workflow 004
source_type
source_name
topic
headline
url
engagement
sentiment
brand_mentioned
competitors_mentioned
content_format_detected
published_at
+ captured_at

"Normalize Signal
 (12-field schema)"

Field for field, in your order. We added one timestamp. Every source — news, search demand, Search Console — is forced through this shape, which is the single reason SEMrush took a day rather than a fortnight.

The five trigger types

you wrote · §3
Search Demand
Conversation
Format Gap
Narrative / PR
Customer Signal

"These are the trigger classes
 I'd actually use in n8n."
running now · every opportunity
trigger_type: [
  "Search Demand" |
  "Conversation"  |
  "Format Gap"    |
  "PR/Narrative"  |
  "Customer Signal"
]

multi-label, as you specified
in the §7 worked example

The thresholds

you wrote · §6
80–100 = immediate action
60–79  = queue for weekly review
40–59  = monitor only
<40    = archive
running now · workflow 002
>= 80  Immediate
>= 60  Weekly Queue  + digest
>= 40  Monitor       + board
<  40  recorded, then dropped

The schedule

you wrote · §5
"daily at 7am"

optional second run at 1pm
for fast-moving topics
running now
07:00 daily

second run: not built
(one run has been enough —
 the ledger dedupes, so a
 second pass mostly finds
 nothing new)
Why this matters more than it looks
A specification that survives contact with implementation is rare. Yours did, in the places that count: the data contract, the classification, the thresholds and the cadence. Nothing below is a criticism of the brief — the deviations are all cases where reality supplied information the brief could not have had.
The opportunity board — your 15 fields against the 15 built

Your §12 named: Opportunity ID · Topic · Trigger Type · Source · Relevance Score · Trend Score · Competitor Presence · NiCE Presence · Recommended Formats · Primary Team · Supporting Teams · Status · SLA · Business Theme · Notes.

Built: the same, with four changes. Relevance Score and Trend Score merged into one Score — two numbers invited the question "which do I sort by", and the second was never independently computable. SLA folded into Status, which now carries the tier directly (Immediate / Weekly Queue / Monitor) rather than a separate day count. Notes became Why It Matters, because a free-text field nobody owns goes stale. And we added Date and source URLs.

Your example ID format OPP-2026-031 became OPP-20260803-002-27248E67 — date, sequence, and a short hash so re-runs update the same row instead of duplicating it.

04 — The one change

Your scoring model, split down the middle

This is important. Without scoring, the workflow becomes noise. the brief · §6

You were right, and it is the one place we deliberately did not build what you drew. Here is exactly what happened to your hundred points.

Relevance 25 Conversation 15 Competitor 10 Search demand 20 Format 10 PR 10 Customer 10
your §6 rubric, 100 points50 countable · 50 judgement
became fixed arithmetic — same weight became the AI's bounded adjustment
Your factorWeightWhere it lives now
Relevance to NiCE strategic themes25unchanged Fixed lookup by topic — still worth exactly 25
Offsite conversation momentum15unchanged Engagement, on a log scale so one viral post cannot dominate
Competitor presence10merged Combined with brand presence into one 15-point component
Search demand potential20the AI's job These four are the ones a formula cannot count. They became a single bounded adjustment of −15 to +30, and the model is explicitly forbidden from re-scoring the four above it
Format gap severity10
PR / newsworthiness10
Customer relevance / proof10
Recency+15we added this Not in your rubric. A three-week-old story and today's story scored identically without it. Worth your agreement or objection
The reason, in one number
In the first version the model produced the whole 0–100 score, as your brief describes. On 5 July an audit replayed the same article twice and got 72, then 62. Nothing had changed but the run.

A board that reshuffles itself when the world has not cannot be used to decide anything, and it makes week-over-week comparison meaningless — which would have quietly destroyed the trend engine too. So the countable half moved into arithmetic and the judgement half stayed with the model, bounded and audited.

Your seven factors all survive. What changed is who does the arithmetic.

The unplanned proof
For three weeks in July the AI budget ran out. Scoring silently fell back to the fixed half and kept running — more conservatively, but it ran. Had the model still owned the whole score, the board would simply have stopped. The split was defensive engineering; it turned out to be the reason the system survived a billing lapse.

05 — Beyond the brief

Three things you did not ask for

Two are the most valuable assets the project has. One is the reason we can answer questions your brief could not have anticipated.

WhatWhy it was builtState
The outcome loop Your Workflow B ends at task creation — the system hands work out and never hears back. This adds the return arrow: register the published URL, wait 21 days, check whether it ranked, moved share of voice, or earned an AI citation. A flat verdict re-queues the topic automatically with a new angle. never used
Built, credentialed, running daily against an empty table
500 days of our own search history Your §1 lists Google organic as a surface to monitor. It turned out to be a measurement baseline: Google keeps ~16 months and deletes the oldest day daily, so this was perishable and is now unbuyable. 8.4 million rows. live
Reconciles exactly against Google's own totals
AI-answer citation tracking Your §1 names "AI Overviews / LLM citations" as a goal but no step produces it. We track which AI engines cite us: Perplexity 24, Claude 3, Gemini 3, ChatGPT 3. The eightfold gap is unexplained and is a genuine lead. stale
Last refreshed 17 June — needs a weekly run agreed with its owner
The uncomfortable one
The outcome loop is the piece we are most pleased with and the piece with nothing in it. It has never been given a single real article, because feeding it means one person pasting one URL after publishing. Until that happens, the system can rank and recommend but cannot yet prove it was right about anything.

06 — What we learned

Four things the brief could not have known

Each of these came out of building rather than planning, and each changes something.

DiscoveryWhat it changes
We were about to listen in the wrong room. The brief points Reddit monitoring at customer-service communities. Buying-intent conversation about contact-centre software actually happens in sysadmin and IT-procurement subreddits. The subreddit list, before Reddit is switched on. A cheap fix now, an expensive one after months of the wrong data.
Our own acquired brand was invisible. Cognigy generated 146,824 impressions that the pipeline did not connect to NiCE, because the entity registry did not know we had bought it. One line of configuration. It is also a warning: the registry is only as current as someone keeps it.
Ranking is not our constraint. With first-party data we could finally measure click-through by position. 88% of our non-brand visibility sits below the top three, and careers pages earn 26× the click-through of glossary pages at identical positions. It reframes §9. The format question is not only "what format wins the SERP" but "why do our own pages convert so differently from each other".
Six of our pages compete for our biggest term. For ai call center, six nice.com pages rank against each other and earned one click between them — the glossary entry outranking the commercial page. The first content action is a merge, not a brief. That is the opposite of what a "publish more" system would recommend, and the pipeline found it.
The pattern
Every one of these is the system telling us to do less, not more — fewer pages, a different room, a correction to our own configuration. A workflow designed to generate content ideas spent its first month arguing for consolidation. That is a good sign about the instrumentation and an uncomfortable one about the content estate.

07 — Still a drawing

What has not been built, and the honest reason

Nine of your twenty-four boxes have no code behind them. They are not evenly distributed, and the pattern is the point.

Not builtThe real blocker
Workflow B — task creation (§7)Not engineering. Nobody has agreed which system the tasks go into. Your §10 lists Monday.com under alerts; building it as the task system would have meant five task branches pointed at a tool no one had chosen
Content Intelligence pass (§9)The largest genuine gap and the one that answers "what format is winning". Needs no decision from anyone — it is simply not started
YouTube and LinkedInNever started. LinkedIn has real API restrictions; YouTube does not
RedditFully built and idle. Needs an app registration, and the subreddit list corrected first
Customer / VOC signalNo agreed source system. Needs a conversation with sales leadership, not a sprint
Paid and PR escalation (§13)Your governance rules are written and unimplemented. They depend on Workflow B existing
Weekly review dashboardStood in by the Sheet and these documents
The one sentence that explains the shape of all of it
Everything the system could build by itself got built. Everything that required a person to choose something — a channel, a task tool, a source system, a subreddit list — is still a drawing.

That is not a complaint about decision-making speed; it is a diagnosis. The remaining work is mostly decisions, not engineering, and they are small ones. The digest channel has been open since 9 July and is a single URL.

If three things happen next
Name the digest channel — it closes a month-old question and makes the next silent outage loud. Publish and register three briefs — it gives the outcome loop its first real data and starts calibrating the scoring weights against reality instead of judgement. Build the Content Intelligence pass — it is the biggest gap, it needs nobody's permission, and it answers the one core-principle question we currently cannot.

→ Section-by-section verdicts (004) → Your diagram, box by box (005) → How the system works now (009) → What the search data says (007)