<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Adam Cowley</title><description>Adam Cowley | Full Stack, Graphs, Neo4j</description><link>https://adamcowley.co.uk/</link><item><title>5.7km is not enough</title><link>https://adamcowley.co.uk/posts/5-7km-is-not-enough/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/5-7km-is-not-enough/</guid><description>AI productivity gains are real — but who actually captures the value?</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate></item><item><title>UI in the age of AI</title><link>https://adamcowley.co.uk/posts/ui-in-the-age-of-ai/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/ui-in-the-age-of-ai/</guid><description>When the backend can reason, what does it mean for the frontend?</description><pubDate>Tue, 31 Mar 2026 16:00:00 GMT</pubDate></item><item><title>Automating Voiceover with ElevenLabs: The Reality Check</title><link>https://adamcowley.co.uk/posts/ai-voice-generation-elevenlabs/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/ai-voice-generation-elevenlabs/</guid><description>An honest look at using AI voice generation for production video content—the wins, the friction, and whether it&apos;s actually worth it.</description><pubDate>Tue, 24 Mar 2026 16:00:00 GMT</pubDate></item><item><title>Turning Claude into a Football Opposition Analyst with MCP</title><link>https://adamcowley.co.uk/posts/claude-football-opposition-analyst-mcp/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/claude-football-opposition-analyst-mcp/</guid><description>How I used Model Context Protocol (MCP) to give Claude access to football event data in Neo4j, bridging the gap between raw data and actionable insights.</description><pubDate>Tue, 09 Dec 2025 22:34:00 GMT</pubDate></item><item><title>TIL: R-strings Are Essential for Regex Pattern Matching with RecursiveCharacterTextSplitter</title><link>https://adamcowley.co.uk/posts/til-r-strings-in-langchain-recursive-splitter/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/til-r-strings-in-langchain-recursive-splitter/</guid><description>The quickest way to get counts of nodes and relationships in Cypher</description><pubDate>Fri, 29 Nov 2024 00:25:00 GMT</pubDate></item><item><title>Turn your CSVs into Graphs using LLMs</title><link>https://adamcowley.co.uk/posts/llm-csv-to-graph/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/llm-csv-to-graph/</guid><description>A guide to using LLMs to generate a Graph data model from flat CSV files</description><pubDate>Fri, 27 Sep 2024 19:35:00 GMT</pubDate></item><item><title>Natural Language to Database Query with LangGraph</title><link>https://adamcowley.co.uk/posts/natural-language-to-database-query-langgraph/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/natural-language-to-database-query-langgraph/</guid><description>Natural language to database query is an integral part of Retrieval Augmented Generation (RAG).  This post outlines how to create a LangGraph workflow that writes and corrects a Cypher statement.</description><pubDate>Wed, 31 Jul 2024 07:00:40 GMT</pubDate></item><item><title>Natural Language Queries on Pandas with LangChain and DuckDB</title><link>https://adamcowley.co.uk/posts/llm-sql-duckdb/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/llm-sql-duckdb/</guid><description>Using DuckDB to perform natural language search on a Pandas DataFrame</description><pubDate>Thu, 11 Apr 2024 19:00:00 GMT</pubDate></item><item><title>TIL: Plotting Neo4j Results with Matplotlib</title><link>https://adamcowley.co.uk/posts/til-neo4j-result-matplotlib/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/til-neo4j-result-matplotlib/</guid><description>Discover the two lines of code required to convert a Neo4j result to a Pandas DataFrame and plot it with Matplotlib</description><pubDate>Wed, 13 Dec 2023 08:00:40 GMT</pubDate></item><item><title>TIL: Passing Output Parameters Between Jobs in Github Actions</title><link>https://adamcowley.co.uk/posts/til-github-action-output-parameters/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/til-github-action-output-parameters/</guid><description>How to pass the output of one command to another in a GitHub Action</description><pubDate>Tue, 12 Dec 2023 09:00:40 GMT</pubDate></item><item><title>The Abridged Guide to Neo4j Cypher Generation with OpenAI GPT-4</title><link>https://adamcowley.co.uk/posts/abridged-neo4j-cypher-generation/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/abridged-neo4j-cypher-generation/</guid><description>Learn how to build a chatbot that connects to Neo4j with minimal code and minimal Cypher.</description><pubDate>Thu, 28 Sep 2023 14:00:40 GMT</pubDate></item><item><title>TIL: Quick &amp; Convenient Cypher Counts</title><link>https://adamcowley.co.uk/posts/til-quick-cypher-counts/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/til-quick-cypher-counts/</guid><description>The quickest way to get counts of nodes and relationships in Cypher</description><pubDate>Thu, 31 Aug 2023 08:25:00 GMT</pubDate></item><item><title>Next level Cypher aggregations using WITH, COLLECT and UNWIND</title><link>https://adamcowley.co.uk/posts/cypher-window-functions/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/cypher-window-functions/</guid><description>YouTube Shorts Explained: Create a window function with Cypher using WITH, COLLECT and UNWIND.</description><pubDate>Mon, 21 Aug 2023 10:00:00 GMT</pubDate></item><item><title>Converting HTML to PDF with Node.js like it is 2023</title><link>https://adamcowley.co.uk/posts/til-html-to-pdf-nodejs/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/til-html-to-pdf-nodejs/</guid><description>Today I Learned - How to convert HTML to PDF with 4 lines of javascript.</description><pubDate>Fri, 11 Aug 2023 10:00:00 GMT</pubDate></item><item><title>Starting Over - What would I learn?</title><link>https://adamcowley.co.uk/posts/starting-over-what-would-i-learn/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/starting-over-what-would-i-learn/</guid><description>I was recently asked on a podcast what advice I would give to someone starting out in development today.  I botched the answer, this is what I should have said...</description><pubDate>Thu, 21 Jul 2022 08:00:00 GMT</pubDate></item><item><title>Calculating TF-IDF scores in Neo4j with Cypher</title><link>https://adamcowley.co.uk/posts/calculating-tf-idf-score-cypher/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/calculating-tf-idf-score-cypher/</guid><description>When extracting information from documents using NLP, attempting to separate important terms from noise can be tricky.  Calculating a TF-IDF (Term Frequency-Inverse Document Frequency) score allows you to identify the important terms in a document.</description><pubDate>Mon, 30 Aug 2021 10:01:43 GMT</pubDate></item><item><title>Analysing Football Events in a Graph Database</title><link>https://adamcowley.co.uk/posts/analysing-football-events-neo4j/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/analysing-football-events-neo4j/</guid><description>How Graph Databases can be used to analyse event sequences in sports</description><pubDate>Mon, 30 Aug 2021 10:01:43 GMT</pubDate></item><item><title>Importing Wikidata into Neo4j Using Neosemantics</title><link>https://adamcowley.co.uk/posts/importing-wikidata-neo4j/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/importing-wikidata-neo4j/</guid><description>How I imported football data from the Wikidata API into Neo4j using Neosemantics.</description><pubDate>Thu, 18 Feb 2021 10:00:00 GMT</pubDate></item><item><title>When and how to implement Sharding in Neo4j 4.0</title><link>https://adamcowley.co.uk/posts/sharding-neo4j-40/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/sharding-neo4j-40/</guid><description>When you are dealing with large volumes of data, you may need to shard your graph across many physical servers.  Here&apos;s how&amp;hellip;</description><pubDate>Wed, 15 Jan 2020 08:30:00 GMT</pubDate></item><item><title>Multi-Tenancy in Neo4j 4.0</title><link>https://adamcowley.co.uk/posts/multi-tenancy-neo4j-40/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/multi-tenancy-neo4j-40/</guid><description>How to manage and connect to multiple databases in Neo4j 4.0</description><pubDate>Wed, 15 Jan 2020 08:20:00 GMT</pubDate></item><item><title>Building a Real-Time UI on top of Neo4j with Vue.js and Kafka</title><link>https://adamcowley.co.uk/posts/real-time-ui-vuejs-neo4j-kafka/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/real-time-ui-vuejs-neo4j-kafka/</guid><description>How to build a Real-time UI on top of Neo4j with VueJS using websockets, driven by Kafka and the Neo4j Streams plugin.</description><pubDate>Tue, 07 Jan 2020 12:55:08 GMT</pubDate></item><item><title>Social Feed Cursor Based Pagination</title><link>https://adamcowley.co.uk/posts/social-feed-cursor-based-pagination/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/social-feed-cursor-based-pagination/</guid><description>How to squeeze as much peformance out of a high-traffic, high-volume social feed using Neo4j&apos;s Core API.</description><pubDate>Wed, 03 Jul 2019 13:21:20 GMT</pubDate></item><item><title>Importing Google Analytics to Neo4j via BigQuery using APOC &amp; JDBC</title><link>https://adamcowley.co.uk/posts/importing-google-analytics-to-neo4j-via-bigquery-using-apoc-jdbc/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/importing-google-analytics-to-neo4j-via-bigquery-using-apoc-jdbc/</guid><description>Take back control of your website visit data by importing it into Neo4j via BigQuery.</description><pubDate>Fri, 06 Jul 2018 10:45:54 GMT</pubDate></item><item><title>An introduction to Temporal Date Types in Neo4j</title><link>https://adamcowley.co.uk/posts/temporal-native-dates/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/temporal-native-dates/</guid><description>A comprehensive guide to using temporal types in Cypher, including Date, Time, DateTime, LocalDate, LocalDateTime and Duration.</description><pubDate>Wed, 16 May 2018 22:25:51 GMT</pubDate></item><item><title>Using the Neo4j Driver with NodeJS</title><link>https://adamcowley.co.uk/posts/using-the-neo4j-driver-with-nodejs/</link><guid isPermaLink="true">https://adamcowley.co.uk/posts/using-the-neo4j-driver-with-nodejs/</guid><description>A guide to using the Neo4j Driver in a NodeJS application</description><pubDate>Fri, 02 Mar 2018 19:15:42 GMT</pubDate></item></channel></rss>