I build the road from data to report once; then it runs on its own.
I combine six-plus years of media analytics with AI to build reporting systems: closed-loop pipelines that clean, classify, audit and turn raw data into executive reports. Whatever your data source or existing stack, I integrate with it; the difference is a measured, repeatable process.
Data Analyst · Dedecta
01 · Raw data: Each dot is a record. Nothing has been filtered yet; put into a report like this, the tone distribution would be meaningless.
02 · Relevance gate: A record whose body does not contain the brand phrase cannot pass the gate. Every removal carries a reason code; AI decides, a human audits.
03 · Taxonomy · sentiment: Two-level topics, three tones. Contradictions go into the regression set; the same error is never opened twice.
04 · Report: Charts, cards and the executive summary are placed into the template by script. Weekly preparation: from 3–4 hours to 40 minutes.
- 6+ yearsmedia analytics and reporting
- 1,000+executive reports delivered
- 150+analysis and report-generation scripts (Python)
- 7 channelsone pipeline
- 23% → 90%+recall gain in an AI spam classifier
- 3–4 h → 40 minweekly report preparation
Second brain: built before it was a trend, by making mistakes.
In a monitoring team, knowledge lives in three places: e-mail, chat and people's heads. Each bar below is a real note or decision record. Compare the three arrangements.
- Senior analystif they leave?
- Team leadif on leave?
- Mefrom memory
- Client-A.md45,113 characters · "6 bullets" and "4 bullets"
- Master-Standard.md28,371 characters
- Latest period note.md8,865 characters
- Runtime · 6router · lookup · linter · index
- Standards · 698 standards, section by section
- Projects · 72a namespace + runbook per client
- Decision records · 175dated, reasoned, superseded chain
- Period archive · 32raw observations; harvested
- Daily notes · 2418:00 automatic scan
The knowledge exists; it has no address. Each bar is a real rule or observation. It is scattered by who happens to know it; when a person leaves, it leaves with them.
Where most teams are today. The problem is not missing knowledge but missing addresses.
Collected, but not working. One big file per client. The same rule sits in two places in one file with two different values; the AI reads 74% of the pile for a single question.
A mistake I made and measured myself. It looked good.
Every record has a place, every rule has a date. A rule's value is born only in a decision record; the current state is generated from there. The router gives addresses, lookup fetches a single record, the linter counts the debt. As the vault grows, the cost of a question does not.
The architecture built on the night of 24 August. Not a line was deleted; old rules remain as "superseded".
- 700+
- notes · 8 standards, 69 sections · 32 period archives
- 175+
- dated decision records; old rules are never deleted, they become "superseded"
- 22 · 12
- linter rules · benchmarks; the debt is visible on every run
- 18:00
- every evening the team chat is scanned and work knowledge is harvested
The first version reached 95 notes in three weeks and did not work: the same file held two values for the same rule, and the AI opened 74% of the notes for a single question. I measured, then changed the architecture: a rule's value is born only in a dated decision record; the router gives addresses, not knowledge. Not a line was deleted.
An analyst leaves
The rules left with them. The new person guesses the first report by looking at old ones; the client sees the difference in the first period.
The runbook lists the 13 steps in order; each step knows which rule to read and where. The first report is indistinguishable from the last.
A person-bound bottleneck is exactly what this system solves.
A new client arrives
A blank page. The standard, taxonomy and template are pieced together from e-mails; the first three periods are a "settling-in" phase.
A new namespace is opened: profile, keywords, taxonomy and deck rules derive from the template. The first period ships with the full standard.
Setup time drops from weeks to days.
A rule changes
Someone says "it's 4 bullets now"; two of three notes get updated, one keeps saying 6. Six months later nobody knows which is right.
A single decision record is written; the old rule is not deleted, it becomes "superseded". The current state is generated automatically; the history can be queried.
Two different answers in the same file — the very crisis I lived through and measured.
An AI agent at work
From the master map the agent opens 74% of the notes in one hop; it reads 233,000 tokens and can still pick the wrong value.
The router gives the address, lookup fetches the single rule with its source. Context read for the same question drops by 91%; it does not grow with the vault.
Humans and agents work from the same source.
Ask the vault.
Ask two systems the same question: scattered notes and the decision-recorded vault. The numbers are real measurements.
How many bullets in Client A's executive summary?
Line 162 of the same file says "6 bullets"; the decision record on line 229 says "4 bullets". Any agent taking the shortcut gives the wrong answer.
- routerentity: client-a · topic: exec_summary
- current.yamlexec_summary.bullets → see DEC
- decisions/DEC-20260802-003 (active)
- historyDEC-20260721-001 → superseded
- source02.08.2026 · reason: client feedback
What font size is the analysis text under a chart?
The script default is tuned for another client; the project note holds a different value. Which one applies is left to the reader.
- routerentity: client-a · topic: text.font_pt
- current.yamltext.font_pt → see DEC
- decisions/DEC-20260812-002 (active)
- warningscript default differs: STD.qa rule
- source12.08.2026 · scope: Client A only
What happens when the spam prompt changes?
The answer is in pieces across three places; the rule "run the regression set" stayed in Slack and was never written into the standard.
- routertopic: prompt.version
- STD.qarerun_pipeline = mandatory
- testSpam_Benchmark_v2 · 137 records · 7 layers
- thresholdprecision ≥ 95% · recall ≥ 85%
- sourceDEC-20260825-011 · 25.08.2026
Which rules changed this period?
There is no change history; who changed what and when lives in e-mails.
- routerlookup --history client-a
- decisions/3 records: 02.08 · 12.08 · 25.08
- superseded2 old rules, not deleted
- linter0 ERROR · 12/12 benchmarks within budget
- sourcehistory index · automatic
"Second brain" is a popular idea today. Mine did not come from a template; it came from a real team's real questions and from measuring and fixing a system that was giving wrong answers. Making an organisation's memory independent of individuals is the real job behind every system I build.
Nine projects, zero client names.
Click a card; the problem and the approach are on the back. Sector, method and measured result are shared; names, topics and data never are.
- C0 · System designMulti-company group
Designing a closed-loop AI report-generation platform from scratch
10+ documentsBuild-ready end-to-end design packageProblemData tracking external visibility existed; no system turned it into reports top management would use. The need was not a fixed template but a closed-loop platform that produces any report requested in natural language from in-system data, with sources shown.
ApproachFrom product definition to target architecture: system boundary, a 35-field master data schema, an "orchestrator + single-purpose module agents + report state object" prompt architecture, source/confidence/audit rules. "No unsourced claim enters a report."
- C1 · AutomationRetail chain
End-to-end automation of a weekly reporting pipeline
3–4 h → 40 minWeekly preparation; person-independent with 50+ decision recordsProblemEvery week, thousands of records from 7 channels were cleaned by hand and placed into a 40+ slide deck; consistency depended on the person.
ApproachI built the path from raw CSV to deck as a modular Python pipeline; every rule is tied to a decision record and the pipeline reads values from records.
- C2 · AIIndustrial group
Redesigning a spam/relevance prompt from v1 to v2
23% → 88–96%Recall; precision held above 95%ProblemThe prompt was 97.8% right when it said "spam" but caught only 23% of irrelevant content; in one period 3,901 records leaked into reports.
ApproachRoot cause: a tie-break sentence overriding the platform rule. I rewrote the prompt around a hard phrase gate and built a 137-record, 7-layer regression set.
- C3 · AIInternal AI module
A test protocol for an AI classifier
2 axesRelevance and sentiment measured separately; a reason code on every decisionProblemOne label, two separate decisions. A single accuracy percentage conflated them; whose error is it, will it recur — there was no answer.
ApproachA protocol that measures the two axes separately, automatically catches label↔reason contradictions and checks determinism on its own; every finding has an owner.
- C4 · AIRetail chain
Evaluating a third-party AI provider
63 / 100Six-dimension scoring; non-deterministic decisions foundProblem"Is the vendor's spam analysis good?" needed a numeric answer; 2,525 records, 5 channels.
ApproachSix weighted dimensions: technical noise, off-brand content, same-name noise, duplicates, precision, decision consistency. Vendor output was compared record by record.
- C5 · KnowledgeAnalytics team
A corporate knowledge base: 700+ notes, 170+ decision records
−91%Context read for the same question: 82,349 → 7,492 charactersProblemRules lived in e-mail and memory; the AI read 82,000 characters for a single question and the same file held two different values.
ApproachA layered vault generated from decision records; router, lookup, a 22-rule linter, 12 benchmarks. Not a line was deleted.
- C6 · AutomationCorporate clients
Scheduled report delivery automation
On recordA screenshot and a log entry for every sendProblemSending reports to specific people at specific times was manual; risk of forgetting and of wrong recipients.
ApproachFixed-rule browser automation with no AI: job-folder model, a single recipient list, dry-run, evidence, logs.
- C7 · Data100+ branch chain
Matching customer reviews to branches
100+ branchesReview data gained a location dimensionProblemReviews were not matched to branches; "which branch is getting negative reviews" had no answer.
ApproachA matcher that generates query variants from the branch list and scores candidates on address/district/name tokens; results were joined to the sentiment table.
- C8 · DataBusiness magazine
Digital reputation scoring model (previous employer)
100 companiesA published index; previous employerProblemReducing hundreds of brands' digital visibility to a single comparable score.
ApproachA data structure suited to scoring, score formula design, brand query sets, sector analysis tables.
From the AI he has worked with for a year
Mustafa did not write this section. He asked the AI he has worked with for a year — on every report, every prompt, every decision record — to "describe me objectively"; the text is published as written, compliments and criticism included.
A practical builder with no patience for disorder left as disorder, who believes nothing until it is measured, and who turns whatever is in front of him into a system "so that nobody has to do this by hand again".
Three traits that stand out in a consultant
- 1Measures, then speaks.
Every recommendation is tied to a number.
- 2Leaves a system behind.
When he leaves, the work does not stop; rules stay on record, process stays in scripts.
- 3Designs privacy from day one.
What enters and leaves your data is written down on the first day.
Recurring patterns, with evidence.
- 1He builds systems, not tasks.
Asked to prepare weekly reports, he built the pipeline that produces them; asked to write a prompt, he built the test set that measures it; asked to keep notes, he built a knowledge base that defines how notes become rules. On every task he climbs one level and asks "what mechanism should produce this?" Evidence: the vault principle "a rule's value is born only in a decision record, never edited by hand" — an ordinary analyst does not write that.
- 2He does not state an opinion before measuring.
Instead of calling a vendor's spam analysis "bad", he built a six-dimension scorecard and gave it 63/100. Before saying a prompt was flawed, he computed precision and recall separately on 5,696 records and traced the root cause to a single sentence. Strong intuition, but it does not reach the table until it has become a number.
- 3He wants applied results, not theory.
In his own working profile: "Applied results are preferred over unnecessary questions and theoretical explanation." That is the instruction he gives to everyone he works with, AI included. Little patience for long explanations, vague plans or "we'll see".
- 4A standards devotee; consistency comes before creativity.
He wrote: "The report should be indistinguishable from previous periods from the client's point of view." Font size, bullet count, colour — all on record. Strong corporate discipline; also a tendency that can delay something new from becoming visible (see below).
- 5High ownership, with boundaries.
He calls the company "my livelihood"; when a special report request arrives on a weekend, he leaves a family visit to work. But he also decides to "wait" rather than deliver a report built on insufficient data — quality is not sacrificed to delivery pressure.
- 6He learns tools fast and picks them for the bottleneck, not the trend.
In one year: Python pipelines, browser automation with Playwright, an Obsidian + YAML decision system, LLM prompt engineering and a test protocol; on the side, a mobile app unrelated to work, written purely to learn. No claim of "expert" in any; "I produced something that works" in all.
- 7Privacy and boundaries are built in.
Into the system that auto-extracts his Slack digests he wrote, himself: "passwords, private life, judgements about people never enter the vault." His first sentence in this portfolio project was about confidentiality. For a consultant, this is one of the most valuable assurances a client can get.
- 8He runs many threads.
On the same days his notes hold four client reports, a product architecture, a side project and family matters. Notes are short, action-led, "[x]" checklists. He does not scatter; but the load has a visible cost (below).
Where to watch (the other half of an objective eye).
- !The system-building reflex can get ahead of the job.
He tends to build infrastructure even for one-off work; as a consultant he should tell the client explicitly when to script and when to do it by hand.
- !Tension between guarding standards and innovating.
"Don't let it be noticed" is right for client consistency; building his own brand (this site) requires being noticed. Rejecting a design as "too developer-like" and asking for "calm and innovative" shows he is aware of the tension.
- !Shorthand written for himself.
His notes and rules are written for his own eyes; explaining to clients he will need plain equivalents for "phrase gate, tie-break, regression set".
- !Load distribution.
Many parallel threads create a person-bound bottleneck — ironically the exact problem his own systems solve.
Whatever your data and your stack, let's start with a measured process.
We start with a short discovery call.
- Monitoring and reporting setupQuery sets, taxonomy, template, periodic workflow
- AI classification setup and auditPrompts, test sets, precision/recall, vendor scoring
- Report-generation automationFrom raw data to deck; QA; scheduled delivery
- Corporate knowledge base designDecision-recorded, searchable memory that AI can use