en.osm.town is one of the many independent Mastodon servers you can use to participate in the fediverse.
An independent, community of OpenStreetMap people on the Fediverse/Mastodon. Funding graciously provided by the OpenStreetMap Foundation.

Server stats:

268
active users

#html

30 posts29 participants2 posts today
Helen Fernanda<p>👩🏽‍💻 CSS | Um pouco mais sobre text-decoration</p><p>🔗 <a href="https://www.meutedio.com/2025/04/css-um-pouco-mais-sobre-text-decoration.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">meutedio.com/2025/04/css-um-po</span><span class="invisible">uco-mais-sobre-text-decoration.html</span></a></p><p><a href="https://social.vivaldi.net/tags/html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>html</span></a> <a href="https://social.vivaldi.net/tags/css" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>css</span></a></p>
argv minus one<p>I want a program that looks over an <a href="https://mastodon.sdf.org/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> document and its <a href="https://mastodon.sdf.org/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> stylesheets, and applies the stylesheets' rules as `style` attributes on the HTML elements in the document.</p><p>Meaning this:</p><p>&lt;html&gt;<br>&lt;style&gt;p:first-child { margin-top: 0 }&lt;/style&gt;<br>&lt;p&gt;First paragraph&lt;/p&gt;<br>&lt;p&gt;Second paragraph&lt;/p&gt;<br>&lt;/html&gt;</p><p>Translates into this:</p><p>&lt;html&gt;<br>&lt;p style="margin-top: 0"&gt;First paragraph&lt;/p&gt;<br>&lt;p&gt;Second paragraph&lt;/p&gt;<br>&lt;/html&gt;</p><p>Is that a thing?</p><p><a href="https://mastodon.sdf.org/tags/programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>programming</span></a> <a href="https://mastodon.sdf.org/tags/webdev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>webdev</span></a></p>
Helen Fernanda<p>👩🏽‍💻 CSS | Enfeitando com text-emphasis</p><p>🔗 <a href="https://www.meutedio.com/2025/04/css-enfeitando-com-text-emphasis.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">meutedio.com/2025/04/css-enfei</span><span class="invisible">tando-com-text-emphasis.html</span></a></p><p><a href="https://social.vivaldi.net/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://social.vivaldi.net/tags/html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>html</span></a> <a href="https://social.vivaldi.net/tags/caractere" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>caractere</span></a></p>
CSS by T. Afif :verified:<p>💡 CSS Tip!</p><p>Use round() and clamp() to create a fluid typography with discrete values. No more rounding issues and font-size equal to 18.12596px!</p><p><a href="https://css-tip.com/fluid-typography/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">css-tip.com/fluid-typography/</span><span class="invisible"></span></a></p><p><a href="https://front-end.social/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://front-end.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a></p>
Helen Fernanda<p>👩🏽‍💻 CSS | Barra de rolagem colorida com scrollbar-color</p><p>🔗 <a href="https://www.meutedio.com/2025/04/css-barra-rolagem-scrollbar-color.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://www.</span><span class="ellipsis">meutedio.com/2025/04/css-barra</span><span class="invisible">-rolagem-scrollbar-color.html</span></a> </p><p><a href="https://social.vivaldi.net/tags/css" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>css</span></a> <a href="https://social.vivaldi.net/tags/html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>html</span></a> <a href="https://social.vivaldi.net/tags/colors" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>colors</span></a> <a href="https://social.vivaldi.net/tags/cores" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>cores</span></a></p>
Alvaro Montoro<p>The HTML standard defines many entities for prime symbols: single prime (′), double prime (″), triple prime (‴), it even has a quadruple prime (⁗)! And reverse primes, too! But I'm still waiting for the most important one of them all: the optimus prime.<br><a href="https://comicss.art/comics/175/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">comicss.art/comics/175/</span><span class="invisible"></span></a></p><p><a href="https://front-end.social/tags/css" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>css</span></a> <a href="https://front-end.social/tags/html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>html</span></a> <a href="https://front-end.social/tags/cartoon" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>cartoon</span></a></p>
jfmblinux :jeditux:<p>SVG and PNG tech icons</p><p>Download, copy and paste tech icons in SVG and PNG format for your projects. </p><p><a href="https://mastodon.jfmblinux.fr/tags/Html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Html</span></a> <a href="https://mastodon.jfmblinux.fr/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.jfmblinux.fr/tags/SVG" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SVG</span></a> <a href="https://mastodon.jfmblinux.fr/tags/PNG" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PNG</span></a> <br><a href="https://mastodon.jfmblinux.fr/tags/Mastodon" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Mastodon</span></a> <a href="https://mastodon.jfmblinux.fr/tags/Fediverse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Fediverse</span></a> <a href="https://mastodon.jfmblinux.fr/tags/Pixelfed" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Pixelfed</span></a> <a href="https://mastodon.jfmblinux.fr/tags/Nextcloud" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Nextcloud</span></a> </p><p><a href="https://techicons.dev/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">techicons.dev/</span><span class="invisible"></span></a></p>
Aral Balkan<p>New Kitten update</p><p>• 🥳 Kitten HTML templates and kitten.Component render functions can now be async.</p><p><a href="https://kitten.small-web.org" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">kitten.small-web.org</span><span class="invisible"></span></a></p><p>This is quite a big one and it took me finally biting the bullet and getting my head around generators in JavaScript to implement properly.</p><p>So now you can mix synchronous and asynchronous components as you like and if there are any asynchronous components in your templates they will automatically be awaited (even if you forget to use await) ;)</p><p>I’ll write a proper post/tutorial/documentation for it soon but for the time being enjoy the screenshots where a layout template gets the latest three posts from my mock fediverse public timeline service and displays them on the page.</p><p>The kitten.Component version also has a refresh button that streams a different three to the page.</p><p>For those of you unfamiliar with Kitten, this is all the code in either example. No scaffolding, nothing. Pop either into a file called index.page.js and run kitten in that folder and visit https://localhost to see the example run.</p><p>Enjoy!</p><p>:kitten:💕</p><p><a href="https://mastodon.ar.al/tags/Kitten" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Kitten</span></a> <a href="https://mastodon.ar.al/tags/SmallWeb" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SmallWeb</span></a> <a href="https://mastodon.ar.al/tags/async" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>async</span></a> <a href="https://mastodon.ar.al/tags/components" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>components</span></a> <a href="https://mastodon.ar.al/tags/templates" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>templates</span></a> <a href="https://mastodon.ar.al/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.ar.al/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.ar.al/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.ar.al/tags/NodeJS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NodeJS</span></a> <a href="https://mastodon.ar.al/tags/generators" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>generators</span></a> <a href="https://mastodon.ar.al/tags/web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>web</span></a> <a href="https://mastodon.ar.al/tags/dev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dev</span></a></p>
Terence Eden’s Blog<p><strong>Pretty Print HTML using PHP 8.4's new HTML DOM</strong></p><p><a href="https://shkspr.mobi/blog/2025/03/pretty-print-html-using-php-8-4s-new-html-dom/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">shkspr.mobi/blog/2025/03/prett</span><span class="invisible">y-print-html-using-php-8-4s-new-html-dom/</span></a></p><p>Those whom the gods would send mad, they first teach recursion.</p><p>PHP 8.4 introduces a new <a href="https://www.php.net/manual/en/class.dom-htmldocument.php" rel="nofollow noopener noreferrer" target="_blank">Dom\HTMLDocument class</a> it is a modern HTML5 replacement for the ageing XHTML based DOMDocument. You can <a href="https://wiki.php.net/rfc/domdocument_html5_parser" rel="nofollow noopener noreferrer" target="_blank">read more about how it works</a> - the short version is that it reads and correctly sanitises HTML and turns it into a nested object. Hurrah!</p><p>The one thing it <em>doesn't</em> do is pretty-printing. When you call <code>$dom-&gt;saveHTML()</code> it will output something like:</p><pre><code>&lt;html lang="en-GB"&gt;&lt;head&gt;&lt;title&gt;Test&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Testing&lt;/h1&gt;&lt;main&gt;&lt;p&gt;Some &lt;em&gt;HTML&lt;/em&gt; and an &lt;img src="example.png"&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;List&lt;/li&gt;&lt;li&gt;Another list&lt;/li&gt;&lt;/ol&gt;&lt;/main&gt;&lt;/body&gt;&lt;/html&gt;</code></pre><p>Perfect for a computer to read, but slightly tricky for humans.</p><p>As was <a href="https://libraries.mit.edu/150books/2011/05/11/1985/" rel="nofollow noopener noreferrer" target="_blank">written by the sages</a>:</p><blockquote><p>A computer language is not just a way of getting a computer to perform operations but rather … it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.</p></blockquote><p>HTML <em>is</em> a programming language. Making markup easy to read for humans is a fine and noble goal. The aim is to turn the single line above into something like:</p><pre><code>&lt;html lang="en-GB"&gt; &lt;head&gt; &lt;title&gt;Test&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Testing&lt;/h1&gt; &lt;main&gt; &lt;p&gt;Some &lt;em&gt;HTML&lt;/em&gt; and an &lt;img src="example.png"&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;List&lt;/li&gt; &lt;li&gt;Another list&lt;/li&gt; &lt;/ol&gt; &lt;/main&gt; &lt;/body&gt;&lt;/html&gt;</code></pre><p>Cor! That's much better!</p><p>I've cobbled together a script which is <em>broadly</em> accurate. There are a million-and-one edge cases and about twice as many personal preferences. This aims to be quick, simple, and basically fine. I am indebted to <a href="https://topic.alibabacloud.com/a/php-domdocument-recursive-formatting-of-indented-html-documents_4_86_30953142.html" rel="nofollow noopener noreferrer" target="_blank">this random Chinese script</a> and to <a href="https://github.com/wasinger/html-pretty-min" rel="nofollow noopener noreferrer" target="_blank">html-pretty-min</a>.</p><p><strong>Step By Step</strong></p><p>I'm going to walk through how everything works. This is as much for my benefit as for yours! This is beta code. It sorta-kinda-works for me. Think of it as a first pass at an attempt to prove that something can be done. Please don't use it in production!</p><p><strong>Setting up the DOM</strong></p><p>The new HTMLDocument should be broadly familiar to anyone who has used the previous one.</p><pre><code>$html = '&lt;html lang="en-GB"&gt;&lt;head&gt;&lt;title&gt;Test&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Testing&lt;/h1&gt;&lt;main&gt;&lt;p&gt;Some &lt;em&gt;HTML&lt;/em&gt; and an &lt;img src="example.png"&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;List&lt;li&gt;Another list&lt;/body&gt;&lt;/html&gt;'$dom = Dom\HTMLDocument::createFromString( $html, LIBXML_NOERROR, "UTF-8" );</code></pre><p>This automatically adds <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> elements. If you don't want that, use the <a href="https://www.php.net/manual/en/libxml.constants.php#constant.libxml-html-noimplied" rel="nofollow noopener noreferrer" target="_blank"><code>LIBXML_HTML_NOIMPLIED</code> flag</a>:</p><pre><code>$dom = Dom\HTMLDocument::createFromString( $html, LIBXML_NOERROR | LIBXML_HTML_NOIMPLIED, "UTF-8" );</code></pre><p><strong>Where not to indent</strong></p><p>There are certain elements whose contents shouldn't be pretty-printed because it might change the meaning or layout of the text. For example, in a paragraph:</p><pre><code>&lt;p&gt; Some &lt;em&gt; HT &lt;strong&gt;M&lt;/strong&gt; L &lt;/em&gt;&lt;/p&gt;</code></pre><p>I've picked these elements from <a href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#text-level-semantics" rel="nofollow noopener noreferrer" target="_blank">text-level semantics</a> and a few others which I consider sensible. Feel free to edit this list if you want.</p><pre><code>$preserve_internal_whitespace = [ "a", "em", "strong", "small", "s", "cite", "q", "dfn", "abbr", "ruby", "rt", "rp", "data", "time", "pre", "code", "var", "samp", "kbd", "sub", "sup", "b", "i", "mark", "u", "bdi", "bdo", "span", "h1", "h2", "h3", "h4", "h5", "h6", "p", "li", "button", "form", "input", "label", "select", "textarea",];</code></pre><p>The function has an option to <em>force</em> indenting every time it encounters an element.</p><p><strong>Tabs 🆚 Space</strong></p><p>Tabs, obviously. Users can set their tab width to their personal preference and it won't get confused with semantically significant whitespace.</p><pre><code>$indent_character = "\t";</code></pre><p><strong>Recursive Function</strong></p><p>This function reads through each node in the HTML tree. If the node should be indented, the function inserts a new node with the requisite number of tabs before the existing node. It also adds a suffix node to indent the next line appropriately. It then goes through the node's children and recursively repeats the process.</p><p><strong>This modifies the existing Document</strong>.</p><pre><code>function prettyPrintHTML( $node, $treeIndex = 0, $forceWhitespace = false ){ global $indent_character, $preserve_internal_whitespace; // If this node contains content which shouldn't be separately indented // And if whitespace is not forced if ( property_exists( $node, "localName" ) &amp;&amp; in_array( $node-&gt;localName, $preserve_internal_whitespace ) &amp;&amp; !$forceWhitespace ) { return; } // Does this node have children? if( property_exists( $node, "childElementCount" ) &amp;&amp; $node-&gt;childElementCount &gt; 0 ) { // Move in a step $treeIndex++; $tabStart = "\n" . str_repeat( $indent_character, $treeIndex ); $tabEnd = "\n" . str_repeat( $indent_character, $treeIndex - 1); // Remove any existing indenting at the start of the line $node-&gt;innerHTML = trim($node-&gt;innerHTML); // Loop through the children $i=0; while( $childNode = $node-&gt;childNodes-&gt;item( $i++ ) ) { // Was the *previous* sibling a text-only node? // If so, don't add a previous newline if ( $i &gt; 0 ) { $olderSibling = $node-&gt;childNodes-&gt;item( $i-1 ); if ( $olderSibling-&gt;nodeType == XML_TEXT_NODE &amp;&amp; !$forceWhitespace ) { $i++; continue; } $node-&gt;insertBefore( $node-&gt;ownerDocument-&gt;createTextNode( $tabStart ), $childNode ); } $i++; // Recursively indent all children prettyPrintHTML( $childNode, $treeIndex, $forceWhitespace ); }; // Suffix with a node which has "\n" and a suitable number of "\t" $node-&gt;appendChild( $node-&gt;ownerDocument-&gt;createTextNode( $tabEnd ) ); }}</code></pre><p><strong>Printing it out</strong></p><p>First, call the function. <strong>This modifies the existing Document</strong>.</p><pre><code>prettyPrintHTML( $dom-&gt;documentElement );</code></pre><p>Then call <a href="https://www.php.net/manual/en/dom-htmldocument.savehtml.php" rel="nofollow noopener noreferrer" target="_blank">the normal <code>saveHtml()</code> serialiser</a>:</p><pre><code>echo $dom-&gt;saveHTML();</code></pre><p>Note - this does not print a <code>&lt;!doctype html&gt;</code> - you'll need to include that manually if you're intending to use the entire document.</p><p><strong>Licence</strong></p><p>I consider the above too trivial to licence - but you may treat it as MIT if that makes you happy.</p><p><strong>Thoughts? Comments? Next steps?</strong></p><p>I've not written any formal tests, nor have I measured its speed, there may be subtle-bugs, and catastrophic errors. I know it doesn't work well if the HTML is already indented. It mysteriously prints double newlines for some unfathomable reason.</p><p>I'd love to know if you find this useful. Please <a href="https://gitlab.com/edent/pretty-print-html-using-php/" rel="nofollow noopener noreferrer" target="_blank">get involved on GitLab</a> or drop a comment here.</p><p><a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/howto/" target="_blank">#HowTo</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/html/" target="_blank">#HTML</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/php/" target="_blank">#php</a></p>
Terence Eden<p>🆕 blog! “Pretty Print HTML using PHP 8.4's new HTML DOM”</p><p>Those whom the gods would send mad, they first teach recursion.</p><p>PHP 8.4 introduces a new Dom\HTMLDocument class it is a modern HTML5 replacement for the ageing XHTML based DOMDocument. You can read more about how it works - the short version is that it reads and correctly sanitises HTML and turns it into a…</p><p>👀 Read more: <a href="https://shkspr.mobi/blog/2025/03/pretty-print-html-using-php-8-4s-new-html-dom/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">shkspr.mobi/blog/2025/03/prett</span><span class="invisible">y-print-html-using-php-8-4s-new-html-dom/</span></a><br>⸻<br><a href="https://mastodon.social/tags/HowTo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HowTo</span></a> <a href="https://mastodon.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.social/tags/php" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>php</span></a></p>
Mia Holte<p>Vi er i 2025, og det finnes fortsatt ikke en html tag for ingress. Noen som vet om det er i horisonten? <a href="https://snabelen.no/tags/html" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>html</span></a> <a href="https://snabelen.no/tags/norsktut" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>norsktut</span></a> <a href="https://snabelen.no/tags/uu" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>uu</span></a></p>
Tommi 🤯<p><strong>Looking for CMS advice</strong></p><p>Hey Web devs!</p><p>Do you have any suggestions, tips, opinions, dos, don’ts about <strong>headless CMS</strong>es?</p><p>I have a growing list of small/mid non-profits and collectives asking for my help to (re)make their website. I totally want to help, but I don’t have much time, especially considering that they generally have little or no funding—I would most definitely point them to <span class="h-card" translate="no"><a href="https://toot.village.one/@VillageOneCoop" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>VillageOneCoop</span></a></span>, otherwise.</p><p>Therefore, I want a super simple and replicable solution where I can copy-paste most of the code, while providing them with a stable, fast, and modern solution. I had a look at the <a href="https://jamstack.org/headless-cms/" rel="nofollow noopener noreferrer" target="_blank">Headless CMS section in the Jamstack website</a>, but I need opinions from people who actually used some of that software already.</p><p><strong>Needs</strong></p><ul><li>I want to code and configure everything using <span class="h-card" translate="no"><a href="https://fosstodon.org/@eleventy" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>eleventy</span></a></span></li><li>Admin interface (<a href="https://pan.rent/tags/WebApp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebApp</span></a>) for the client to add pages and write posts</li><li>Static website in the front-end</li><li>Simple and reliable CI/CD</li><li>No/minimal maintenance after the first setup</li><li>Self-hostable (I was taking this for granted so much that I forgot to write it)</li><li>If it requires forge integration, it should support <a href="https://pan.rent/tags/ForgeJo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ForgeJo</span></a></li><li><a href="https://pan.rent/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></li></ul><p><strong>Nice to have</strong></p><ul><li>Possibly using <a href="https://pan.rent/tags/Deno" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Deno</span></a>, not <a href="https://pan.rent/tags/NodeJS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NodeJS</span></a></li><li>Allowing the client to customize a bit their website through the admin interface, with a GUI</li><li>CMS app packaged on <span class="h-card" translate="no"><a href="https://toot.aquilenet.fr/@yunohost" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>yunohost</span></a></span></li><li>No CMS vendor lock-in</li><li>I’d love to write as little JavaScript as possible</li><li><a href="https://pan.rent/tags/FreeSoftware" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FreeSoftware</span></a></li></ul><p><strong>Absolutely not</strong></p><ul><li>Front-end <a href="https://pan.rent/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> frameworks</li></ul><p>Please, boost this and ask around! Links to videos, tutorials, and resources are welcome.</p><p>People whose perspective I would really value: <span class="h-card" translate="no"><a href="https://fediverse.zachleat.com/@zachleat" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>zachleat</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.social/@harryfk" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>harryfk</span></a></span> <span class="h-card" translate="no"><a href="https://fosstodon.org/@deno_land" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>deno_land</span></a></span> <span class="h-card" translate="no"><a href="https://indieweb.social/@jaredwhite" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>jaredwhite</span></a></span> <span class="h-card" translate="no"><a href="https://intuitivefuture.com/@vanillaweb" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>vanillaweb</span></a></span> <span class="h-card" translate="no"><a href="https://stefanbohacek.online/@stefan" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>stefan</span></a></span> <span class="h-card" translate="no"><a href="https://front-end.social/@mxbck" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>mxbck</span></a></span> <span class="h-card" translate="no"><a href="https://caneandable.social/@WeirdWriter" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>WeirdWriter</span></a></span> <span class="h-card" translate="no"><a href="https://social.wedistribute.org/users/deadsuperhero" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>deadsuperhero</span></a></span> (Sorry if I am spamming you!)</p><p><a href="https://pan.rent/tags/Eleventy" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Eleventy</span></a> <a href="https://pan.rent/tags/11ty" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>11ty</span></a> <a href="https://pan.rent/tags/CMS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CMS</span></a> <a href="https://pan.rent/tags/HeadlessCMS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HeadlessCMS</span></a> <a href="https://pan.rent/tags/Ghost" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Ghost</span></a> <a href="https://pan.rent/tags/DecapCMS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DecapCMS</span></a> <a href="https://pan.rent/tags/CraftCMS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CraftCMS</span></a> <a href="https://pan.rent/tags/Strapi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Strapi</span></a> <a href="https://pan.rent/tags/Web" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Web</span></a> <a href="https://pan.rent/tags/WebDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebDev</span></a> <a href="https://pan.rent/tags/WebDesign" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebDesign</span></a> <a href="https://pan.rent/tags/StaticGen" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StaticGen</span></a> <a href="https://pan.rent/tags/StaticWebsite" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>StaticWebsite</span></a> <a href="https://pan.rent/tags/Website" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Website</span></a> <a href="https://pan.rent/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://pan.rent/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://pan.rent/tags/YunoHost" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>YunoHost</span></a> <a href="https://pan.rent/tags/SelfHosting" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SelfHosting</span></a> <a href="https://pan.rent/tags/Wordpress" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Wordpress</span></a></p>
Jon Henshaw<p>The image srcset property is primarily used to serve resized images for responsive layouts. However, it can also serve uniquely different images, significantly improving a visitor's experience and engagement on a web page.</p><p><a href="https://coywolf.pro/webdev/why-you-should-do-more-than-resizing-images-with-the-srcset-property/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">coywolf.pro/webdev/why-you-sho</span><span class="invisible">uld-do-more-than-resizing-images-with-the-srcset-property/</span></a></p><p><a href="https://henshaw.social/tags/WebDesign" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebDesign</span></a> <a href="https://henshaw.social/tags/WebDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebDev</span></a> <a href="https://henshaw.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a></p>
Christian Alder<p>Parallax layers 😊 </p><p>A subtle shift across 13 layers kept within a frame on the page. 🦖 </p><p>CodePen: <a href="https://codepen.io/HejChristian/full/ZYEqoXd" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">codepen.io/HejChristian/full/Z</span><span class="invisible">YEqoXd</span></a></p><p><a href="https://mastodon.social/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.social/tags/JS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JS</span></a> <a href="https://mastodon.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a></p>
Terence Eden’s Blog<p><strong>How to prevent Payment Pointer fraud</strong></p><p><a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">shkspr.mobi/blog/2025/03/how-t</span><span class="invisible">o-prevent-payment-pointer-fraud/</span></a></p><p>There's a new Web Standard in town! Meet <a href="https://webmonetization.org" rel="nofollow noopener noreferrer" target="_blank">WebMonetization</a> - it aims to be a low effort way to help users passively pay website owners.</p><p>The pitch is simple. A website owner places a single new line in their HTML's <code>&lt;head&gt;</code> - something like this:</p><pre><code>&lt;link rel="monetization" href="https://wallet.example.com/edent" /&gt;</code></pre><p>That address is a "<a href="https://paymentpointers.org/" rel="nofollow noopener noreferrer" target="_blank">Payment Pointer</a>". As a user browses the web, their browser takes note of all the sites they've visited. At the end of the month, the funds in the user's digital wallet are split proportionally between the sites which have enabled WebMonetization. The user's budget is under their control and there are various technical measures to stop websites hijacking funds.</p><p>This could be revolutionary0.</p><p>But there are some interesting fraud angles to consider. Let me give you a couple of examples.</p><p><strong>Pointer Hijacking</strong></p><p>Suppose I hacked into a popular site like BBC.co.uk and surreptitiously included my link in their HTML. Even if I was successful for just a few minutes, I could syphon off a significant amount of money.</p><p>At the moment, the WebMonetization plugin <em>only</em> looks at the page's HTML to find payment pointers. There's no way to say "This site doesn't use WebMonetization" or an out-of-band way to signal which Payment Pointer is correct. Obviously there are lots of ways to profit from hacking a website - but most of them are ostentatious or require the user to interact. This is subtle and silent.</p><p>How long would it take you to notice that a single meta element had snuck into some complex markup? When you discover it, what can you do? Money sent to that wallet can be transferred out in an instant. You might be able to get the wallet provider to freeze the funds or suspend the account, but that may not get you any money back.</p><p>Similarly, a <a href="https://lifehacker.com/tech/honey-influencer-scam-explained" rel="nofollow noopener noreferrer" target="_blank">Web Extension like Honey</a> could re-write the page's source code to remove or change an existing payment pointer.</p><p><strong>Possible Solutions</strong></p><p>Perhaps the username associated with a Payment Pointer should be that of the website it uses? something like <code>href="https://wallet.example.com/shkspr.mobi"</code></p><p>That's superficially attractive, but comes with issues. I might have several domains - do I want to create a pointer for each of them?</p><p>There's also a legitimate use-case for having my pointer on someone else's site. Suppose I write a guest article for someone - their website might contain:</p><pre><code>&lt;link rel="monetization" href="https://wallet.example.com/edent" /&gt;&lt;link rel="monetization" href="https://wallet.coin_base.biz/BigSite" /&gt;</code></pre><p>Which would allow us to split the revenue.</p><p>Similarly, a site like GitHub might let me use my Payment Pointer when people are visiting my specific page.</p><p>So, perhaps site owners should add a <a href="https://en.wikipedia.org/wiki/Well-known_URI" rel="nofollow noopener noreferrer" target="_blank">.well-known directive</a> which lists acceptable Pointers? Well, if I have the ability to add arbitrary HTML to a site, I might also be able to upload files. So it isn't particularly robust protection.</p><p>Alright, what are other ways typically used to prove the legitimacy of data? DNS maybe? As <a href="https://knowyourmeme.com/memes/one-more-lane-bro-one-more-lane-will-fix-it" rel="nofollow noopener noreferrer" target="_blank">the popular meme goes</a>:</p><blockquote> <a href="https://infosec.exchange/@atax1a" class="" rel="nofollow noopener noreferrer" target="_blank"><p></p> <p>@atax1a@infosec.exchange</p><p>mx alex tax1a - 2020 (5)</p> </a><p><a href="https://infosec.exchange/@atax1a" class="" rel="nofollow noopener noreferrer" target="_blank"></a></p> <p><span class="h-card" translate="no"><a href="https://mastodon.social/@jwz" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>jwz</span></a></span> <span class="h-card" translate="no"><a href="https://toad.social/@grumpybozo" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>grumpybozo</span></a></span> just one more public key in a TXT record, that'll fix email, just gotta add one more TXT record bro</p> <a href="https://infosec.exchange/@atax1a/114213713873874536" rel="nofollow noopener noreferrer" target="_blank"><span class="">❤️ 198</span><span class="">💬 5</span><span class="">🔁 85</span>20:49 - Sun 23 March 2025</a> </blockquote><p>Someone with the ability to publish on a website is <em>less</em> likely to have access to DNS records. So having (yet another) DNS record could provide some protection. But DNS is tricky to get right, annoying to update, and a pain to repeatedly configure if you're constantly adding and removing legitimate users.</p><p><strong>Reputation Hijacking</strong></p><p>Suppose the propaganda experts in The People's Republic of Blefuscu decide to launch a fake site for your favourite political cause. It contains all sorts of horrible lies about a political candidate and tarnishes the reputation of something you hold dear. The sneaky tricksters put in a Payment Pointer which is the same as the legitimate site.</p><p>"This must be an official site," people say. "Look! It even funnels money to the same wallet as the other official sites!"</p><p>There's no way to disclaim money sent to you. Perhaps a political opponent operates an illegal Bonsai Kitten farm - but puts your Payment Pointer on it.</p><p>"I don't squash kittens into jars!" You cry as they drag you away. The police are unconvinced "Then why are you profiting from it?"</p><p><strong>Possible Solutions</strong></p><p>A wallet provider needs to be able to list which sites are <em>your</em> sites.</p><p>You log in to your wallet provider and fill in a list of websites you want your Payment Pointer to work on. Add your blog, your recipe site, your homemade video forum etc. When a user browses a website, they see the Payment Pointer and ask it for a list of valid sites. If "BonsaiKitten.biz" isn't on there, no payment is sent.</p><p>Much like OAuth, there is an administrative hassle to this. You may need to regularly update the sites you use, and hope that your forgetfulness doesn't cost you in lost income.</p><p><strong>Final Thoughts</strong></p><p>I'm moderately excited about WebMonetization. If it lives up to its promises, it could unleash a new wave of sustainable creativity across the web. If it is easier to make micropayments or donations to sites you like, without being subject to the invasive tracking of adverts, that would be brilliant.</p><p>The problems I've identified above are (I hope) minor. Someone sending you money without your consent may be concerning, but there's not much of an economic incentive to enrich your foes.</p><p>Think I'm wrong? Reckon you've found another fraudulent avenue? Want to argue about whether this is a likely problem? Stick a comment in the box.</p> <ol start="0"><li><p>To be fair, <a href="https://shkspr.mobi/blog/2020/10/adding-web-monetization-to-your-site-using-coil/" rel="nofollow noopener noreferrer" target="_blank">Coil tried this in 2020</a> and it didn't take off. But the new standard has a lot less cryptocurrency bollocks, so maybe it'll work this time?&nbsp;↩︎</p></li></ol> <p><a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/cybersecurity/" target="_blank">#CyberSecurity</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/dns/" target="_blank">#dns</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/html/" target="_blank">#HTML</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/standards/" target="_blank">#standards</a> <a rel="nofollow noopener noreferrer" class="hashtag u-tag u-category" href="https://shkspr.mobi/blog/tag/webmonitization/" target="_blank">#WebMonitization</a></p>
Terence Eden<p>🆕 blog! “How to prevent Payment Pointer fraud”</p><p>There's a new Web Standard in town! Meet WebMonetization - it aims to be a low effort way to help users passively pay website owners.</p><p>The pitch is simple. A website owner places a single new line in their HTML's &lt;head&gt; - something like this:</p><p>&lt;link rel="monetization"…</p><p>👀 Read more: <a href="https://shkspr.mobi/blog/2025/03/how-to-prevent-payment-pointer-fraud/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">shkspr.mobi/blog/2025/03/how-t</span><span class="invisible">o-prevent-payment-pointer-fraud/</span></a><br>⸻<br><a href="https://mastodon.social/tags/CyberSecurity" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CyberSecurity</span></a> <a href="https://mastodon.social/tags/dns" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>dns</span></a> <a href="https://mastodon.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://mastodon.social/tags/standards" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>standards</span></a> <a href="https://mastodon.social/tags/WebMonitization" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebMonitization</span></a></p>
codeDude :archlinux: :neovim:<p><span class="h-card" translate="no"><a href="https://fosstodon.org/@s31bz" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>s31bz</span></a></span> I know <a href="https://fosstodon.org/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> (How to Meet Ladies)</p>
Jonathan Lamothe<p>I am in urgent job search mode, so I'm gonna throw this out here and see if anything comes of it.</p><p>I am a <a href="https://social.jlamothe.net/search?tag=Canadian" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Canadian</span></a>, fluent in both <a href="https://social.jlamothe.net/search?tag=English" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>English</span></a> and <a href="https://social.jlamothe.net/search?tag=French" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>French</span></a>. I have experience with several programming languages. My strongest proficiency is with <a href="https://social.jlamothe.net/search?tag=Haskell" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Haskell</span></a> and <a href="https://social.jlamothe.net/search?tag=C" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>C</span></a>. I also have a reasonable grasp of <a href="https://social.jlamothe.net/search?tag=HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a>, <a href="https://social.jlamothe.net/search?tag=JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a>, <a href="https://social.jlamothe.net/search?tag=SQL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SQL</span></a>, <a href="https://social.jlamothe.net/search?tag=Python" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Python</span></a>, <a href="https://social.jlamothe.net/search?tag=Lua" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Lua</span></a>, <a href="https://social.jlamothe.net/search?tag=Linux" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Linux</span></a> system administration, <a href="https://social.jlamothe.net/search?tag=bash" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>bash</span></a> scripting, <a href="https://social.jlamothe.net/search?tag=Perl" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Perl</span></a>, <a href="https://social.jlamothe.net/search?tag=AWK" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AWK</span></a>, some <a href="https://social.jlamothe.net/search?tag=Lisp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Lisp</span></a> (common, scheme, and emacs), and probably several others I've forgotten to mention.</p><p>I am not necessarily looking for something in tech. I just need something stable. I have done everything from software development, to customer support, to factory work, though my current circumstances make in-person work more difficult than remote work. I have been regarded as a hard worker in every job I have ever held.</p><p><a href="https://social.jlamothe.net/search?tag=GetFediHired" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GetFediHired</span></a></p>
Marijke Luttekes<p>As a… person who uses right-click "open in new tab" often,</p><p>I want… developers to finally learn the difference between a button and a link,</p><p>So that… I can stop hating on their interface.</p><p><a href="https://fosstodon.org/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a> <a href="https://fosstodon.org/tags/WebDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebDev</span></a> <a href="https://fosstodon.org/tags/UX" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>UX</span></a></p>
CSS by T. Afif :verified:<p>Here is another implementation where you can define an array of colors and the number of ranges. The color will automatically adjust based on the progression!</p><p>✅ 0% JavaScript<br>✅ 100% "Programming with CSS"</p><p>Demo: <a href="https://codepen.io/t_afif/pen/LEYJGoQ" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">codepen.io/t_afif/pen/LEYJGoQ</span><span class="invisible"></span></a> via :codepen: <span class="h-card" translate="no"><a href="https://fosstodon.org/@codepen" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>codepen</span></a></span> </p><p>Online Version: <a href="https://css-tip.com/custom-progress/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">css-tip.com/custom-progress/</span><span class="invisible"></span></a><br> <br><a href="https://front-end.social/tags/CSS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CSS</span></a> <a href="https://front-end.social/tags/HTML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HTML</span></a></p>