From 3c437bf525d1de2ce8be10796b25232062825212 Mon Sep 17 00:00:00 2001 From: Jon M <> Date: Tue, 11 Nov 2025 10:38:47 -0600 Subject: [PATCH 01/10] feat: add Tag filter to tech blog --- src/components/blog/TagFilter.astro | 77 +++++ ...graveyard-of-possible-protocol-features.md | 2 +- ...nect-all-blockchains-and-value-networks.md | 3 +- ...ughts-on-scaling-interledger-connectors.md | 6 +- .../blog/2024-04-10-the-telemetry-tale.md | 2 +- .../2024-07-09-simple-open-payments-guide.md | 1 - ...4-07-30-open-payments-cinderella-story.mdx | 2 +- .../blog/2024-08-13-interledger-universe.mdx | 8 +- .../blog/2024-09-06-integration-tests.mdx | 4 +- .../2024-10-11-where-did-rafiki-money-go.mdx | 2 +- ...024-10-25-rafikis-first-security-audit.mdx | 3 +- .../blog/2024-12-11-rafiki-beta-release.mdx | 9 +- ...4-12-17-rafiki-tigerbeetle-integration.mdx | 6 +- ...25-05-06-introducing-open-payments-php.mdx | 2 +- ...2025-05-20-Introducing-publisher-tools.mdx | 2 +- .../2025-06-04-ES-El-Universo-Interledger.mdx | 4 +- ...emorable-wallet-addresses-custom-domain.md | 1 - src/pages/blog/[...page].astro | 30 +- src/pages/blog/tag/[tag]/[...page].astro | 265 ++++++++++++++++++ 19 files changed, 382 insertions(+), 47 deletions(-) create mode 100644 src/components/blog/TagFilter.astro create mode 100644 src/pages/blog/tag/[tag]/[...page].astro diff --git a/src/components/blog/TagFilter.astro b/src/components/blog/TagFilter.astro new file mode 100644 index 0000000..1e77592 --- /dev/null +++ b/src/components/blog/TagFilter.astro @@ -0,0 +1,77 @@ +--- +interface Props { + allTags: string[]; + selectedTag?: string; +} + +const { allTags, selectedTag } = Astro.props; +--- + +
+
Filter by tag:
+
+ + All + + { + allTags.map((tag) => ( + + {tag} + + )) + } +
+
+ + diff --git a/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md b/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md index 1f551ce..122c506 100644 --- a/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md +++ b/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md @@ -9,8 +9,8 @@ author_urls: - https://www.linkedin.com/in/evanmarkschwartz/ external_url: https://medium.com/interledger-blog/simplifying-interledger-the-graveyard-of-possible-protocol-features-b35bf67439be tags: + - Concepts - Interledger - - Interoperability --- As the development of the [Interledger Protocol](https://interledger.org/) (ILP) nears completion, I thought we should take a moment to remember some of the many core protocol features we’ve killed off along the way. diff --git a/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md b/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md index 27988d9..5ab58e6 100644 --- a/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md +++ b/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md @@ -10,8 +10,7 @@ author_urls: external_url: https://medium.com/xpring/interledger-how-to-interconnect-all-blockchains-and-value-networks-74f432e64543 tags: - Interledger - - Connector - - Streaming Payments + - Technical --- *By* [_Evan Schwartz_](https://www.linkedin.com/in/evanmarkschwartz/) *and* [_Vanessa Pestritto_](https://www.linkedin.com/in/vanessaalexandra/) diff --git a/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md b/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md index 869db5d..a9d18d8 100644 --- a/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md +++ b/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md @@ -9,11 +9,9 @@ author_urls: - https://www.linkedin.com/in/evanmarkschwartz/ external_url: https://medium.com/interledger-blog/thoughts-on-scaling-interledger-connectors-7e3cad0dab7f tags: + - Concepts - Interledger - - Connector - - Scaling - - Streaming Payments - - Internet Of Value + - Technical --- Streaming payments mean that Interledger connectors need to process huge volumes of Interledger packets, but the current reference implementation is hard to run at scale. My hypothesis is that we should make the connector completely stateless using an HTTP-based bilateral communication protocol. diff --git a/src/content/blog/2024-04-10-the-telemetry-tale.md b/src/content/blog/2024-04-10-the-telemetry-tale.md index b46c74d..851ba4b 100644 --- a/src/content/blog/2024-04-10-the-telemetry-tale.md +++ b/src/content/blog/2024-04-10-the-telemetry-tale.md @@ -9,7 +9,7 @@ author_urls: - https://www.linkedin.com/in/sarah-jones-ba6bb6b9 tags: - Interledger - - Telemetry + - Technical --- ## Charting the Course diff --git a/src/content/blog/2024-07-09-simple-open-payments-guide.md b/src/content/blog/2024-07-09-simple-open-payments-guide.md index 85f6d77..e9fc262 100644 --- a/src/content/blog/2024-07-09-simple-open-payments-guide.md +++ b/src/content/blog/2024-07-09-simple-open-payments-guide.md @@ -8,7 +8,6 @@ authors: author_urls: - https://www.linkedin.com/in/sarah-jones-ba6bb6b9 tags: - - Interledger - Open Payments --- diff --git a/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx b/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx index 782ef68..4bf43db 100644 --- a/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx +++ b/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx @@ -10,7 +10,7 @@ author_urls: tags: - Interledger - Open Payments - - GNAP + - Technical --- import LargeImg from '/src/components/blog/LargeImg.astro' diff --git a/src/content/blog/2024-08-13-interledger-universe.mdx b/src/content/blog/2024-08-13-interledger-universe.mdx index 1c166a8..98bf09a 100644 --- a/src/content/blog/2024-08-13-interledger-universe.mdx +++ b/src/content/blog/2024-08-13-interledger-universe.mdx @@ -9,16 +9,12 @@ authors: author_urls: - https://www.linkedin.com/in/sabineschaller tags: + - Concepts - Interledger - - Interledger Protocol - - Interledger Stack - - Interledger Foundation - Open Payments - Rafiki - - Dassie + - Technical - Web Monetization - - STREAM - - SPSP --- If you have stumbled across terms like _Interledger Protocol, Interledger Stack, Interledger Foundation, Open Payments, Rafiki, Rafiki.money, Dassie, Web Monetization (extension), STREAM, SPSP, packets_, … and you are like and you're like, “Wait, what?!” Say no more! We are here to sort through this cloud of terms and finally shed some light on the foggiest depths of the Interledger Universe. Let’s start with the obvious first term: diff --git a/src/content/blog/2024-09-06-integration-tests.mdx b/src/content/blog/2024-09-06-integration-tests.mdx index edb67ad..c7ecda9 100644 --- a/src/content/blog/2024-09-06-integration-tests.mdx +++ b/src/content/blog/2024-09-06-integration-tests.mdx @@ -8,9 +8,9 @@ authors: author_urls: - https://www.linkedin.com/in/blair-currey/ tags: - - Rafiki - Open Payments - - Testing + - Rafiki + - Technical --- import LargeImg from '/src/components/blog/LargeImg.astro' diff --git a/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx b/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx index e895cc2..f39fd55 100644 --- a/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx +++ b/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx @@ -8,7 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/nagy-timea-35483024 tags: - - Test Network + - Technical --- In the past few months we have come to know and love rafiki.money. So why did it disappear? Where did it go? diff --git a/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx b/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx index e43f12a..9cb79c5 100644 --- a/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx +++ b/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx @@ -9,8 +9,7 @@ author_urls: - https://www.linkedin.com/in/mkurapov tags: - Rafiki - - security - - audit + - Technical --- At the beginning of the year, we were in contact with a security and penetration testing company to do an audit of Rafiki. Even though the software is still in its early stages, it is essential to gather feedback early to build a strong foundation for the software's security. The primary goals of the assessment were to evaluate several Rafiki components: the GraphQL Admin APIs, the frontend Admin UI component, as well as our underlying [ILPv4 protocol](https://interledger.org/developers/get-started/). The assessment was done using Rafiki’s local playground, based on the [Open Source Security Testing Methodology Manual (OSSTMM)](https://www.isecom.org/research.html) and [Open Source Web Application Security Project (OWASP)](https://owasp.org/) methodologies. diff --git a/src/content/blog/2024-12-11-rafiki-beta-release.mdx b/src/content/blog/2024-12-11-rafiki-beta-release.mdx index 730133d..db54a71 100644 --- a/src/content/blog/2024-12-11-rafiki-beta-release.mdx +++ b/src/content/blog/2024-12-11-rafiki-beta-release.mdx @@ -8,17 +8,12 @@ authors: author_urls: - https://www.linkedin.com/in/tadej-golobic tags: + - Concepts - Interledger - - Interledger Protocol - - Interledger Stack - - Interledger Foundation - Open Payments - Rafiki - - Dassie + - Technical - Web Monetization - - STREAM - - SPSP - - Beta --- It is with great pride, and perhaps a touch of relief, that we deliver on a promise made: **[Rafiki Beta is here](https://github.com/interledger/rafiki/releases/tag/v1.0.0-beta)**. diff --git a/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx b/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx index a67aecc..643d478 100644 --- a/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx +++ b/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx @@ -9,13 +9,11 @@ author_urls: - https://github.com/koekiebox - https://www.linkedin.com/in/jason-bruwer-8110766/ tags: + - Concepts - Interledger - - Interledger Protocol - - Interledger Stack - - Interledger Foundation - Open Payments - Rafiki - - TigerBeetle + - Technical --- [Rafiki](https://rafiki.dev/) is an open-source platform that enables Account Servicing Entities (ASEs) like banks and digital wallet providers to integrate [Interledger Protocol](/developers/get-started) (ILP) functionality into their systems. diff --git a/src/content/blog/2025-05-06-introducing-open-payments-php.mdx b/src/content/blog/2025-05-06-introducing-open-payments-php.mdx index 8716abb..a3b5718 100644 --- a/src/content/blog/2025-05-06-introducing-open-payments-php.mdx +++ b/src/content/blog/2025-05-06-introducing-open-payments-php.mdx @@ -10,7 +10,7 @@ author_urls: tags: - Interledger - Open Payments - - PHP + - Technical --- ## 🎯 Why Open Payments Matters diff --git a/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx b/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx index 86054b4..5b7ac55 100644 --- a/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx +++ b/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx @@ -9,8 +9,8 @@ author_urls: - https://www.linkedin.com/in/lengyel-arpad85/ tags: - Interledger + - Technical - Web Monetization - - publisher tools --- In a digital world where supporting content owners and publishers is becoming increasingly important, we wanted to build something that didn’t just preach the value of [Web Monetization](https://webmonetization.org/) - but made it accessible and easy for anyone to use. That’s how our [publisher tools](https://webmonetization.org/tools/) came to life. diff --git a/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx b/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx index b9d4acf..0d59484 100644 --- a/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx +++ b/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx @@ -9,9 +9,9 @@ authors: author_urls: - https://www.linkedin.com/in/marianvilla/ tags: + - Concepts - Interledger - - Pagos Abiertos - - Inclusión Financiera + - Open Payments --- > ⚠️ **Nota:** Este artículo es una adaptación al español. diff --git a/src/content/blog/2025-09-09-memorable-wallet-addresses-custom-domain.md b/src/content/blog/2025-09-09-memorable-wallet-addresses-custom-domain.md index 61b4089..98985a8 100644 --- a/src/content/blog/2025-09-09-memorable-wallet-addresses-custom-domain.md +++ b/src/content/blog/2025-09-09-memorable-wallet-addresses-custom-domain.md @@ -9,7 +9,6 @@ author_urls: - https://sidvishnoi.com?ref=ilf_engg_blog tags: - Open Payments - - Web Monetization --- Wallet addresses are meant to be easy to remember or identify, unless your wallet provider chooses them for you. The address might include a long subdomain or even a random series of numbers and characters. But did you know that if you own a domain, you can set your wallet address to be the same as your domain? diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/[...page].astro index 00c99b9..553663a 100644 --- a/src/pages/blog/[...page].astro +++ b/src/pages/blog/[...page].astro @@ -1,22 +1,31 @@ --- -import { getCollection } from 'astro:content' import type { GetStaticPaths, Page } from 'astro' -import Pagination from '../../components/blog/Pagination.astro' -import BaseLayout from '../../layouts/BaseLayout.astro' -import { createExcerpt } from '../../utils/create-excerpt' +import { createExcerpt } from "../../utils/create-excerpt"; +import BaseLayout from "../../layouts/BaseLayout.astro"; +import Pagination from "../../components/blog/Pagination.astro"; +import TagFilter from "../../components/blog/TagFilter.astro"; +import { getCollection } from "astro:content"; type Props = { - page: Page -} + page: Page; + allTags: string[]; +}; export const getStaticPaths: GetStaticPaths = async ({ paginate }) => { const blogEntries = (await getCollection('blog')).sort( (a, b) => b.data.date.getTime() - a.data.date.getTime() - ) - return paginate(blogEntries, { pageSize: 10 }) -} + ); -const { page } = Astro.props + // Collect all unique tags + const allTags = [...new Set(blogEntries.flatMap((entry) => entry.data.tags))].sort(); + + return paginate(blogEntries, { + pageSize: 10, + props: { allTags } + }); +}; + +const { page, allTags } = Astro.props; --- +
    { (page.data || []).map((blogPostEntry) => { diff --git a/src/pages/blog/tag/[tag]/[...page].astro b/src/pages/blog/tag/[tag]/[...page].astro new file mode 100644 index 0000000..8a327fb --- /dev/null +++ b/src/pages/blog/tag/[tag]/[...page].astro @@ -0,0 +1,265 @@ +--- +import type { Page } from "astro"; +import type { GetStaticPaths } from "astro"; +import { createExcerpt } from "../../../../utils/create-excerpt"; +import BaseLayout from "../../../../layouts/BaseLayout.astro"; +import Pagination from "../../../../components/blog/Pagination.astro"; +import TagFilter from "../../../../components/blog/TagFilter.astro"; +import { getCollection } from "astro:content"; + +type Props = { + page: Page; + allTags: string[]; + selectedTag: string; +}; + +export const getStaticPaths: GetStaticPaths = async ({ paginate }) => { + const blogEntries = (await getCollection("blog")).sort( + (a, b) => b.data.date.getTime() - a.data.date.getTime() + ); + + // Collect all unique tags + const allTags = [...new Set(blogEntries.flatMap((entry) => entry.data.tags))].sort(); + + // Create pages for each tag + return allTags.flatMap((tag) => { + const tagSlug = tag.toLowerCase().replace(/\s+/g, "-"); + const filteredEntries = blogEntries.filter((entry) => + entry.data.tags.includes(tag) + ); + + return paginate(filteredEntries, { + params: { tag: tagSlug }, + pageSize: 10, + props: { allTags, selectedTag: tag } + }); + }); +}; + +const { page, allTags, selectedTag } = Astro.props; +--- + + +
    +
    + +
    +

    Engineering Blog

    + +

    Check out Foundation updates

    + +
    +
    + +
      + { + (page.data || []).map((blogPostEntry) => { + const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...`; + return ( +
    1. + + {blogPostEntry.data.lang ? ( + + ) : ( + + {blogPostEntry.data.title} + + )} +

      + {blogPostEntry.data.description + ? blogPostEntry.data.description + : excerpt} +

      +
    2. + ); + }) + } +
    + +
    +
    +
    + + From cd3f725f2f820a30e5ab0b8e07a4e88d056e9f67 Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Mon, 17 Nov 2025 17:52:28 +0100 Subject: [PATCH 02/10] Update src/pages/blog/tag/[tag]/[...page].astro Co-authored-by: Anca Matei <98110730+Anca2022@users.noreply.github.com> --- src/pages/blog/tag/[tag]/[...page].astro | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/blog/tag/[tag]/[...page].astro b/src/pages/blog/tag/[tag]/[...page].astro index 8a327fb..1a083d1 100644 --- a/src/pages/blog/tag/[tag]/[...page].astro +++ b/src/pages/blog/tag/[tag]/[...page].astro @@ -161,6 +161,12 @@ const { page, allTags, selectedTag } = Astro.props; padding-block-start: var(--space-l); } + .breadcrumbs li:not(:first-child)::before { + content: ">"; + display: inline-flex; + margin-inline-start: var(--space-3xs); + } + .breadcrumbs a { color: var(--color-primary); text-decoration: none; From 00d114a8f80b9e51bfb8f2c9253fa914aa2fb8a0 Mon Sep 17 00:00:00 2001 From: Jon M <> Date: Mon, 17 Nov 2025 17:54:15 +0100 Subject: [PATCH 03/10] format --- src/pages/blog/[...page].astro | 4 +++- src/pages/blog/tag/[tag]/[...page].astro | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/[...page].astro index 553663a..b97b747 100644 --- a/src/pages/blog/[...page].astro +++ b/src/pages/blog/[...page].astro @@ -17,7 +17,9 @@ export const getStaticPaths: GetStaticPaths = async ({ paginate }) => { ); // Collect all unique tags - const allTags = [...new Set(blogEntries.flatMap((entry) => entry.data.tags))].sort(); + const allTags = [ + ...new Set(blogEntries.flatMap((entry) => entry.data.tags)) + ].sort(); return paginate(blogEntries, { pageSize: 10, diff --git a/src/pages/blog/tag/[tag]/[...page].astro b/src/pages/blog/tag/[tag]/[...page].astro index 1a083d1..8818375 100644 --- a/src/pages/blog/tag/[tag]/[...page].astro +++ b/src/pages/blog/tag/[tag]/[...page].astro @@ -19,7 +19,9 @@ export const getStaticPaths: GetStaticPaths = async ({ paginate }) => { ); // Collect all unique tags - const allTags = [...new Set(blogEntries.flatMap((entry) => entry.data.tags))].sort(); + const allTags = [ + ...new Set(blogEntries.flatMap((entry) => entry.data.tags)) + ].sort(); // Create pages for each tag return allTags.flatMap((tag) => { From 7fbbdedf970ca90304139e19c88c832a5ebc0cc2 Mon Sep 17 00:00:00 2001 From: Jon M <> Date: Mon, 17 Nov 2025 17:56:40 +0100 Subject: [PATCH 04/10] format --- src/pages/blog/tag/[tag]/[...page].astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/blog/tag/[tag]/[...page].astro b/src/pages/blog/tag/[tag]/[...page].astro index 8818375..4ef2067 100644 --- a/src/pages/blog/tag/[tag]/[...page].astro +++ b/src/pages/blog/tag/[tag]/[...page].astro @@ -168,7 +168,7 @@ const { page, allTags, selectedTag } = Astro.props; display: inline-flex; margin-inline-start: var(--space-3xs); } - + .breadcrumbs a { color: var(--color-primary); text-decoration: none; From a0951b534def941c743a662df44d28f91146f1c1 Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Fri, 28 Nov 2025 00:10:30 +0000 Subject: [PATCH 05/10] lint and format --- src/components/blog/TagFilter.astro | 12 +++--- src/pages/blog/[...page].astro | 26 ++++++------- src/pages/blog/tag/[tag]/[...page].astro | 48 ++++++++++++------------ 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/components/blog/TagFilter.astro b/src/components/blog/TagFilter.astro index 1e77592..7f1d17a 100644 --- a/src/components/blog/TagFilter.astro +++ b/src/components/blog/TagFilter.astro @@ -1,10 +1,10 @@ --- interface Props { - allTags: string[]; - selectedTag?: string; + allTags: string[] + selectedTag?: string } -const { allTags, selectedTag } = Astro.props; +const { allTags, selectedTag } = Astro.props ---
    @@ -12,7 +12,7 @@ const { allTags, selectedTag } = Astro.props;
    All @@ -20,8 +20,8 @@ const { allTags, selectedTag } = Astro.props; { allTags.map((tag) => ( {tag} diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/[...page].astro index b97b747..916f40e 100644 --- a/src/pages/blog/[...page].astro +++ b/src/pages/blog/[...page].astro @@ -1,33 +1,33 @@ --- import type { GetStaticPaths, Page } from 'astro' -import { createExcerpt } from "../../utils/create-excerpt"; -import BaseLayout from "../../layouts/BaseLayout.astro"; -import Pagination from "../../components/blog/Pagination.astro"; -import TagFilter from "../../components/blog/TagFilter.astro"; -import { getCollection } from "astro:content"; +import { createExcerpt } from '../../utils/create-excerpt' +import BaseLayout from '../../layouts/BaseLayout.astro' +import Pagination from '../../components/blog/Pagination.astro' +import TagFilter from '../../components/blog/TagFilter.astro' +import { getCollection } from 'astro:content' type Props = { - page: Page; - allTags: string[]; -}; + page: Page + allTags: string[] +} export const getStaticPaths: GetStaticPaths = async ({ paginate }) => { const blogEntries = (await getCollection('blog')).sort( (a, b) => b.data.date.getTime() - a.data.date.getTime() - ); + ) // Collect all unique tags const allTags = [ ...new Set(blogEntries.flatMap((entry) => entry.data.tags)) - ].sort(); + ].sort() return paginate(blogEntries, { pageSize: 10, props: { allTags } - }); -}; + }) +} -const { page, allTags } = Astro.props; +const { page, allTags } = Astro.props --- { - const blogEntries = (await getCollection("blog")).sort( + const blogEntries = (await getCollection('blog')).sort( (a, b) => b.data.date.getTime() - a.data.date.getTime() - ); + ) // Collect all unique tags const allTags = [ ...new Set(blogEntries.flatMap((entry) => entry.data.tags)) - ].sort(); + ].sort() // Create pages for each tag return allTags.flatMap((tag) => { - const tagSlug = tag.toLowerCase().replace(/\s+/g, "-"); + const tagSlug = tag.toLowerCase().replace(/\s+/g, '-') const filteredEntries = blogEntries.filter((entry) => entry.data.tags.includes(tag) - ); + ) return paginate(filteredEntries, { params: { tag: tagSlug }, pageSize: 10, props: { allTags, selectedTag: tag } - }); - }); -}; + }) + }) +} -const { page, allTags, selectedTag } = Astro.props; +const { page, allTags, selectedTag } = Astro.props ---
    @@ -97,7 +97,7 @@ const { page, allTags, selectedTag } = Astro.props;
      { (page.data || []).map((blogPostEntry) => { - const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...`; + const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...` return (
    1. - ); + ) }) }
    @@ -164,7 +164,7 @@ const { page, allTags, selectedTag } = Astro.props; } .breadcrumbs li:not(:first-child)::before { - content: ">"; + content: '>'; display: inline-flex; margin-inline-start: var(--space-3xs); } From 1b72c521dc94145d5ff41c2f1c63834d0f183265 Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Mon, 1 Dec 2025 17:46:51 +0100 Subject: [PATCH 06/10] fix: add tag url helper + dropshadow --- src/components/blog/TagFilter.astro | 5 ++++- src/pages/blog/tag/[tag]/[...page].astro | 3 ++- src/utils/tag-url.js | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/utils/tag-url.js diff --git a/src/components/blog/TagFilter.astro b/src/components/blog/TagFilter.astro index 7f1d17a..bc7d866 100644 --- a/src/components/blog/TagFilter.astro +++ b/src/components/blog/TagFilter.astro @@ -1,4 +1,6 @@ --- +import { getTagUrl } from '../../utils/tag-url' + interface Props { allTags: string[] selectedTag?: string @@ -20,7 +22,7 @@ const { allTags, selectedTag } = Astro.props { allTags.map((tag) => (
    @@ -58,6 +60,7 @@ const { allTags, selectedTag } = Astro.props font-size: var(--step--1); text-decoration: none; color: var(--color-text); + box-shadow: var(--box-shadow); transition: background-color 200ms ease-in-out, color 200ms ease-in-out, diff --git a/src/pages/blog/tag/[tag]/[...page].astro b/src/pages/blog/tag/[tag]/[...page].astro index 74bd2d5..5fa4161 100644 --- a/src/pages/blog/tag/[tag]/[...page].astro +++ b/src/pages/blog/tag/[tag]/[...page].astro @@ -2,6 +2,7 @@ import type { Page } from 'astro' import type { GetStaticPaths } from 'astro' import { createExcerpt } from '../../../../utils/create-excerpt' +import { getTagSlug } from '../../../../utils/tag-url' import BaseLayout from '../../../../layouts/BaseLayout.astro' import Pagination from '../../../../components/blog/Pagination.astro' import TagFilter from '../../../../components/blog/TagFilter.astro' @@ -25,7 +26,7 @@ export const getStaticPaths: GetStaticPaths = async ({ paginate }) => { // Create pages for each tag return allTags.flatMap((tag) => { - const tagSlug = tag.toLowerCase().replace(/\s+/g, '-') + const tagSlug = getTagSlug(tag) const filteredEntries = blogEntries.filter((entry) => entry.data.tags.includes(tag) ) diff --git a/src/utils/tag-url.js b/src/utils/tag-url.js new file mode 100644 index 0000000..9c33143 --- /dev/null +++ b/src/utils/tag-url.js @@ -0,0 +1,19 @@ +/** + * Converts a tag name to a URL-friendly slug and returns the full tag URL path + * @param {string} tag - The tag name + * @returns {string} The tag URL path (e.g., "/developers/blog/tag/my-tag") + */ +export function getTagUrl(tag) { + const slug = tag.toLowerCase().replace(/\s+/g, '-') + return `/developers/blog/tag/${slug}` +} + +/** + * Converts a tag name to a URL-friendly slug + * @param {string} tag - The tag name + * @returns {string} The tag slug (e.g., "my-tag") + */ +export function getTagSlug(tag) { + return tag.toLowerCase().replace(/\s+/g, '-') +} + From fedd0af4c6998f4f94f64ea542d53ec902eb7e15 Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Mon, 1 Dec 2025 17:50:14 +0100 Subject: [PATCH 07/10] update tag names --- README.md | 17 +++++++++++++++++ ...e-graveyard-of-possible-protocol-features.md | 3 +-- ...onnect-all-blockchains-and-value-networks.md | 3 +-- ...houghts-on-scaling-interledger-connectors.md | 4 +--- .../blog/2024-04-10-the-telemetry-tale.md | 4 ++-- .../2024-07-09-simple-open-payments-guide.md | 1 + ...024-07-30-open-payments-cinderella-story.mdx | 4 ++-- .../blog/2024-08-13-interledger-universe.mdx | 4 +--- .../blog/2024-09-06-integration-tests.mdx | 2 +- .../2024-09-23-rafiki-code-architecture.mdx | 1 + .../2024-10-11-where-did-rafiki-money-go.mdx | 2 +- .../2024-10-25-rafikis-first-security-audit.mdx | 2 +- ...4-12-03-e2e-testing-wm-browser-extension.mdx | 1 + .../blog/2024-12-11-rafiki-beta-release.mdx | 5 ++--- ...024-12-17-rafiki-tigerbeetle-integration.mdx | 5 ++--- .../blog/2025-02-05-ilp-packet-lifecycle.mdx | 2 +- .../blog/2025-03-12-breakpoint-it-work-week.mdx | 2 +- ...2025-05-06-introducing-open-payments-php.mdx | 4 ++-- .../2025-05-20-Introducing-publisher-tools.mdx | 4 ++-- .../2025-06-04-ES-El-Universo-Interledger.mdx | 3 +-- ...2025-09-30-wallet-address-smart-redirect.mdx | 3 ++- 21 files changed, 44 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 3000e0e..0abbac8 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,23 @@ If you're unsure how to structure your writing, you can use this as a guide. Ideal Word Count: Between 1,000 and 2,500 words, with links to relevant documents/pages for a deeper understanding. +### Blog metadata and tags + +Each blog post includes frontmatter at the top of the file (title, description, date, authors, etc.), including a `tags` field used for filtering on the blog index. + +Please **only use the existing, approved tags** unless you have aligned with the tech + comms team on adding a new one. This helps keep the tag filter focused and avoids fragmentation. + +**Current tags:** + +- Concepts +- Interledger +- Open Payments +- Rafiki +- Technical +- Web Monetization + +If you believe your post needs a new tag, propose it in your PR description or in the `#tech-team` Slack channel so we can decide whether to add it and update this list. + ### Getting Started Discuss Ideas: Before starting, share your blog post ideas with the tech team to ensure alignment and awareness. diff --git a/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md b/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md index 122c506..900a670 100644 --- a/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md +++ b/src/content/blog/2018-01-29-simplifying-interledger-the-graveyard-of-possible-protocol-features.md @@ -9,8 +9,7 @@ author_urls: - https://www.linkedin.com/in/evanmarkschwartz/ external_url: https://medium.com/interledger-blog/simplifying-interledger-the-graveyard-of-possible-protocol-features-b35bf67439be tags: - - Concepts - - Interledger + - Interledger Protocol --- As the development of the [Interledger Protocol](https://interledger.org/) (ILP) nears completion, I thought we should take a moment to remember some of the many core protocol features we’ve killed off along the way. diff --git a/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md b/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md index 5ab58e6..d07ca97 100644 --- a/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md +++ b/src/content/blog/2018-10-03-interledger-how-to-interconnect-all-blockchains-and-value-networks.md @@ -9,8 +9,7 @@ author_urls: - https://www.linkedin.com/in/evanmarkschwartz/ external_url: https://medium.com/xpring/interledger-how-to-interconnect-all-blockchains-and-value-networks-74f432e64543 tags: - - Interledger - - Technical + - Interledger Protocol --- *By* [_Evan Schwartz_](https://www.linkedin.com/in/evanmarkschwartz/) *and* [_Vanessa Pestritto_](https://www.linkedin.com/in/vanessaalexandra/) diff --git a/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md b/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md index a9d18d8..fd465c3 100644 --- a/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md +++ b/src/content/blog/2019-01-23-thoughts-on-scaling-interledger-connectors.md @@ -9,9 +9,7 @@ author_urls: - https://www.linkedin.com/in/evanmarkschwartz/ external_url: https://medium.com/interledger-blog/thoughts-on-scaling-interledger-connectors-7e3cad0dab7f tags: - - Concepts - - Interledger - - Technical + - Interledger Protocol --- Streaming payments mean that Interledger connectors need to process huge volumes of Interledger packets, but the current reference implementation is hard to run at scale. My hypothesis is that we should make the connector completely stateless using an HTTP-based bilateral communication protocol. diff --git a/src/content/blog/2024-04-10-the-telemetry-tale.md b/src/content/blog/2024-04-10-the-telemetry-tale.md index 851ba4b..0bc25c4 100644 --- a/src/content/blog/2024-04-10-the-telemetry-tale.md +++ b/src/content/blog/2024-04-10-the-telemetry-tale.md @@ -8,8 +8,8 @@ authors: author_urls: - https://www.linkedin.com/in/sarah-jones-ba6bb6b9 tags: - - Interledger - - Technical + - Interledger Protocol + - Updates --- ## Charting the Course diff --git a/src/content/blog/2024-07-09-simple-open-payments-guide.md b/src/content/blog/2024-07-09-simple-open-payments-guide.md index e9fc262..f94c7f6 100644 --- a/src/content/blog/2024-07-09-simple-open-payments-guide.md +++ b/src/content/blog/2024-07-09-simple-open-payments-guide.md @@ -9,6 +9,7 @@ author_urls: - https://www.linkedin.com/in/sarah-jones-ba6bb6b9 tags: - Open Payments + - Interledger Protocol --- ## The Current Digital Payments Landscape diff --git a/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx b/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx index 4bf43db..039d313 100644 --- a/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx +++ b/src/content/blog/2024-07-30-open-payments-cinderella-story.mdx @@ -8,9 +8,9 @@ authors: author_urls: - https://www.linkedin.com/in/nathan-lie-138a73121 tags: - - Interledger + - Interledger Protocol - Open Payments - - Technical + - Updates --- import LargeImg from '/src/components/blog/LargeImg.astro' diff --git a/src/content/blog/2024-08-13-interledger-universe.mdx b/src/content/blog/2024-08-13-interledger-universe.mdx index 98bf09a..1f695af 100644 --- a/src/content/blog/2024-08-13-interledger-universe.mdx +++ b/src/content/blog/2024-08-13-interledger-universe.mdx @@ -9,11 +9,9 @@ authors: author_urls: - https://www.linkedin.com/in/sabineschaller tags: - - Concepts - - Interledger + - Interledger Protocol - Open Payments - Rafiki - - Technical - Web Monetization --- diff --git a/src/content/blog/2024-09-06-integration-tests.mdx b/src/content/blog/2024-09-06-integration-tests.mdx index c7ecda9..713698b 100644 --- a/src/content/blog/2024-09-06-integration-tests.mdx +++ b/src/content/blog/2024-09-06-integration-tests.mdx @@ -10,7 +10,7 @@ author_urls: tags: - Open Payments - Rafiki - - Technical + - Interledger Protocol --- import LargeImg from '/src/components/blog/LargeImg.astro' diff --git a/src/content/blog/2024-09-23-rafiki-code-architecture.mdx b/src/content/blog/2024-09-23-rafiki-code-architecture.mdx index f85b2ae..c295497 100644 --- a/src/content/blog/2024-09-23-rafiki-code-architecture.mdx +++ b/src/content/blog/2024-09-23-rafiki-code-architecture.mdx @@ -9,6 +9,7 @@ author_urls: - https://www.linkedin.com/in/nathan-lie-138a73121 tags: - Rafiki + - Interledger Protocol --- import LargeImg from '/src/components/blog/LargeImg.astro' diff --git a/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx b/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx index f39fd55..4bb1711 100644 --- a/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx +++ b/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx @@ -8,7 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/nagy-timea-35483024 tags: - - Technical + - Updates --- In the past few months we have come to know and love rafiki.money. So why did it disappear? Where did it go? diff --git a/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx b/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx index 9cb79c5..81f6ea6 100644 --- a/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx +++ b/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx @@ -9,7 +9,7 @@ author_urls: - https://www.linkedin.com/in/mkurapov tags: - Rafiki - - Technical + - Updates --- At the beginning of the year, we were in contact with a security and penetration testing company to do an audit of Rafiki. Even though the software is still in its early stages, it is essential to gather feedback early to build a strong foundation for the software's security. The primary goals of the assessment were to evaluate several Rafiki components: the GraphQL Admin APIs, the frontend Admin UI component, as well as our underlying [ILPv4 protocol](https://interledger.org/developers/get-started/). The assessment was done using Rafiki’s local playground, based on the [Open Source Security Testing Methodology Manual (OSSTMM)](https://www.isecom.org/research.html) and [Open Source Web Application Security Project (OWASP)](https://owasp.org/) methodologies. diff --git a/src/content/blog/2024-12-03-e2e-testing-wm-browser-extension.mdx b/src/content/blog/2024-12-03-e2e-testing-wm-browser-extension.mdx index d307e25..00393d0 100644 --- a/src/content/blog/2024-12-03-e2e-testing-wm-browser-extension.mdx +++ b/src/content/blog/2024-12-03-e2e-testing-wm-browser-extension.mdx @@ -9,6 +9,7 @@ author_urls: - https://sidvishnoi.com?ref=ilf_engg_blog tags: - Web Monetization + - Interledger Protocol --- A sharp test suite anticipates problems, catching them before they surprise users. As developers, we often get a bit too familiar with our own code. With our inevitably biased views, we often end up overlooking issues from outlier scenarios, or usability considerations, all the way to the "oops" bugs. End-to-end tests help us view the product more objectively, from a user's perspective. Automating these tests saves time and ensures consistent quality throughout the development process. diff --git a/src/content/blog/2024-12-11-rafiki-beta-release.mdx b/src/content/blog/2024-12-11-rafiki-beta-release.mdx index db54a71..1c126d4 100644 --- a/src/content/blog/2024-12-11-rafiki-beta-release.mdx +++ b/src/content/blog/2024-12-11-rafiki-beta-release.mdx @@ -8,12 +8,11 @@ authors: author_urls: - https://www.linkedin.com/in/tadej-golobic tags: - - Concepts - - Interledger + - Interledger Protocol - Open Payments - Rafiki - - Technical - Web Monetization + - Updates --- It is with great pride, and perhaps a touch of relief, that we deliver on a promise made: **[Rafiki Beta is here](https://github.com/interledger/rafiki/releases/tag/v1.0.0-beta)**. diff --git a/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx b/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx index 643d478..9414f9d 100644 --- a/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx +++ b/src/content/blog/2024-12-17-rafiki-tigerbeetle-integration.mdx @@ -9,11 +9,10 @@ author_urls: - https://github.com/koekiebox - https://www.linkedin.com/in/jason-bruwer-8110766/ tags: - - Concepts - - Interledger + - Interledger Protocol - Open Payments - Rafiki - - Technical + - Updates --- [Rafiki](https://rafiki.dev/) is an open-source platform that enables Account Servicing Entities (ASEs) like banks and digital wallet providers to integrate [Interledger Protocol](/developers/get-started) (ILP) functionality into their systems. diff --git a/src/content/blog/2025-02-05-ilp-packet-lifecycle.mdx b/src/content/blog/2025-02-05-ilp-packet-lifecycle.mdx index ec5f426..04d8fc8 100644 --- a/src/content/blog/2025-02-05-ilp-packet-lifecycle.mdx +++ b/src/content/blog/2025-02-05-ilp-packet-lifecycle.mdx @@ -8,7 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/nathan-lie-138a73121 tags: - - Interledger + - Interledger Protocol --- ## Introduction diff --git a/src/content/blog/2025-03-12-breakpoint-it-work-week.mdx b/src/content/blog/2025-03-12-breakpoint-it-work-week.mdx index 2fa7ad4..bce4ebd 100644 --- a/src/content/blog/2025-03-12-breakpoint-it-work-week.mdx +++ b/src/content/blog/2025-03-12-breakpoint-it-work-week.mdx @@ -8,7 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/nagy-timea-35483024 tags: - - Interledger + - Interledger Protocol --- After shaking off the January blues, the Interledger Engineering Managers and Product Managers gathered with the BreakPoint IT team for a productive work week in Cluj-Napoca, Romania. diff --git a/src/content/blog/2025-05-06-introducing-open-payments-php.mdx b/src/content/blog/2025-05-06-introducing-open-payments-php.mdx index a3b5718..c927ff2 100644 --- a/src/content/blog/2025-05-06-introducing-open-payments-php.mdx +++ b/src/content/blog/2025-05-06-introducing-open-payments-php.mdx @@ -8,9 +8,9 @@ authors: author_urls: - https://www.linkedin.com/in/adiboros/ tags: - - Interledger + - Interledger Protocol - Open Payments - - Technical + - Updates --- ## 🎯 Why Open Payments Matters diff --git a/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx b/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx index 5b7ac55..191625a 100644 --- a/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx +++ b/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx @@ -8,8 +8,8 @@ authors: author_urls: - https://www.linkedin.com/in/lengyel-arpad85/ tags: - - Interledger - - Technical + - Interledger Protocol + - Updates - Web Monetization --- diff --git a/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx b/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx index 0d59484..adf9c30 100644 --- a/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx +++ b/src/content/blog/2025-06-04-ES-El-Universo-Interledger.mdx @@ -9,8 +9,7 @@ authors: author_urls: - https://www.linkedin.com/in/marianvilla/ tags: - - Concepts - - Interledger + - Interledger Protocol - Open Payments --- diff --git a/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx b/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx index 2598718..92c86cf 100644 --- a/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx +++ b/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx @@ -8,8 +8,9 @@ authors: author_urls: - https://www.linkedin.com/in/nodejs-dev/ tags: - - Interledger + - Interledger Protocol - Rafiki + - Updates --- When you think of a **wallet address**, you probably think of a string of characters (or in Open Payments's case, a neat URL) that acts as a source or destination for payments. For example: From 8e39465840129702f243c074579ef5530c048beb Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Mon, 1 Dec 2025 17:51:28 +0100 Subject: [PATCH 08/10] feat: refactor blogIndex - used between index / es and page --- src/components/blog/BlogIndex.astro | 257 +++++++++++++++++++++++ src/pages/blog/[...page].astro | 230 ++------------------ src/pages/blog/es.astro | 206 ++---------------- src/pages/blog/tag/[tag]/[...page].astro | 256 +++------------------- 4 files changed, 327 insertions(+), 622 deletions(-) create mode 100644 src/components/blog/BlogIndex.astro diff --git a/src/components/blog/BlogIndex.astro b/src/components/blog/BlogIndex.astro new file mode 100644 index 0000000..55cfdd8 --- /dev/null +++ b/src/components/blog/BlogIndex.astro @@ -0,0 +1,257 @@ +--- +import { createExcerpt } from '../../utils/create-excerpt' +import TagFilter from './TagFilter.astro' +import Pagination from './Pagination.astro' +import type { CollectionEntry } from 'astro:content' + +interface BreadcrumbItem { + name: string + href: string + umamiEvent: string +} + +interface Props { + title: string + posts: CollectionEntry<'blog'>[] + breadcrumbs?: BreadcrumbItem[] + allTags?: string[] + selectedTag?: string + showTagFilter?: boolean + showPagination?: boolean + paginationProps?: { + length: number + currentPage: number + firstUrl: string | undefined + prevUrl: string | undefined + nextUrl: string | undefined + lastUrl: string | undefined + } +} + +const { + title, + posts, + breadcrumbs = [], + allTags = [], + selectedTag, + showTagFilter = false, + showPagination = false, + paginationProps +} = Astro.props +--- + +
    +
    + {breadcrumbs.length > 0 && ( + + )} +
    +

    {title}

    + +

    Check out Foundation updates

    + +
    +
    + {showTagFilter && } +
      + {posts.map((blogPostEntry) => { + const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...` + return ( +
    1. + + {blogPostEntry.data.lang ? ( + + ) : ( + + {blogPostEntry.data.title} + + )} +

      + {blogPostEntry.data.description + ? blogPostEntry.data.description + : excerpt} +

      +
    2. + ) + })} +
    + {showPagination && paginationProps && ( + + )} +
    +
    + + + diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/[...page].astro index 916f40e..d4c3ebe 100644 --- a/src/pages/blog/[...page].astro +++ b/src/pages/blog/[...page].astro @@ -1,9 +1,7 @@ --- import type { GetStaticPaths, Page } from 'astro' -import { createExcerpt } from '../../utils/create-excerpt' import BaseLayout from '../../layouts/BaseLayout.astro' -import Pagination from '../../components/blog/Pagination.astro' -import TagFilter from '../../components/blog/TagFilter.astro' +import BlogIndex from '../../components/blog/BlogIndex.astro' import { getCollection } from 'astro:content' type Props = { @@ -35,208 +33,26 @@ const { page, allTags } = Astro.props description="Hear stories and experiences from the team who is working on making Interledger, the interoperable global payments network, a reality." ogImageUrl={new URL('/developers/img/blog/og-image.png', Astro.site).href} > -
    -
    - -
    -

    Engineering Blog

    - -

    Check out Foundation updates

    - -
    -
    - -
      - { - (page.data || []).map((blogPostEntry) => { - const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...` - return ( -
    1. - - {blogPostEntry.data.lang ? ( - - ) : ( - - {blogPostEntry.data.title} - - )} -

      - {blogPostEntry.data.description - ? blogPostEntry.data.description - : excerpt} -

      -
    2. - ) - }) - } -
    - -
    -
    + - - diff --git a/src/pages/blog/es.astro b/src/pages/blog/es.astro index 8f11009..b851ea3 100644 --- a/src/pages/blog/es.astro +++ b/src/pages/blog/es.astro @@ -1,9 +1,9 @@ --- import { getCollection } from 'astro:content' import BaseLayout from '../../layouts/BaseLayout.astro' -import { createExcerpt } from '../../utils/create-excerpt' +import BlogIndex from '../../components/blog/BlogIndex.astro' -// Only return posts with `draft: true` in the frontmatter +// Only return posts with `lang: 'es'` in the frontmatter const esEntries = await getCollection('blog', ({ data }) => { return data.lang === 'es' }) @@ -14,190 +14,20 @@ const esEntries = await getCollection('blog', ({ data }) => { description="Hear stories and experiences from the team who is working on making Interledger, the interoperable global payments network, a reality." ogImageUrl={new URL('/developers/img/blog/og-image.png', Astro.site).href} > -
    -
    - -
    -

    Blog de Ingeniería

    - -

    Check out Foundation updates

    - -
    -
    -
      - { - esEntries.map((blogPostEntry) => { - const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...` - return ( -
    1. - - - {blogPostEntry.data.title} - -

      - {blogPostEntry.data.description - ? blogPostEntry.data.description - : excerpt} -

      -
    2. - ) - }) - } -
    -
    -
    + - - diff --git a/src/pages/blog/tag/[tag]/[...page].astro b/src/pages/blog/tag/[tag]/[...page].astro index 5fa4161..2749815 100644 --- a/src/pages/blog/tag/[tag]/[...page].astro +++ b/src/pages/blog/tag/[tag]/[...page].astro @@ -1,11 +1,9 @@ --- import type { Page } from 'astro' import type { GetStaticPaths } from 'astro' -import { createExcerpt } from '../../../../utils/create-excerpt' import { getTagSlug } from '../../../../utils/tag-url' import BaseLayout from '../../../../layouts/BaseLayout.astro' -import Pagination from '../../../../components/blog/Pagination.astro' -import TagFilter from '../../../../components/blog/TagFilter.astro' +import BlogIndex from '../../../../components/blog/BlogIndex.astro' import { getCollection } from 'astro:content' type Props = { @@ -47,228 +45,32 @@ const { page, allTags, selectedTag } = Astro.props description={`Blog posts tagged with ${selectedTag}`} ogImageUrl={new URL('/developers/img/blog/og-image.png', Astro.site).href} > -
    -
    - -
    -

    Engineering Blog

    - -

    Check out Foundation updates

    - -
    -
    - -
      - { - (page.data || []).map((blogPostEntry) => { - const excerpt = `${createExcerpt(blogPostEntry.body).substring(0, 300)}...` - return ( -
    1. - - {blogPostEntry.data.lang ? ( - - ) : ( - - {blogPostEntry.data.title} - - )} -

      - {blogPostEntry.data.description - ? blogPostEntry.data.description - : excerpt} -

      -
    2. - ) - }) - } -
    - -
    -
    + - - From e59d1cfcea75a22641f3ce235a5944b3b59ce1e9 Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Mon, 1 Dec 2025 17:53:59 +0100 Subject: [PATCH 09/10] update tag filters hover style --- src/components/blog/TagFilter.astro | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/blog/TagFilter.astro b/src/components/blog/TagFilter.astro index bc7d866..ea9d275 100644 --- a/src/components/blog/TagFilter.astro +++ b/src/components/blog/TagFilter.astro @@ -64,12 +64,15 @@ const { allTags, selectedTag } = Astro.props transition: background-color 200ms ease-in-out, color 200ms ease-in-out, - border-color 200ms ease-in-out; + border-color 200ms ease-in-out, + text-decoration 200ms ease-in-out; } .tag-button:hover { - background-color: var(--color-primary-light); + background-color: white; border-color: var(--color-primary); + color: var(--color-text); + text-decoration: underline; } .tag-button.active { From fd6bee32f715750f83059907ece7eac296534266 Mon Sep 17 00:00:00 2001 From: Jonathan Matthey Date: Mon, 1 Dec 2025 18:05:42 +0100 Subject: [PATCH 10/10] update tags --- README.md | 10 +++++----- src/content/blog/2024-04-10-the-telemetry-tale.md | 2 +- .../blog/2024-10-11-where-did-rafiki-money-go.mdx | 3 +++ .../blog/2024-10-25-rafikis-first-security-audit.mdx | 1 + src/content/blog/2024-12-11-rafiki-beta-release.mdx | 1 + .../blog/2025-05-06-introducing-open-payments-php.mdx | 1 + .../blog/2025-05-20-Introducing-publisher-tools.mdx | 1 + .../blog/2025-09-30-wallet-address-smart-redirect.mdx | 1 + 8 files changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0abbac8..425dc6c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Source code for the /developer-tools portion of [Interledger.org](https://interl Inside this project, you'll see the following folders and files: -``` +```text . ├── public/ ├── src/ @@ -106,12 +106,12 @@ Please **only use the existing, approved tags** unless you have aligned with the **Current tags:** -- Concepts -- Interledger +- Interledger Protocol - Open Payments -- Rafiki -- Technical - Web Monetization +- Rafiki +- Updates +- Releases If you believe your post needs a new tag, propose it in your PR description or in the `#tech-team` Slack channel so we can decide whether to add it and update this list. diff --git a/src/content/blog/2024-04-10-the-telemetry-tale.md b/src/content/blog/2024-04-10-the-telemetry-tale.md index 0bc25c4..ddbbfd5 100644 --- a/src/content/blog/2024-04-10-the-telemetry-tale.md +++ b/src/content/blog/2024-04-10-the-telemetry-tale.md @@ -45,7 +45,7 @@ We ran into a roadblock when we realized that AWS-managed Grafana does not allow Despite Grafana Cloud’s responsive support team, we also encountered issues adding the AWS-Managed Prometheus as a data source. Our [sigv4 authentication](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) failed with a 403 Forbidden response, despite having the appropriate IAM permissions. The issue resolved spontaneously without clear intervention, implying an external factor (potentially AWS-side changes or maintenance) was at play. -You can view our public dashboard for test data telemetry [here](https://rafikitelemetry.grafana.net/public-dashboards/f70c8a6033b14da5a9f1cb974def602a). +You can view our public dashboard for test data telemetry on [Grafana Cloud](https://rafikitelemetry.grafana.net/public-dashboards/f70c8a6033b14da5a9f1cb974def602a). Here is an example of how it looks: diff --git a/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx b/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx index 4bb1711..fb913a0 100644 --- a/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx +++ b/src/content/blog/2024-10-11-where-did-rafiki-money-go.mdx @@ -8,6 +8,9 @@ authors: author_urls: - https://www.linkedin.com/in/nagy-timea-35483024 tags: + - Rafiki + - Interledger Protocol + - Open Payments - Updates --- diff --git a/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx b/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx index 81f6ea6..af0d16a 100644 --- a/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx +++ b/src/content/blog/2024-10-25-rafikis-first-security-audit.mdx @@ -9,6 +9,7 @@ author_urls: - https://www.linkedin.com/in/mkurapov tags: - Rafiki + - Interledger Protocol - Updates --- diff --git a/src/content/blog/2024-12-11-rafiki-beta-release.mdx b/src/content/blog/2024-12-11-rafiki-beta-release.mdx index 1c126d4..63ef2db 100644 --- a/src/content/blog/2024-12-11-rafiki-beta-release.mdx +++ b/src/content/blog/2024-12-11-rafiki-beta-release.mdx @@ -8,6 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/tadej-golobic tags: + - Releases - Interledger Protocol - Open Payments - Rafiki diff --git a/src/content/blog/2025-05-06-introducing-open-payments-php.mdx b/src/content/blog/2025-05-06-introducing-open-payments-php.mdx index c927ff2..227c9aa 100644 --- a/src/content/blog/2025-05-06-introducing-open-payments-php.mdx +++ b/src/content/blog/2025-05-06-introducing-open-payments-php.mdx @@ -8,6 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/adiboros/ tags: + - Releases - Interledger Protocol - Open Payments - Updates diff --git a/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx b/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx index 191625a..280dd04 100644 --- a/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx +++ b/src/content/blog/2025-05-20-Introducing-publisher-tools.mdx @@ -8,6 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/lengyel-arpad85/ tags: + - Releases - Interledger Protocol - Updates - Web Monetization diff --git a/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx b/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx index 92c86cf..65ad355 100644 --- a/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx +++ b/src/content/blog/2025-09-30-wallet-address-smart-redirect.mdx @@ -8,6 +8,7 @@ authors: author_urls: - https://www.linkedin.com/in/nodejs-dev/ tags: + - Releases - Interledger Protocol - Rafiki - Updates