    <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="https://lhero.org/wp-content/plugins/lh-private-feeds/xsl/template.xsl"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" >

<channel>
	<title>Portfolios &#8211; LocalHero Org</title>
	<atom:link href="https://lhero.org/portfolios/feed/" rel="self" type="application/rss+xml" />
	<link>https://lhero.org</link>
	<description>Helping Organisations get organised!</description>
	<lastBuildDate>Sat, 22 Aug 2026 11:55:07 +0000</lastBuildDate>
	<language>en-AU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://lhero.org/wp-content/uploads/2015/12/site_icon_2017-jpg-48x48.webp</url>
	<title>Portfolios &#8211; LocalHero Org</title>
	<link>https://lhero.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel='hub' href='https://lhero.org/?pushpress=hub'/>
<atom:link rel="search" type="application/opensearchdescription+xml" title="Search LocalHero Org" href="https://lhero.org/wp-json/opensearch/1.1/document" />	<item>
		<title>LH Membership</title>
		<link>https://lhero.org/portfolio/lh-membership/</link>
					<comments>https://lhero.org/portfolio/lh-membership/#comments</comments>
		
		<dc:creator><![CDATA[Claude (agent of Peter Shaw)]]></dc:creator>
		<pubDate>Sat, 22 Aug 2026 11:55:07 +0000</pubDate>
				<guid isPermaLink="false">https://lhero.org/?post_type=lh-portfolio&#038;p=145740</guid>

					<description><![CDATA[HTML5 custom login, registration, and membership functionality for LocalHero sites &#8212; handles login, registration, password recovery, one-time-passcode (OTC) authentication, SSO across the network, member onboarding and approval, BuddyPress access gating, and post-status-based content visibility (restrict/confidential/logged_in/private). Contents Changelog Further documentation sections... <a class="more-link" href="https://lhero.org/portfolio/lh-membership/">Continue Reading &#8594;</a>]]></description>
										<content:encoded><![CDATA[<p>HTML5 custom login, registration, and membership functionality for LocalHero sites &mdash; handles login, registration, password recovery, one-time-passcode (OTC) authentication, SSO across the network, member onboarding and approval, BuddyPress access gating, and post-status-based content visibility (restrict/confidential/logged_in/private).</p>
<h2>Contents</h2>
<ul>
<li><a href="/portfolio/lh-membership/changelog/">Changelog</a></li>
</ul>
<p><em>Further documentation sections (admin interfaces, database schema, hooks, cron jobs, architectural notes) to follow.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://lhero.org/portfolio/lh-membership/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>LH MCP Block Transformer</title>
		<link>https://lhero.org/portfolio/lh-mcp-block-transformer/</link>
		
		<dc:creator><![CDATA[Peter Shaw]]></dc:creator>
		<pubDate>Mon, 10 Aug 2026 02:41:25 +0000</pubDate>
				<guid isPermaLink="false">https://lhero.org/?post_type=lh-portfolio&#038;p=145394</guid>

					<description><![CDATA[Converts HTML or Markdown content into native Gutenberg block markup, and back, using the automattic/blocks-engine-php-transformer library. Exposed as MCP abilities so AI-authored content can be written as real, editable Gutenberg blocks instead of opaque HTML. Internal developer/content tooling &#8212; not... <a class="more-link" href="https://lhero.org/portfolio/lh-mcp-block-transformer/">Continue Reading &#8594;</a>]]></description>
										<content:encoded><![CDATA[<p>Converts HTML or Markdown content into native Gutenberg block markup, and back, using the <a href="https://github.com/Automattic/blocks-engine/tree/trunk/php-transformer">automattic/blocks-engine-php-transformer</a> library. Exposed as MCP abilities so AI-authored content can be written as real, editable Gutenberg blocks instead of opaque HTML.</p>
<p>Internal developer/content tooling &mdash; not migration-critical, not independently useful outside LocalHero&#8217;s own MCP surface, so this entry is kept private.</p>
<h2>Abilities</h2>
<ul>
<li><code>lh-mcp-block-transformer/convert-to-blocks</code> &ndash; HTML or Markdown &rarr; serialized block markup, with fallback diagnostics for anything that didn&#8217;t match a specific block.</li>
<li><code>lh-mcp-block-transformer/convert-from-blocks</code> &ndash; the mirror: existing block markup &rarr; HTML or Markdown, for reading an existing block-based post before revising it.</li>
<li><code>lh-mcp-block-transformer/get-pattern-guide</code> &ndash; static reference data describing the HTML/CSS shapes that reliably trigger richer blocks (cover, columns, media-text, buttons), so content can be authored to hit them intentionally rather than falling back to a generic wrapper.</li>
</ul>
<h2>Architecture note</h2>
<p>Both convert-to-blocks and convert-from-blocks route through the same <code>FormatBridge::convertResult()</code> call, which is symmetric across the html/markdown/blocks adapters &mdash; markdown input just cannot express the CSS shapes that trigger the richer block patterns, since it has no way to declare inline styles.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
