View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
View romanmagdalenko's full-sized avatar
🏊‍♂️
I'm vibe swimmer
🏊‍♂️
I'm vibe swimmer

Block or report romanmagdalenko

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
romanmagdalenko/README.md

Roman Magdalenko

Founding Deployment Strategist. I build the pilot-to-production systems for Revenue AI startups, which is the stretch where most of them stall.

26 years in enterprise sales: VP Sales EMEA at ABBYY LS, CCO at RedLab, now founder and CEO at SalesAI. 54 enterprise deployments, and in the last three years 200+ AI pilots launched or rescued.

Based in Valencia, Spain. Open to roles here or remote.

Most of my production code lives in private repos. What I can open, I put here.

Now building

SalesAI - Revenue Intelligence platform. The approach we sell is Managed Revenue Growth: a proprietary LLM sits on a sales knowledge graph of 70+ entity nodes, pulls 19 entities out of every customer conversation, writes them back into the CRM, and turns that into a forecast, a risk list and a coaching plan for each rep. Speech analytics answers how the call went. The graph answers where the money is.

tourdecastles.com - Tour de Castles a tourism demand-distribution platform for Europe's overlooked destinations. It turns castles, cycling routes and local heritage into reasons to travel beyond the usual hotspots, then measures whether that attention becomes actual visits and local economic activity.

The product combines 900+ castle pages, route data, a 23,700-note research vault, Wikidata and a grounded knowledge graph with a behavioural layer that tracks discovery, trip intent and destination engagement.

The long-term metric is not pageviews. It is incremental visitor spending redirected to underserved territories - proving that digital discovery can move tourism demand, not just describe places.

smartsales.ai - my English writing on revenue architecture, and the EN/ES content engine that ships it.

What I actually do

  • Knowledge graphs over messy human data: entity extraction, ontology design, grounding gates, health metrics you can put in CI.
  • Revenue systems: CRM as an event pipeline (firehose into D1), anonymous-to-contact stitching, an AI SDR that runs outbound without a human in the loop.
  • Claude Code as an operating system: skills, memory architecture, crons. One founder running sales, marketing and product on it.
  • Sales methodology as code. MEDDIC, SPICED and BANT are not slides for me, they are schemas.

How the three repositories fit together

They are not a portfolio. They are one argument in three parts: what is true (the knowledge graph), what happened (the behaviour layer), and how one person executes against both (the skills).

All three were built before there was a business model to justify them, which is the point. The reasoning: Designing for Optionality.

Writing

  • smartsales.ai - Revenue Architecture, in English.
  • LinkedIn - shorter notes from the room, not from the deck.

Stack

TypeScript, React, Node. Cloudflare Workers, D1, KV, R2. Python. Postgres. Claude API and MCP servers. Wikidata and SPARQL. GitLab CI, Kubernetes, Supabase.

Reach me

LinkedIn · smartsales.ai · Book 30 minutes

Pinned Loading

  1. claude-gtm-skillsclaude-gtm-skillsPublic

    How one founder runs a B2B GTM function on Claude Code: 14 skills, 4 MCP servers, 14 scheduled agents. The architecture, the memory layer and the cron layer, sanitized.

    1

  2. castle-graph-enginecastle-graph-enginePublic

    A typed knowledge graph over 23,738 research notes, with deterministic publication gates: no auto-merge, every claim sourced, the build compares itself byte for byte.

    1

  3. crm-on-cloudflarecrm-on-cloudflarePublic

    A first-party CRM on Cloudflare's free tier: Workers, D1, Analytics Engine. Two loads and two stores, identity stitched backwards, consent that survives erasure, and the read-amplification bill tha…

    1

  4. fde-deployment-economicsfde-deployment-economicsPublic

    What an enterprise AI deployment actually costs. A runnable cost model that answers one question before you sign: at what probability of success does this purchase break even? Plus eleven questions…

    Python 1