✍ An Alpha Arrives
What's this? A new blog post! After a summer of being unable to publish anything, I've finally finished a "quick" lift'n'shift of my codebase. theAdhocracy is now powered by @astro!
There's still lots that I want to do, but it feels good to be able to get back onto the IndieWeb properly 😁
https://theadhocracy.co.uk/wrote/an-alpha-arrives
⸻
#IndieWeb #astro #blogging
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://indieweb.social/@theadhocracy/113322637736360425", "content": { "html": "<p>\u270d An Alpha Arrives</p><p>What's this? A new blog post! After a summer of being unable to publish anything, I've finally finished a \"quick\" lift'n'shift of my codebase. theAdhocracy is now powered by <span class=\"h-card\"><a class=\"u-url\" href=\"https://m.webtoo.ls/@astro\">@<span>astro</span></a></span>!</p><p>There's still lots that I want to do, but it feels good to be able to get back onto the IndieWeb properly \ud83d\ude01</p><p><a href=\"https://theadhocracy.co.uk/wrote/an-alpha-arrives\"><span>https://</span><span>theadhocracy.co.uk/wrote/an-al</span><span>pha-arrives</span></a><br />\u2e3b<br /><a href=\"https://indieweb.social/tags/IndieWeb\">#<span>IndieWeb</span></a> <a href=\"https://indieweb.social/tags/astro\">#<span>astro</span></a> <a href=\"https://indieweb.social/tags/blogging\">#<span>blogging</span></a></p>\n<a class=\"u-mention\" href=\"https://m.webtoo.ls/@astro\"></a>", "text": "\u270d An Alpha Arrives\n\nWhat's this? A new blog post! After a summer of being unable to publish anything, I've finally finished a \"quick\" lift'n'shift of my codebase. theAdhocracy is now powered by @astro!\n\nThere's still lots that I want to do, but it feels good to be able to get back onto the IndieWeb properly \ud83d\ude01\n\nhttps://theadhocracy.co.uk/wrote/an-alpha-arrives\n\u2e3b\n#IndieWeb #astro #blogging" }, "published": "2024-10-17T11:57:05+00:00", "post-type": "note", "_id": "42586827", "_source": "8007", "_is_read": false }
Finally finished building an over-engineered footer for my website :33
Website: https://catplace.org
Footer Code: https://github.com/PolyCatDev/catplace/blob/main/src/components/Footer.astro
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://sunny.garden/@PolyCat/113322345806687119", "content": { "html": "<p>Finally finished building an over-engineered footer for my website :33</p><p>Website: <a href=\"https://catplace.org\"><span>https://</span><span>catplace.org</span><span></span></a><br />Footer Code: <a href=\"https://github.com/PolyCatDev/catplace/blob/main/src/components/Footer.astro\"><span>https://</span><span>github.com/PolyCatDev/catplace</span><span>/blob/main/src/components/Footer.astro</span></a></p><p><a href=\"https://sunny.garden/tags/PersonalSites\">#<span>PersonalSites</span></a> <a href=\"https://sunny.garden/tags/astrowebsite\">#<span>astrowebsite</span></a> <a href=\"https://sunny.garden/tags/indieweb\">#<span>indieweb</span></a></p>", "text": "Finally finished building an over-engineered footer for my website :33\n\nWebsite: https://catplace.org\nFooter Code: https://github.com/PolyCatDev/catplace/blob/main/src/components/Footer.astro\n\n#PersonalSites #astrowebsite #indieweb" }, "published": "2024-10-17T10:42:50+00:00", "post-type": "note", "_id": "42586033", "_source": "8007", "_is_read": false }
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://mstdn.social/@the_cheis/113322258671780436", "content": { "html": "<p>Nuevo post:</p><p>Webs brutalistas</p><p><a href=\"https://mstdn.social/tags/Internet\">#<span>Internet</span></a> <a href=\"https://mstdn.social/tags/Web\">#<span>Web</span></a> <a href=\"https://mstdn.social/tags/dise%C3%B1o\">#<span>dise\u00f1o</span></a> <a href=\"https://mstdn.social/tags/design\">#<span>design</span></a> <a href=\"https://mstdn.social/tags/brutalismo\">#<span>brutalismo</span></a> <a href=\"https://mstdn.social/tags/indieweb\">#<span>indieweb</span></a> <a href=\"https://mstdn.social/tags/blog\">#<span>blog</span></a> <a href=\"https://mstdn.social/tags/enmiblog\">#<span>enmiblog</span></a></p><p><a href=\"https://thecheis.com/2024/10/17/webs-brutalistas/\"><span>https://</span><span>thecheis.com/2024/10/17/webs-b</span><span>rutalistas/</span></a></p>", "text": "Nuevo post:\n\nWebs brutalistas\n\n#Internet #Web #dise\u00f1o #design #brutalismo #indieweb #blog #enmiblog\n\nhttps://thecheis.com/2024/10/17/webs-brutalistas/" }, "published": "2024-10-17T10:20:41+00:00", "post-type": "note", "_id": "42586034", "_source": "8007", "_is_read": false }
I’ve joined this server because the IndieWeb philosophy deeply aligns with the principles page concept and my personal values. It’s about agency, creating with intention, and cultivating spaces that reflect what truly matters. Just as #IndieWeb empowers individuals to own their online presence, I believe in taking ownership of our beliefs, making them part of public narrative, free from the noise of algorithm-driven platforms. I’d love to explore these ideas with others in this corner of the web
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://indieweb.social/tags/indieweb", "photo": null }, "url": "https://indieweb.social/@principles/113321789437986098", "content": { "html": "<p>I\u2019ve joined this server because the IndieWeb philosophy deeply aligns with the principles page concept and my personal values. It\u2019s about agency, creating with intention, and cultivating spaces that reflect what truly matters. Just as <a href=\"https://indieweb.social/tags/IndieWeb\">#<span>IndieWeb</span></a> empowers individuals to own their online presence, I believe in taking ownership of our beliefs, making them part of public narrative, free from the noise of algorithm-driven platforms. I\u2019d love to explore these ideas with others in this corner of the web</p>", "text": "I\u2019ve joined this server because the IndieWeb philosophy deeply aligns with the principles page concept and my personal values. It\u2019s about agency, creating with intention, and cultivating spaces that reflect what truly matters. Just as #IndieWeb empowers individuals to own their online presence, I believe in taking ownership of our beliefs, making them part of public narrative, free from the noise of algorithm-driven platforms. I\u2019d love to explore these ideas with others in this corner of the web" }, "published": "2024-10-17T08:21:21+00:00", "post-type": "note", "_id": "42585137", "_source": "8007", "_is_read": false }
{ "type": "entry", "published": "2024-10-17 00:00:00", "url": "https://jamesg.blog/2024/10/17/google-doc-export-images-folder/", "category": [ "IndieWeb" ], "name": "How to export images from Google Docs as a folder", "author": { "type": "card", "name": "James", "url": "https://jamesg.blog/", "photo": "https://jamesg.blog/assets/coffeeshop.jpg" }, "post-type": "article", "_id": "42580679", "_source": "5072", "_is_read": false }
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://xoxo.zone/@artlung/113320258657022789", "content": { "html": "<p><span class=\"h-card\"><a class=\"u-url\" href=\"https://writing.exchange/@Newmy\">@<span>Newmy</span></a></span> have you added and activated the <a href=\"https://xoxo.zone/tags/IndieWeb\">#<span>IndieWeb</span></a> plugins?</p>\n<a class=\"u-mention\" href=\"https://writing.exchange/@Newmy\"></a>", "text": "@Newmy have you added and activated the #IndieWeb plugins?" }, "published": "2024-10-17T01:52:03+00:00", "post-type": "note", "_id": "42580677", "_source": "8007", "_is_read": false }
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://writing.exchange/@Newmy/113320152244699419", "content": { "html": "<p>Help me, <a href=\"https://writing.exchange/tags/indieweb\">#<span>indieweb</span></a> !</p>", "text": "Help me, #indieweb !" }, "published": "2024-10-17T01:24:59+00:00", "post-type": "note", "_id": "42580579", "_source": "8007", "_is_read": false }
History Rhyming (musings on #BarCamp, #Flickr, #Chumby)... there's opportunities for new and better stuff!
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://xoxo.zone/@artlung/113319834020332397", "content": { "html": "<p>History Rhyming (musings on <a href=\"https://xoxo.zone/tags/BarCamp\">#<span>BarCamp</span></a>, <a href=\"https://xoxo.zone/tags/Flickr\">#<span>Flickr</span></a>, <a href=\"https://xoxo.zone/tags/Chumby\">#<span>Chumby</span></a>)... there's opportunities for new and better stuff!</p><p><a href=\"https://artlung.com/blog/2024/10/16/history-rhyming/\"><span>https://</span><span>artlung.com/blog/2024/10/16/hi</span><span>story-rhyming/</span></a></p><p><a href=\"https://xoxo.zone/tags/IndieWeb\">#<span>IndieWeb</span></a></p>", "text": "History Rhyming (musings on #BarCamp, #Flickr, #Chumby)... there's opportunities for new and better stuff!\n\nhttps://artlung.com/blog/2024/10/16/history-rhyming/\n\n#IndieWeb" }, "published": "2024-10-17T00:04:03+00:00", "post-type": "note", "_id": "42580580", "_source": "8007", "_is_read": false }
Rapaz... Fui editar um post de 2011 de um antigo blog que tenho no Wordpress.com (versão gratuita) e que dificuldade!
A interface toda bugada, não aceitando as inserções com mouse ou teclado... Só queria consertar um link quebrado... Felizmente, tinha como habilitar o modo HTML puro e aí apareceu o bloco de notas, aceitando tudo numa boa.
Fiz bem em criar meu blog atual no BearBlog, bem mais clean, tanto para ler quanto para editar.
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://bolha.us/@diegopds/113319984451843946", "content": { "html": "<p>Rapaz... Fui editar um post de 2011 de um antigo blog que tenho no Wordpress.com (vers\u00e3o gratuita) e que dificuldade!</p><p>A interface toda bugada, n\u00e3o aceitando as inser\u00e7\u00f5es com mouse ou teclado... S\u00f3 queria consertar um link quebrado... Felizmente, tinha como habilitar o modo HTML puro e a\u00ed apareceu o bloco de notas, aceitando tudo numa boa.</p><p>Fiz bem em criar meu blog atual no BearBlog, bem mais clean, tanto para ler quanto para editar.</p><p><a href=\"https://bolha.us/tags/indieweb\">#<span>indieweb</span></a> <a href=\"https://bolha.us/tags/blog\">#<span>blog</span></a> <a href=\"https://bolha.us/tags/blogging\">#<span>blogging</span></a> <a href=\"https://bolha.us/tags/wordpress\">#<span>wordpress</span></a> <a href=\"https://bolha.us/tags/bearblog\">#<span>bearblog</span></a></p>", "text": "Rapaz... Fui editar um post de 2011 de um antigo blog que tenho no Wordpress.com (vers\u00e3o gratuita) e que dificuldade!\n\nA interface toda bugada, n\u00e3o aceitando as inser\u00e7\u00f5es com mouse ou teclado... S\u00f3 queria consertar um link quebrado... Felizmente, tinha como habilitar o modo HTML puro e a\u00ed apareceu o bloco de notas, aceitando tudo numa boa.\n\nFiz bem em criar meu blog atual no BearBlog, bem mais clean, tanto para ler quanto para editar.\n\n#indieweb #blog #blogging #wordpress #bearblog" }, "published": "2024-10-17T00:42:19+00:00", "post-type": "note", "_id": "42580357", "_source": "8007", "_is_read": false }
Impressive collection of daily #photographs by @florianziegler with #webmentions integrating #Mastodon and lots of stats going back easily to 2016!
https://florian.photo/2024-09-19
https://florian.photo/acroyoga-jam-essen-ii
{ "type": "entry", "author": { "name": "#webmentions", "url": "https://mastodon.social/tags/webmentions", "photo": null }, "url": "https://typo.social/@Luke/113318812243503103", "content": { "html": "<p>Impressive collection of daily <a href=\"https://typo.social/tags/photographs\">#<span>photographs</span></a> by <span class=\"h-card\"><a class=\"u-url\" href=\"https://mastodon.social/@florianziegler\">@<span>florianziegler</span></a></span> with <a href=\"https://typo.social/tags/webmentions\">#<span>webmentions</span></a> integrating <a href=\"https://typo.social/tags/Mastodon\">#<span>Mastodon</span></a> and lots of stats going back easily to 2016!</p><p><img alt=\":CameraPolaroid:\" height=\"16\" src=\"https://files.mastodon.social/cache/custom_emojis/images/000/509/652/original/c33832a72d8e5e87.png\" title=\":CameraPolaroid:\" width=\"16\" /><img alt=\":ImagePolaroid:\" height=\"16\" src=\"https://files.mastodon.social/cache/custom_emojis/images/000/688/979/original/fa3d7cc25555d303.png\" title=\":ImagePolaroid:\" width=\"16\" /><img alt=\":BookHeart:\" height=\"16\" src=\"https://files.mastodon.social/cache/custom_emojis/images/000/452/577/original/680b97f8ecf819c6.png\" title=\":BookHeart:\" width=\"16\" /><br /><a href=\"https://florian.photo/2024-09-19\"><span>https://</span><span>florian.photo/2024-09-19</span><span></span></a></p><p><a href=\"https://florian.photo/acroyoga-jam-essen-ii\"><span>https://</span><span>florian.photo/acroyoga-jam-ess</span><span>en-ii</span></a></p>\n<a class=\"u-mention\" href=\"https://mastodon.social/@florianziegler\"></a>", "text": "Impressive collection of daily #photographs by @florianziegler with #webmentions integrating #Mastodon and lots of stats going back easily to 2016!\n\n\nhttps://florian.photo/2024-09-19\n\nhttps://florian.photo/acroyoga-jam-essen-ii" }, "published": "2024-10-16T19:44:12+00:00", "post-type": "note", "_id": "42577849", "_source": "8007", "_is_read": false }
Inspired by the #IndieWeb, I've added a "Now" page to my website.
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://fosstodon.org/@rubenwardy/113318782412017480", "content": { "html": "<p>Inspired by the <a href=\"https://fosstodon.org/tags/IndieWeb\">#<span>IndieWeb</span></a>, I've added a \"Now\" page to my website. </p><p><a href=\"https://rubenwardy.com/now/\"><span>https://</span><span>rubenwardy.com/now/</span><span></span></a></p>", "text": "Inspired by the #IndieWeb, I've added a \"Now\" page to my website. \n\nhttps://rubenwardy.com/now/" }, "published": "2024-10-16T19:36:37+00:00", "post-type": "note", "_id": "42577797", "_source": "8007", "_is_read": false }
https://blogroll.org/planet/
This is fucking cool!
#indieweb #SmallWeb
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://mastodon.social/@jelloeater/113318293323120335", "content": { "html": "<p><a href=\"https://blogroll.org/planet/\"><span>https://</span><span>blogroll.org/planet/</span><span></span></a><br />This is fucking cool!<br /><a href=\"https://mastodon.social/tags/indieweb\">#<span>indieweb</span></a> <a href=\"https://mastodon.social/tags/SmallWeb\">#<span>SmallWeb</span></a></p>", "text": "https://blogroll.org/planet/\nThis is fucking cool!\n#indieweb #SmallWeb" }, "published": "2024-10-16T17:32:14+00:00", "post-type": "note", "_id": "42576870", "_source": "8007", "_is_read": false }
{ "type": "entry", "author": { "name": null, "url": "https://dri.es/", "photo": null }, "url": "https://dri.es/my-solar-powered-and-self-hosted-website", "published": "2024-10-15T15:43:10-04:00", "content": { "html": "<p>I'm excited to share an experiment I've been working on: a solar-powered, self-hosted website running on a Raspberry Pi. The website at <a href=\"https://solar.dri.es/\">https://solar.dri.es</a> is powered entirely by a solar panel and battery on our roof deck in Boston.</p>\n\n <img src=\"https://dri.es/files/cache/miscellaneous-2024/solar-panel-on-roofdeck-1280w.jpg\" alt=\"A solar panel on a rooftop during sunset with a city skyline in the background.\" title=\"Solar panel on roofdeck\" /><em>My solar panel and Raspberry Pi Zero 2 are set up on our rooftop deck for testing. Once it works, it will be mounted properly and permanently.</em><p>By visiting <a href=\"https://solar.dri.es/\">https://solar.dri.es</a>, you can dive into all the technical details and lessons learned \u2013 from hardware setup to networking configuration and custom monitoring.</p>\n\n<p>As the content on this solar-powered site is likely to evolve or might even disappear over time, I've included the full article below (with minor edits) to ensure that this information is preserved.</p>\n\n<p>Finally, you can view the real-time status of my solar setup on my <a href=\"https://dri.es/sensors/solar\">solar panel dashboard</a>, hosted on my main website. This dashboard stays online even when my solar-powered setup goes offline.</p>\n\n<h3>Background</h3>\n\n<p>For over two decades, I've been deeply involved in web development. I've worked on everything from simple websites to building and managing some of the internet's largest websites. I've helped create a hosting business that uses thousands of EC2 instances, handling billions of page views every month. This platform includes the latest technology: cloud-native architecture, Kubernetes orchestration, auto-scaling, smart traffic routing, geographic failover, self-healing, and more.</p>\n\n<p>This project is the complete opposite. It's a hobby project focused on sustainable, solar-powered self-hosting. The goal is to use the smallest, most energy-efficient setup possible, even if it means the website goes offline sometimes. Yes, this site may go down on cloudy or cold days. But don't worry! When the sun comes out, the website will be back up, powered by sunshine.</p>\n\n<p>My primary website, <a href=\"https://dri.es/\">https://dri.es</a>, is reliably hosted on <a href=\"https://www.acquia.com/\">Acquia</a>, and I'm very happy with it. However, if this solar-powered setup proves stable and efficient, I might consider moving some content to solar hosting. For instance, I could keep the most important pages on traditional hosting while transferring less essential content \u2013 like <a href=\"https://dri.es/photos\">my 10,000 photos</a> \u2013 to a solar-powered server.</p>\n\n<h3>Why am I doing this?</h3>\n\n<p>This project is driven by my curiosity about making websites and web hosting more environmentally friendly, even on a small scale. It's also a chance to explore a local-first approach: to show that hosting a personal website on your own internet connection at home can often be enough for small sites. This aligns with my commitment to both the <a href=\"https://dri.es/tag/open-web\">Open Web</a> and the <a href=\"https://indieweb.org/\">IndieWeb</a>.</p>\n\n<p>At its heart, this project is about learning and contributing to a conversation on a greener, local-first future for the web. Inspired by solar-powered sites like <a href=\"https://solar.lowtechmagazine.com/\">LowTech Magazine</a>, I hope to spark similar ideas in others. If this experiment inspires even one person in the web community to rethink hosting and sustainability, I'll consider it a success.</p>\n\n<h3>Solar panel and battery</h3>\n\n<p>The heart of my solar setup is a 50-watt panel from <a href=\"https://voltaicsystems.com/\">Voltaic</a>, which captures solar energy and delivers 12-volt output. I store the excess power in an 18 amp-hour Lithium Iron Phosphate (LFP or LiFePO4) battery, also from Voltaic.</p>\n\n\n <img src=\"https://dri.es/files/cache/miscellaneous-2024/first-solar-panel-test-1280w.jpg\" alt=\"A solar panel being tested on a laundry room floor.\" title=\"First solar panel test\" /><em>A solar panel being tested on the floor in our laundry room. Upon connecting it, it started charging a battery right away. It feels truly magical. Of course, it won't stay in the laundry room forever so stay tuned for more ...</em><p>I'll never forget the first time I plugged in the solar panel \u2013 it felt like pure magic. Seeing the battery spring to life, powered entirely by sunlight, was an exhilarating moment that is hard to put into words. And yes, all this electrifying excitement happened right in our laundry room.</p>\n\n\n <img src=\"https://dri.es/files/cache/blog/18ah-battery-1280w.jpg\" alt=\"A large battery, the size of a loaf of bread, with a solar panel in the background.\" title=\"18ah battery\" /><em>A 18Ah LFP battery from Voltaic, featuring a waterproof design and integrated MPPT charge controller. The battery is large and heavy, weighing 3kg (6.6lbs), but it can power a Raspberry Pi for days.</em><p>Voltaic's battery system includes a built-in charge controller with Maximum Power Point Tracking (MPPT) technology, which regulates the solar panel's output to optimize battery charging. In addition, the MPPT controller protects the battery from overcharging, extreme temperatures, and short circuits.</p>\n\n<p>A key feature of the charge controller is its ability to stop charging when temperatures fall below 0\u00b0C (32\u00b0F). This preserves battery health, as charging in freezing conditions can damage the battery cells. As I'll discuss in the <a href=\"https://dri.es/#next-steps\">Next steps</a> section, this safeguard complicates year-round operation in Boston's harsh winters. I'll likely need a battery that can charge in colder temperatures.</p>\n\n <img src=\"https://dri.es/files/cache/blog/12v-to-5v-converter-1-1280w.jpg\" alt=\"A 12V to 5V voltage converter in a waterproof metal box the size of a matchbox, placed on a gridded mat.\" title=\"12V to V5 converter\" /><em>The 12V to 5V voltage converter used to convert the 12V output from the solar panel to 5V for the Raspberry Pi.</em><p>I also encountered a voltage mismatch between the 12-volt solar panel output and the Raspberry Pi's 5-volt input requirement. Fortunately, this problem had a more straightforward solution. I solved this using a <a href=\"https://en.wikipedia.org/wiki/Buck_converter\">buck converter</a> to step down the voltage. While this conversion introduces some energy loss, it allows me to use a more powerful solar panel.</p>\n\n<h3>Raspberry Pi models</h3>\n\n<p>This website is currently hosted on a <a href=\"https://www.raspberrypi.com/\">Raspberry Pi Zero 2 W</a>. The main reason for choosing the Raspberry Pi Zero 2 W is its energy efficiency. Consuming just 0.4 watts at idle and up to 1.3 watts under load, it can run on my battery for about a week. This decision is supported by a mathematical uptime model, detailed in <a href=\"https://dri.es/#sizing-raspberry-pi-zero-2\">Appendix 1</a>.</p>\n\n<p>That said, the Raspberry Pi Zero 2 W has limitations. With its single-core 1 GHz processor and 512 MB of RAM, it may struggle with heavier website traffic. For this reason, I also considered the Raspberry Pi 4. With its 1.5 GHz quad-core ARM processor and 4 GB of RAM, the Raspberry Pi 4 can handle more traffic. However, this added performance comes at a cost: the Pi 4 consumes roughly five times the power of the Zero 2 W. As shown in <a href=\"https://dri.es/#sizing-raspberry-pi-4\">Appendix 2</a>, my 50W solar panel and 18Ah battery setup are likely insufficient to power the Raspberry Pi 4 through Boston's winter.</p>\n\n<p>With a single-page website now live on <a href=\"https://solar.dri.es/\">https://solar.dri.es</a>, I'm actively monitoring the real-world performance and uptime of a solar-powered Raspberry Pi Zero 2 W. For now, I'm using the lightest setup that I have available and will upgrade only when needed.</p>\n\n<h3>Networking</h3>\n\n<p>The Raspberry Pi's built-in Wi-Fi is perfect for our outdoor setup. It wirelessly connects to our home network, so no extra wiring was needed.</p>\n\n<p>I want to call out that my router and Wi-Fi network are not solar-powered; they rely on my existing network setup and conventional power sources. So while the web server itself runs on solar power, other parts of the delivery chain still depend on traditional energy.</p>\n\n<p>Running this website on my home internet connection also means that if my ISP or networking equipment goes down, so does the website \u2013 there is no failover in place.</p>\n\n<p>For security reasons, I isolated the Raspberry Pi in its own Virtual Local Area Network (VLAN). This ensures that even if the Pi is compromised, the rest of our home network remains protected.</p>\n\n<p>To make the solar-powered website accessible from the internet, I configured port forwarding on our router. This directs incoming web traffic on port 80 (HTTP) and port 443 (HTTPS) to the Raspberry Pi, enabling external access to the site.</p>\n\n<p>One small challenge was the dynamic nature of our IP address. ISPs typically do not assign fixed IP addresses, meaning our IP address changes from time to time. To keep the website accessible despite these IP address changes, I wrote a small script that looks up our public IP address and updates the DNS record for <code>solar.dri.es</code> on Cloudflare. This script runs every 10 minutes via a cron job.</p>\n\n<p>I use <a href=\"https://developers.cloudflare.com/dns/manage-dns-records/reference/proxied-dns-records/\">Cloudflare's DNS proxy</a>, which handles DNS and offers basic DDoS protection. However, I do <em>not</em> use Cloudflare's caching or CDN features, as that would somewhat defeat the purpose of running this website on solar power and keeping it local-first.</p>\n\n<p>The Raspberry Pi uses <a href=\"https://caddyserver.com/\">Caddy</a> as its web server, which automatically obtains SSL certificates from <a href=\"https://letsencrypt.org/\">Let's Encrypt</a>. This setup ensures secure, encrypted HTTP connections to the website.</p>\n\n<h3>Monitoring and dashboard</h3>\n\n <img src=\"https://dri.es/files/cache/blog/raspberry-pi-4-and-rs485-can-hat-1280w.jpg\" alt=\"A Raspberry Pi 4 and an RS485 CAN HAT next to each other.\" title=\"Raspberry Pi 4 and RS485 CAN HAT\" /><em>The Raspberry Pi 4 (on the left) can run a website, while the RS485 CAN HAT (on the right) will communicate with the charge controller for the solar panel and battery.</em><p>One key feature that influenced my decision to go with the Voltaic battery is its <a href=\"https://en.wikipedia.org/wiki/RS-485\">RS485 interface</a> for the charge controller. This allowed me to add an RS485 CAN HAT (Hardware Attached on Top) to the Raspberry Pi, enabling communication with the charge controller using the <a href=\"https://en.wikipedia.org/wiki/Modbus\">Modbus protocol</a>. In turn, this enabled me to programmatically gather real-time data on the solar panel's output and battery's status.</p>\n\n<p>I collect data such as battery capacity, power output, temperature, uptime, and more. I send this data to my main website via a web service API, where it's displayed on a <a href=\"https://dri.es/sensors/solar\">dashboard</a>. This setup ensures that key information remains accessible, even if the Raspberry Pi goes offline.</p>\n\n<p>My main website runs on <a href=\"https://www.drupal.org/\">Drupal</a>. The dashboard is powered by a custom module I developed. This module adds a web service endpoint to handle authentication, validate incoming JSON data, and store it in a MariaDB database table. Using the historical data stored in MariaDB, the module generates Scalable Vector Graphics (SVGs) for the dashboard graphs. For more details, check out my post on <a href=\"https://dri.es/building-my-own-temperature-and-humidity-monitor\">building a temperature and humidity monitor</a>, which explains a similar setup in much more detail. Sure, I could have used a tool like <a href=\"https://grafana.com/\">Grafana</a>, but sometimes building it yourself is part of the fun.</p>\n\n <img src=\"https://dri.es/files/cache/blog/raspberry-pi-4-enclosure-1280w.jpg\" alt=\"A Raspberry Pi 4 with an RS485 CAN HAT in a waterproof enclosure, surrounded by cables, screws and components.\" title=\"Raspberry Pi 4 in a waterproof enclosure\" /><em>A Raspberry Pi 4 with an attached RS485 CAN HAT module is being installed in a waterproof enclosure.</em><p>For more details on the charge controller and some of the issues I've observed, please refer to <a href=\"https://dri.es/#lumiax-observations\">Appendix 3</a>.</p>\n\n<h3>Energy use, cost savings, and environmental impact</h3>\n\n<p>When I started this solar-powered website project, I wasn't trying to revolutionize sustainable computing or drastically cut my electricity bill. I was driven by curiosity, a desire to have fun, and a hope that my journey might inspire others to explore local-first or solar-powered hosting.</p>\n\n<p>That said, let's break down the energy consumption and cost savings to get a better sense of the project's impact.</p>\n\n<p>The tiny Raspberry Pi Zero 2 W at the heart of this project uses just 1 Watt on average. This translates to 0.024 kWh daily (1W * 24h / 1000 = 0.024 kWh) and approximately 9 kWh annually (0.024 kWh * 365 days = 8.76 kWh). The cost savings? Looking at our last electricity bill, we pay an average of $0.325 per kWh in Boston. This means the savings amount to $2.85 USD per year (8.76 kWh * $0.325/kWh = $2.85). Not exactly something to write home about.</p>\n\n<p>The environmental impact is similarly modest. Saving 9 kWh per year reduces CO2 emissions by roughly 4 kg, which is about the same as driving 16 kilometers (10 miles) by car.</p>\n\n<p>There are two ways to interpret these numbers. The pessimist might say that the impact of my solar setup is negligible, and they wouldn't be wrong. Offsetting the energy use of a Raspberry Pi Zero 2, which only draws 1 Watt, will never be game-changing. The $2.85 USD saved annually won't come close to covering the cost of the solar panel and battery. In terms of efficiency, this setup isn't a win.</p>\n\n<p>But the optimist in me sees it differently. When you compare my solar-powered setup to traditional website hosting, a more compelling case emerges. Using a low-power Raspberry Pi to host a basic website, rather than large servers in energy-hungry data centers, can greatly cut down on both expenses and environmental impact. Consider this: a Raspberry Pi Zero 2 W costs just $15 USD, and I can power it with main power for only $0.50 USD a month. In contrast, traditional hosting might cost around $20 USD a month. Viewed this way, my setup is both more sustainable and economical, showing some merit.</p>\n\n<p>Lastly, it's also important to remember that solar power isn't just about saving money or cutting emissions. In remote areas without grid access or during disaster relief, solar can be the only way to keep communication systems running. In a crisis, a small solar setup could make the difference between isolation and staying connected to essential information and support.</p>\n\n<h3>Why do so many websites need to stay up?</h3>\n\n<p>The reason the energy savings from my solar-powered setup won't offset the equipment costs is that the system is intentionally oversized to keep the website running during extended low-light periods. Once the battery reaches full capacity, any excess energy goes to waste. That is unfortunate as that surplus could be used, and using it would help offset more of the hardware costs.</p>\n\n<p>This inefficiency isn't unique to solar setups \u2013 it highlights a bigger issue in web hosting: over-provisioning. The web hosting world is full of mostly idle hardware. Web hosting providers often allocate more resources than necessary to ensure high uptime or failover, and this comes at an environmental cost.</p>\n\n<p>One way to make web hosting more eco-friendly is by allowing <em>non-essential</em> websites to experience more downtime, reducing the need to power as much hardware. Of course, many websites are critical and need to stay up 24/7 \u2013 my own work with <a href=\"https://www.acquia.com/\">Acquia</a> is dedicated to ensuring essential sites do just that. But for non-critical websites, allowing some downtime could go a long way in conserving energy.</p>\n\n<p>It may seem unconventional, but I believe it's worth considering: many websites, mine included, aren't mission-critical. The world won't end if they occasionally go offline. That is why I like the idea of hosting <a href=\"https://dri.es/photos\">my 10,000 photos</a> on a solar-powered Raspberry Pi.</p>\n\n<p>And maybe that is the real takeaway from this experiment so far: to question why our websites and hosting solutions have become so resource-intensive and why we're so focused on keeping non-essential websites from going down. Do we really need 99.9% uptime for <em>personal</em> websites? I don't think so.</p>\n\n<p>Perhaps the best way to make the web more sustainable is to accept more downtime for those websites that aren't critical. By embracing occasional downtime and intentionally under-provisioning non-essential websites, we can make the web a greener, more efficient place.\n\n</p>\n <img src=\"https://dri.es/files/cache/blog/mounted-solar-panel-1280w.jpg\" alt=\"A solar panel and battery mounted securely on a roof deck railing.\" title=\"Mounted solar panel\" /><em>The solar panel and battery mounted on our roof deck.</em><h3>Next steps</h3>\n\n<p>As I continue this experiment, my biggest challenge is the battery's inability to charge in freezing temperatures. As explained, the battery's charge controller includes a safety feature that prevents charging when the temperature drops below freezing. While the Raspberry Pi Zero 2 W can run on my fully charged battery for about six days, this won't be sufficient for Boston winters, where temperatures often remain below freezing for longer.</p>\n\n<p>With winter approaching, I need a solution to charge my battery in extreme cold. Several options to consider include:</p>\n\n<ol><li>Adding a battery heating system that uses excess energy during peak sunlight hours.</li>\n <li>Applying insulation, though this alone may not suffice since the battery generates minimal heat.</li>\n<li>Replacing the battery with one that charges at temperatures as low as -20\u00b0C (-4\u00b0F), such as Lithium Titanate (LTO) or certain AGM lead-acid batteries. However, it's not as simple as swapping it out \u2013 my current battery has a built-in charge controller, so I'd likely need to add an external charge controller, which would require rewiring the solar panel and updating my monitoring code.</li>\n</ol><p>Each solution has trade-offs in cost, safety, and complexity. I'll need to research the different options carefully to ensure safety and reliability.</p>\n\n<p>The last quarter of the year is filled with travel and other commitments, so I may not have time to implement a fix before freezing temperatures hit. With some luck, the current setup might make it through winter. I'll keep monitoring performance and uptime \u2013 and, as mentioned, a bit of downtime is acceptable and even part of the fun! That said, the website may go offline for a few weeks and restart after the harshest part of winter. Meanwhile, I can focus on other aspects of the project.</p>\n\n<p>For example, I plan to expand this single-page site into one with hundreds or even thousands of pages. Here are a few things I'd like to explore:</p>\n\n<ol><li><strong>Testing Drupal on a Raspberry Pi Zero 2 W:</strong> As the founder and project lead of <a href=\"https://drupal.org/\">Drupal</a>, my main website runs on Drupal. I'm curious to see if Drupal can actually run on a Raspberry Pi Zero 2 W. The answer might be \"probably not\", but I'm eager to try.</li>\n <li><strong>Upgrading to a Raspberry Pi 4 or 5:</strong> I'd like to experiment with upgrading to a Raspberry Pi 4 or 5, as I know it could run Drupal. As noted in <a href=\"https://dri.es/#sizing-raspberry-pi-4\">Appendix 2</a>, this might push the limits of my solar panel and battery. There are some optimization options to explore though, like disabling CPU cores, lowering the RAM clock speed, and dynamically adjusting features based on sunlight and battery levels.</li>\n <li><strong>Creating a static version of my site:</strong> I'm interested in experimenting with a static version of <a href=\"https://dri.es/\">https://dri.es</a>. A static site doesn't require PHP or MySQL, which would likely reduce resource demands and make it easier to run on a Raspberry Pi Zero 2 W. However, dynamic features like <a href=\"https://dri.es/sensors/solar\">my solar dashboard</a> depend on PHP and MySQL, so I'd potentially need alternative solutions for those. Tools like <a href=\"https://www.drupal.org/project/tome\">Tome</a> and <a href=\"https://www.drupal.org/project/quantcdn\">QuantCDN</a> offer ways to generate static versions of Drupal sites, but I've never tested these myself. Although I prefer keeping my site dynamic, creating a static version also aligns with my interests in digital preservation and archiving, offering me a chance to delve deeper into these concepts.</li>\n</ol><p>Either way, it looks like I'll have some fun ahead. I can explore these ideas from my office while the Raspberry Pi Zero 2 W continues running on the roof deck. I'm open to suggestions and happy to share notes with others interested in similar projects. If you'd like to stay updated on my progress, you can <a href=\"https://dri.es/subscribe\">sign up to receive new posts by email</a> or <a href=\"https://dri.es/rss.xml\">subscribe via RSS</a>. Feel free to email me at dries@buytaert.net. Your ideas, input, and curiosity are always welcome.</p>\n\n<h3>Appendix</h3>\n\n<h4>Appendix 1: Sizing a solar panel and battery for a Raspberry Pi Zero 2 W</h4>\n\n<p>To keep the Raspberry Pi Zero 2 W running in various weather conditions, we need to estimate the ideal solar panel and battery size. We'll base this on factors like power consumption, available sunlight, and desired uptime.</p>\n\n<p>The Raspberry Pi Zero 2 W is very energy-efficient, consuming only 0.4W at idle and up to 1.3W under load. For simplicity, we'll assume an average power consumption of 1W, which totals 24Wh per day (1W * 24 hours).</p>\n\n<p>We also need to account for energy losses due to inefficiencies in the solar panel, charge controller, battery, and inverter. Assuming a total loss of 30%, our estimated daily energy requirement is 24Wh / 0.7 \u2248 34.3Wh.</p>\n\n<p>In Boston, peak sunlight varies throughout the year, averaging 5-6 hours per day in summer (June-August) and only 2-3 hours per day in winter (December-February). Peak sunlight refers to the strongest, most direct sunlight hours. Basing the design on peak sunlight hours rather than total daylight hours provides a margin of safety.</p>\n\n<p>To produce 34.3Wh in the winter, with only 2 hours of peak sunlight, the solar panel should generate about 17.15W (34.3Wh / 2 hours \u2248 17.15W). As mentioned, my current setup includes a 50W solar panel, which provides well above the estimated 17.15W requirement.</p>\n\n<p>Now, let's look at battery sizing. As explained, I have an 18Ah battery, which provides about 216Wh of capacity (18Ah * 12V = 216Wh). If there were no sunlight at all, this battery could power the Raspberry Pi Zero 2 W for roughly 6 days (216Wh / 34.3Wh per day \u2248 6.3 days), ensuring continuous operation even on snowy winter days.</p>\n\n<p>These estimates suggest that I could halve both my 50W solar panel and 18Ah battery to a 25W panel and a 9Ah battery, and still meet the Raspberry Pi Zero 2 W's power needs during Boston winters. However, I chose the 50W panel and larger battery for flexibility, in case I need to upgrade to a more powerful board with higher energy requirements.</p>\n\n<h4>Appendix 2: Sizing a solar panel and battery for a Raspberry Pi 4</h4>\n\n<p>If I need to switch to a Raspberry Pi 4 to handle increased website traffic, the power requirements will rise significantly. The Raspberry Pi 4 consumes around 3.4W at idle and up to 7.6W under load. For estimation purposes, I'll assume an average consumption of 4.5W, which totals 108Wh per day (4.5W * 24 hours = 108Wh).</p>\n\n<p>Factoring in a 30% loss due to system inefficiencies, the adjusted daily energy requirement increases to approximately 154.3Wh (108Wh / 0.7 \u2248 154.3Wh). To meet this demand during winter, with only 2 hours of peak sunlight, the solar panel would need to produce about 77.15W (154.3Wh / 2 hours \u2248 77.15W).</p>\n\n<p>While some margin of safety is built into my calculations, this likely means my current 50W solar panel and 216Wh battery are insufficient to power a Raspberry Pi 4 during a Boston winter.</p>\n\n<p>For example, with an average power draw of 4.5W, the Raspberry Pi 4 requires 108Wh daily. In winter, if the solar panel generates only 70 to 105Wh per day, there would be a shortfall of 3 to 38Wh each day, which the battery would need to cover. And with no sunlight at all, a fully charged 216Wh battery would keep the system running for about 2 days (216Wh / 108Wh per day \u2248 2 days) before depleting.</p>\n\n<p>To ensure reliable operation, a 100W solar panel, capable of generating enough power with just 2 hours of winter sunlight, paired with a 35Ah battery providing 420Wh, could be better. This setup, roughly double my current capacity, would offer sufficient backup to keep the Raspberry Pi 4 running for 3-4 days without sunlight.</p>\n\n<h4>Appendix 3: Observations on the Lumiax charge controller</h4>\n\n<p>As I mentioned earlier, my battery has a built-in charge controller. The brand of the controller is <a href=\"https://www.lumiax.com/\">Lumiax</a>, and I can access its data programmatically. While the controller excels at managing charging, its metering capabilities feel less robust. Here are a few observations:</p>\n\n<ol><li>I reviewed the charge controller's manual to clarify how it defines and measures different currents, but the information provided was insufficient.\n <ul><li>The charge controller allows monitoring of the \"solar current\" (register <code>12367</code>). I expected this to measure the current flowing from the solar panel to the charge controller, but it actually measures the current flowing from the charge controller to the battery. In other words, it tracks the \"useful current\" \u2013 the current from the solar panel used to charge the battery or power the load. The problem with this is that when the battery is fully charged, the controller reduces the current from the solar panel to prevent overcharging, even though the panel could produce more. As a result, I can't accurately measure the maximum power output of the solar panel. For example, in full sunlight with a fully charged battery, the calculated power output could be as low as 2W, even though the solar panel is capable of producing 50W.</li>\n <li>The controller also reports the \"battery current\" (register <code>12359</code>), which appears to represent the current flowing from the battery to the Raspberry Pi. I believe this to be the case because the \"battery current\" turns negative at night, indicating discharge.</li>\n <li>Additionally, the controller reports the \"load current\" (register <code>12362</code>), which, in my case, consistently reads zero. This is odd because my Raspberry Pi Zero 2 typically draws between 0.1-0.3A. Even with a Raspberry Pi 4, drawing between 0.6-1.3A, the controller still reports 0A. This could be a bug or suggest that the charge controller lacks sufficient accuracy.</li>\n </ul></li>\n <li>When the battery discharges and the low voltage protection activates, it shuts down the Raspberry Pi as expected. However, if there isn't enough sunlight to recharge the battery within a certain timeframe, the Raspberry Pi does not automatically reboot. Instead, I must perform a manual 'factory reset' of the charge controller. This involves connecting my laptop to the controller \u2013 a cumbersome process that requires me to disconnect the Raspberry Pi, open its waterproof enclosure, detach the RS485 hat wires, connect them to a USB-to-RS485 adapter for my laptop, and run a custom Python script. Afterward, I have to reverse the entire process. This procedure can't be performed while traveling as it requires physical access.</li>\n <li>The charge controller has two temperature sensors: one for the environment and one for the controller itself. However, the controller's temperature readings often seem inaccurate. For example, while the environment temperature might correctly register at 24\u00b0C, the controller could display a reading as low as 14\u00b0C. This seems questionable though there might be an explanation that I'm overlooking.</li>\n <li>The battery's charge and discharge patterns are non-linear, meaning the charge level may drop rapidly at first, then stay steady for hours. For example, I've seen it drop from 100% to 65% within an hour but remain at 65% for over six hours. This is common for LFP batteries due to their voltage characteristics. Some advanced charge controllers use look-up tables, algorithms, or coulomb counting to more accurately predict the state of charge based on the battery type and usage patterns. The Lumiax doesn't support this, but I might be able to implement coulomb counting myself by tracking the current flow to improve charge level estimates.</li>\n</ol><h4>Appendix 4: When size matters (but it's best not to mention it)</h4>\n\n<p>When buying a solar panel, sometimes it's easier to beg for forgiveness than to ask for permission.</p>\n\n<p>One day, I casually mentioned to my wife, \"Oh, by the way, I bought something. It will arrive in a few days.\"</p>\n\n<p>\"What did you buy?\", she asked, eyebrow raised.</p>\n\n<p>\"A solar panel\", I said, trying to sound casual.</p>\n\n<p>\"A what?!\", she asked again, her voice rising.</p>\n\n<p>Don't worry!\", I reassured her. \"It's not that big\", I said, gesturing with my hands to show a panel about the size of a laptop.</p>\n\n<p>She looked skeptical but didn't push further.</p>\n\n<p>Fast forward to delivery day. As I unboxed it, her eyes widened in surprise. The panel was easily four or five times larger than what I'd shown her. Oops.</p>\n\n<p>The takeaway? Sometimes a little underestimation goes a long way.</p>", "text": "I'm excited to share an experiment I've been working on: a solar-powered, self-hosted website running on a Raspberry Pi. The website at https://solar.dri.es is powered entirely by a solar panel and battery on our roof deck in Boston.\n\n My solar panel and Raspberry Pi Zero 2 are set up on our rooftop deck for testing. Once it works, it will be mounted properly and permanently.By visiting https://solar.dri.es, you can dive into all the technical details and lessons learned \u2013 from hardware setup to networking configuration and custom monitoring.\n\nAs the content on this solar-powered site is likely to evolve or might even disappear over time, I've included the full article below (with minor edits) to ensure that this information is preserved.\n\nFinally, you can view the real-time status of my solar setup on my solar panel dashboard, hosted on my main website. This dashboard stays online even when my solar-powered setup goes offline.\n\nBackground\n\nFor over two decades, I've been deeply involved in web development. I've worked on everything from simple websites to building and managing some of the internet's largest websites. I've helped create a hosting business that uses thousands of EC2 instances, handling billions of page views every month. This platform includes the latest technology: cloud-native architecture, Kubernetes orchestration, auto-scaling, smart traffic routing, geographic failover, self-healing, and more.\n\nThis project is the complete opposite. It's a hobby project focused on sustainable, solar-powered self-hosting. The goal is to use the smallest, most energy-efficient setup possible, even if it means the website goes offline sometimes. Yes, this site may go down on cloudy or cold days. But don't worry! When the sun comes out, the website will be back up, powered by sunshine.\n\nMy primary website, https://dri.es, is reliably hosted on Acquia, and I'm very happy with it. However, if this solar-powered setup proves stable and efficient, I might consider moving some content to solar hosting. For instance, I could keep the most important pages on traditional hosting while transferring less essential content \u2013 like my 10,000 photos \u2013 to a solar-powered server.\n\nWhy am I doing this?\n\nThis project is driven by my curiosity about making websites and web hosting more environmentally friendly, even on a small scale. It's also a chance to explore a local-first approach: to show that hosting a personal website on your own internet connection at home can often be enough for small sites. This aligns with my commitment to both the Open Web and the IndieWeb.\n\nAt its heart, this project is about learning and contributing to a conversation on a greener, local-first future for the web. Inspired by solar-powered sites like LowTech Magazine, I hope to spark similar ideas in others. If this experiment inspires even one person in the web community to rethink hosting and sustainability, I'll consider it a success.\n\nSolar panel and battery\n\nThe heart of my solar setup is a 50-watt panel from Voltaic, which captures solar energy and delivers 12-volt output. I store the excess power in an 18 amp-hour Lithium Iron Phosphate (LFP or LiFePO4) battery, also from Voltaic.\n\n\n A solar panel being tested on the floor in our laundry room. Upon connecting it, it started charging a battery right away. It feels truly magical. Of course, it won't stay in the laundry room forever so stay tuned for more ...I'll never forget the first time I plugged in the solar panel \u2013 it felt like pure magic. Seeing the battery spring to life, powered entirely by sunlight, was an exhilarating moment that is hard to put into words. And yes, all this electrifying excitement happened right in our laundry room.\n\n\n A 18Ah LFP battery from Voltaic, featuring a waterproof design and integrated MPPT charge controller. The battery is large and heavy, weighing 3kg (6.6lbs), but it can power a Raspberry Pi for days.Voltaic's battery system includes a built-in charge controller with Maximum Power Point Tracking (MPPT) technology, which regulates the solar panel's output to optimize battery charging. In addition, the MPPT controller protects the battery from overcharging, extreme temperatures, and short circuits.\n\nA key feature of the charge controller is its ability to stop charging when temperatures fall below 0\u00b0C (32\u00b0F). This preserves battery health, as charging in freezing conditions can damage the battery cells. As I'll discuss in the Next steps section, this safeguard complicates year-round operation in Boston's harsh winters. I'll likely need a battery that can charge in colder temperatures.\n\n The 12V to 5V voltage converter used to convert the 12V output from the solar panel to 5V for the Raspberry Pi.I also encountered a voltage mismatch between the 12-volt solar panel output and the Raspberry Pi's 5-volt input requirement. Fortunately, this problem had a more straightforward solution. I solved this using a buck converter to step down the voltage. While this conversion introduces some energy loss, it allows me to use a more powerful solar panel.\n\nRaspberry Pi models\n\nThis website is currently hosted on a Raspberry Pi Zero 2 W. The main reason for choosing the Raspberry Pi Zero 2 W is its energy efficiency. Consuming just 0.4 watts at idle and up to 1.3 watts under load, it can run on my battery for about a week. This decision is supported by a mathematical uptime model, detailed in Appendix 1.\n\nThat said, the Raspberry Pi Zero 2 W has limitations. With its single-core 1 GHz processor and 512 MB of RAM, it may struggle with heavier website traffic. For this reason, I also considered the Raspberry Pi 4. With its 1.5 GHz quad-core ARM processor and 4 GB of RAM, the Raspberry Pi 4 can handle more traffic. However, this added performance comes at a cost: the Pi 4 consumes roughly five times the power of the Zero 2 W. As shown in Appendix 2, my 50W solar panel and 18Ah battery setup are likely insufficient to power the Raspberry Pi 4 through Boston's winter.\n\nWith a single-page website now live on https://solar.dri.es, I'm actively monitoring the real-world performance and uptime of a solar-powered Raspberry Pi Zero 2 W. For now, I'm using the lightest setup that I have available and will upgrade only when needed.\n\nNetworking\n\nThe Raspberry Pi's built-in Wi-Fi is perfect for our outdoor setup. It wirelessly connects to our home network, so no extra wiring was needed.\n\nI want to call out that my router and Wi-Fi network are not solar-powered; they rely on my existing network setup and conventional power sources. So while the web server itself runs on solar power, other parts of the delivery chain still depend on traditional energy.\n\nRunning this website on my home internet connection also means that if my ISP or networking equipment goes down, so does the website \u2013 there is no failover in place.\n\nFor security reasons, I isolated the Raspberry Pi in its own Virtual Local Area Network (VLAN). This ensures that even if the Pi is compromised, the rest of our home network remains protected.\n\nTo make the solar-powered website accessible from the internet, I configured port forwarding on our router. This directs incoming web traffic on port 80 (HTTP) and port 443 (HTTPS) to the Raspberry Pi, enabling external access to the site.\n\nOne small challenge was the dynamic nature of our IP address. ISPs typically do not assign fixed IP addresses, meaning our IP address changes from time to time. To keep the website accessible despite these IP address changes, I wrote a small script that looks up our public IP address and updates the DNS record for solar.dri.es on Cloudflare. This script runs every 10 minutes via a cron job.\n\nI use Cloudflare's DNS proxy, which handles DNS and offers basic DDoS protection. However, I do not use Cloudflare's caching or CDN features, as that would somewhat defeat the purpose of running this website on solar power and keeping it local-first.\n\nThe Raspberry Pi uses Caddy as its web server, which automatically obtains SSL certificates from Let's Encrypt. This setup ensures secure, encrypted HTTP connections to the website.\n\nMonitoring and dashboard\n\n The Raspberry Pi 4 (on the left) can run a website, while the RS485 CAN HAT (on the right) will communicate with the charge controller for the solar panel and battery.One key feature that influenced my decision to go with the Voltaic battery is its RS485 interface for the charge controller. This allowed me to add an RS485 CAN HAT (Hardware Attached on Top) to the Raspberry Pi, enabling communication with the charge controller using the Modbus protocol. In turn, this enabled me to programmatically gather real-time data on the solar panel's output and battery's status.\n\nI collect data such as battery capacity, power output, temperature, uptime, and more. I send this data to my main website via a web service API, where it's displayed on a dashboard. This setup ensures that key information remains accessible, even if the Raspberry Pi goes offline.\n\nMy main website runs on Drupal. The dashboard is powered by a custom module I developed. This module adds a web service endpoint to handle authentication, validate incoming JSON data, and store it in a MariaDB database table. Using the historical data stored in MariaDB, the module generates Scalable Vector Graphics (SVGs) for the dashboard graphs. For more details, check out my post on building a temperature and humidity monitor, which explains a similar setup in much more detail. Sure, I could have used a tool like Grafana, but sometimes building it yourself is part of the fun.\n\n A Raspberry Pi 4 with an attached RS485 CAN HAT module is being installed in a waterproof enclosure.For more details on the charge controller and some of the issues I've observed, please refer to Appendix 3.\n\nEnergy use, cost savings, and environmental impact\n\nWhen I started this solar-powered website project, I wasn't trying to revolutionize sustainable computing or drastically cut my electricity bill. I was driven by curiosity, a desire to have fun, and a hope that my journey might inspire others to explore local-first or solar-powered hosting.\n\nThat said, let's break down the energy consumption and cost savings to get a better sense of the project's impact.\n\nThe tiny Raspberry Pi Zero 2 W at the heart of this project uses just 1 Watt on average. This translates to 0.024 kWh daily (1W * 24h / 1000 = 0.024 kWh) and approximately 9 kWh annually (0.024 kWh * 365 days = 8.76 kWh). The cost savings? Looking at our last electricity bill, we pay an average of $0.325 per kWh in Boston. This means the savings amount to $2.85 USD per year (8.76 kWh * $0.325/kWh = $2.85). Not exactly something to write home about.\n\nThe environmental impact is similarly modest. Saving 9 kWh per year reduces CO2 emissions by roughly 4 kg, which is about the same as driving 16 kilometers (10 miles) by car.\n\nThere are two ways to interpret these numbers. The pessimist might say that the impact of my solar setup is negligible, and they wouldn't be wrong. Offsetting the energy use of a Raspberry Pi Zero 2, which only draws 1 Watt, will never be game-changing. The $2.85 USD saved annually won't come close to covering the cost of the solar panel and battery. In terms of efficiency, this setup isn't a win.\n\nBut the optimist in me sees it differently. When you compare my solar-powered setup to traditional website hosting, a more compelling case emerges. Using a low-power Raspberry Pi to host a basic website, rather than large servers in energy-hungry data centers, can greatly cut down on both expenses and environmental impact. Consider this: a Raspberry Pi Zero 2 W costs just $15 USD, and I can power it with main power for only $0.50 USD a month. In contrast, traditional hosting might cost around $20 USD a month. Viewed this way, my setup is both more sustainable and economical, showing some merit.\n\nLastly, it's also important to remember that solar power isn't just about saving money or cutting emissions. In remote areas without grid access or during disaster relief, solar can be the only way to keep communication systems running. In a crisis, a small solar setup could make the difference between isolation and staying connected to essential information and support.\n\nWhy do so many websites need to stay up?\n\nThe reason the energy savings from my solar-powered setup won't offset the equipment costs is that the system is intentionally oversized to keep the website running during extended low-light periods. Once the battery reaches full capacity, any excess energy goes to waste. That is unfortunate as that surplus could be used, and using it would help offset more of the hardware costs.\n\nThis inefficiency isn't unique to solar setups \u2013 it highlights a bigger issue in web hosting: over-provisioning. The web hosting world is full of mostly idle hardware. Web hosting providers often allocate more resources than necessary to ensure high uptime or failover, and this comes at an environmental cost.\n\nOne way to make web hosting more eco-friendly is by allowing non-essential websites to experience more downtime, reducing the need to power as much hardware. Of course, many websites are critical and need to stay up 24/7 \u2013 my own work with Acquia is dedicated to ensuring essential sites do just that. But for non-critical websites, allowing some downtime could go a long way in conserving energy.\n\nIt may seem unconventional, but I believe it's worth considering: many websites, mine included, aren't mission-critical. The world won't end if they occasionally go offline. That is why I like the idea of hosting my 10,000 photos on a solar-powered Raspberry Pi.\n\nAnd maybe that is the real takeaway from this experiment so far: to question why our websites and hosting solutions have become so resource-intensive and why we're so focused on keeping non-essential websites from going down. Do we really need 99.9% uptime for personal websites? I don't think so.\n\nPerhaps the best way to make the web more sustainable is to accept more downtime for those websites that aren't critical. By embracing occasional downtime and intentionally under-provisioning non-essential websites, we can make the web a greener, more efficient place.\n\n\n The solar panel and battery mounted on our roof deck.Next steps\n\nAs I continue this experiment, my biggest challenge is the battery's inability to charge in freezing temperatures. As explained, the battery's charge controller includes a safety feature that prevents charging when the temperature drops below freezing. While the Raspberry Pi Zero 2 W can run on my fully charged battery for about six days, this won't be sufficient for Boston winters, where temperatures often remain below freezing for longer.\n\nWith winter approaching, I need a solution to charge my battery in extreme cold. Several options to consider include:\n\nAdding a battery heating system that uses excess energy during peak sunlight hours.\n Applying insulation, though this alone may not suffice since the battery generates minimal heat.\nReplacing the battery with one that charges at temperatures as low as -20\u00b0C (-4\u00b0F), such as Lithium Titanate (LTO) or certain AGM lead-acid batteries. However, it's not as simple as swapping it out \u2013 my current battery has a built-in charge controller, so I'd likely need to add an external charge controller, which would require rewiring the solar panel and updating my monitoring code.\nEach solution has trade-offs in cost, safety, and complexity. I'll need to research the different options carefully to ensure safety and reliability.\n\nThe last quarter of the year is filled with travel and other commitments, so I may not have time to implement a fix before freezing temperatures hit. With some luck, the current setup might make it through winter. I'll keep monitoring performance and uptime \u2013 and, as mentioned, a bit of downtime is acceptable and even part of the fun! That said, the website may go offline for a few weeks and restart after the harshest part of winter. Meanwhile, I can focus on other aspects of the project.\n\nFor example, I plan to expand this single-page site into one with hundreds or even thousands of pages. Here are a few things I'd like to explore:\n\nTesting Drupal on a Raspberry Pi Zero 2 W: As the founder and project lead of Drupal, my main website runs on Drupal. I'm curious to see if Drupal can actually run on a Raspberry Pi Zero 2 W. The answer might be \"probably not\", but I'm eager to try.\n Upgrading to a Raspberry Pi 4 or 5: I'd like to experiment with upgrading to a Raspberry Pi 4 or 5, as I know it could run Drupal. As noted in Appendix 2, this might push the limits of my solar panel and battery. There are some optimization options to explore though, like disabling CPU cores, lowering the RAM clock speed, and dynamically adjusting features based on sunlight and battery levels.\n Creating a static version of my site: I'm interested in experimenting with a static version of https://dri.es. A static site doesn't require PHP or MySQL, which would likely reduce resource demands and make it easier to run on a Raspberry Pi Zero 2 W. However, dynamic features like my solar dashboard depend on PHP and MySQL, so I'd potentially need alternative solutions for those. Tools like Tome and QuantCDN offer ways to generate static versions of Drupal sites, but I've never tested these myself. Although I prefer keeping my site dynamic, creating a static version also aligns with my interests in digital preservation and archiving, offering me a chance to delve deeper into these concepts.\nEither way, it looks like I'll have some fun ahead. I can explore these ideas from my office while the Raspberry Pi Zero 2 W continues running on the roof deck. I'm open to suggestions and happy to share notes with others interested in similar projects. If you'd like to stay updated on my progress, you can sign up to receive new posts by email or subscribe via RSS. Feel free to email me at dries@buytaert.net. Your ideas, input, and curiosity are always welcome.\n\nAppendix\n\nAppendix 1: Sizing a solar panel and battery for a Raspberry Pi Zero 2 W\n\nTo keep the Raspberry Pi Zero 2 W running in various weather conditions, we need to estimate the ideal solar panel and battery size. We'll base this on factors like power consumption, available sunlight, and desired uptime.\n\nThe Raspberry Pi Zero 2 W is very energy-efficient, consuming only 0.4W at idle and up to 1.3W under load. For simplicity, we'll assume an average power consumption of 1W, which totals 24Wh per day (1W * 24 hours).\n\nWe also need to account for energy losses due to inefficiencies in the solar panel, charge controller, battery, and inverter. Assuming a total loss of 30%, our estimated daily energy requirement is 24Wh / 0.7 \u2248 34.3Wh.\n\nIn Boston, peak sunlight varies throughout the year, averaging 5-6 hours per day in summer (June-August) and only 2-3 hours per day in winter (December-February). Peak sunlight refers to the strongest, most direct sunlight hours. Basing the design on peak sunlight hours rather than total daylight hours provides a margin of safety.\n\nTo produce 34.3Wh in the winter, with only 2 hours of peak sunlight, the solar panel should generate about 17.15W (34.3Wh / 2 hours \u2248 17.15W). As mentioned, my current setup includes a 50W solar panel, which provides well above the estimated 17.15W requirement.\n\nNow, let's look at battery sizing. As explained, I have an 18Ah battery, which provides about 216Wh of capacity (18Ah * 12V = 216Wh). If there were no sunlight at all, this battery could power the Raspberry Pi Zero 2 W for roughly 6 days (216Wh / 34.3Wh per day \u2248 6.3 days), ensuring continuous operation even on snowy winter days.\n\nThese estimates suggest that I could halve both my 50W solar panel and 18Ah battery to a 25W panel and a 9Ah battery, and still meet the Raspberry Pi Zero 2 W's power needs during Boston winters. However, I chose the 50W panel and larger battery for flexibility, in case I need to upgrade to a more powerful board with higher energy requirements.\n\nAppendix 2: Sizing a solar panel and battery for a Raspberry Pi 4\n\nIf I need to switch to a Raspberry Pi 4 to handle increased website traffic, the power requirements will rise significantly. The Raspberry Pi 4 consumes around 3.4W at idle and up to 7.6W under load. For estimation purposes, I'll assume an average consumption of 4.5W, which totals 108Wh per day (4.5W * 24 hours = 108Wh).\n\nFactoring in a 30% loss due to system inefficiencies, the adjusted daily energy requirement increases to approximately 154.3Wh (108Wh / 0.7 \u2248 154.3Wh). To meet this demand during winter, with only 2 hours of peak sunlight, the solar panel would need to produce about 77.15W (154.3Wh / 2 hours \u2248 77.15W).\n\nWhile some margin of safety is built into my calculations, this likely means my current 50W solar panel and 216Wh battery are insufficient to power a Raspberry Pi 4 during a Boston winter.\n\nFor example, with an average power draw of 4.5W, the Raspberry Pi 4 requires 108Wh daily. In winter, if the solar panel generates only 70 to 105Wh per day, there would be a shortfall of 3 to 38Wh each day, which the battery would need to cover. And with no sunlight at all, a fully charged 216Wh battery would keep the system running for about 2 days (216Wh / 108Wh per day \u2248 2 days) before depleting.\n\nTo ensure reliable operation, a 100W solar panel, capable of generating enough power with just 2 hours of winter sunlight, paired with a 35Ah battery providing 420Wh, could be better. This setup, roughly double my current capacity, would offer sufficient backup to keep the Raspberry Pi 4 running for 3-4 days without sunlight.\n\nAppendix 3: Observations on the Lumiax charge controller\n\nAs I mentioned earlier, my battery has a built-in charge controller. The brand of the controller is Lumiax, and I can access its data programmatically. While the controller excels at managing charging, its metering capabilities feel less robust. Here are a few observations:\n\nI reviewed the charge controller's manual to clarify how it defines and measures different currents, but the information provided was insufficient.\n The charge controller allows monitoring of the \"solar current\" (register 12367). I expected this to measure the current flowing from the solar panel to the charge controller, but it actually measures the current flowing from the charge controller to the battery. In other words, it tracks the \"useful current\" \u2013 the current from the solar panel used to charge the battery or power the load. The problem with this is that when the battery is fully charged, the controller reduces the current from the solar panel to prevent overcharging, even though the panel could produce more. As a result, I can't accurately measure the maximum power output of the solar panel. For example, in full sunlight with a fully charged battery, the calculated power output could be as low as 2W, even though the solar panel is capable of producing 50W.\n The controller also reports the \"battery current\" (register 12359), which appears to represent the current flowing from the battery to the Raspberry Pi. I believe this to be the case because the \"battery current\" turns negative at night, indicating discharge.\n Additionally, the controller reports the \"load current\" (register 12362), which, in my case, consistently reads zero. This is odd because my Raspberry Pi Zero 2 typically draws between 0.1-0.3A. Even with a Raspberry Pi 4, drawing between 0.6-1.3A, the controller still reports 0A. This could be a bug or suggest that the charge controller lacks sufficient accuracy.\n \n When the battery discharges and the low voltage protection activates, it shuts down the Raspberry Pi as expected. However, if there isn't enough sunlight to recharge the battery within a certain timeframe, the Raspberry Pi does not automatically reboot. Instead, I must perform a manual 'factory reset' of the charge controller. This involves connecting my laptop to the controller \u2013 a cumbersome process that requires me to disconnect the Raspberry Pi, open its waterproof enclosure, detach the RS485 hat wires, connect them to a USB-to-RS485 adapter for my laptop, and run a custom Python script. Afterward, I have to reverse the entire process. This procedure can't be performed while traveling as it requires physical access.\n The charge controller has two temperature sensors: one for the environment and one for the controller itself. However, the controller's temperature readings often seem inaccurate. For example, while the environment temperature might correctly register at 24\u00b0C, the controller could display a reading as low as 14\u00b0C. This seems questionable though there might be an explanation that I'm overlooking.\n The battery's charge and discharge patterns are non-linear, meaning the charge level may drop rapidly at first, then stay steady for hours. For example, I've seen it drop from 100% to 65% within an hour but remain at 65% for over six hours. This is common for LFP batteries due to their voltage characteristics. Some advanced charge controllers use look-up tables, algorithms, or coulomb counting to more accurately predict the state of charge based on the battery type and usage patterns. The Lumiax doesn't support this, but I might be able to implement coulomb counting myself by tracking the current flow to improve charge level estimates.\nAppendix 4: When size matters (but it's best not to mention it)\n\nWhen buying a solar panel, sometimes it's easier to beg for forgiveness than to ask for permission.\n\nOne day, I casually mentioned to my wife, \"Oh, by the way, I bought something. It will arrive in a few days.\"\n\n\"What did you buy?\", she asked, eyebrow raised.\n\n\"A solar panel\", I said, trying to sound casual.\n\n\"A what?!\", she asked again, her voice rising.\n\nDon't worry!\", I reassured her. \"It's not that big\", I said, gesturing with my hands to show a panel about the size of a laptop.\n\nShe looked skeptical but didn't push further.\n\nFast forward to delivery day. As I unboxed it, her eyes widened in surprise. The panel was easily four or five times larger than what I'd shown her. Oops.\n\nThe takeaway? Sometimes a little underestimation goes a long way." }, "name": "My solar-powered and self-hosted website", "post-type": "article", "_id": "42576655", "_source": "238", "_is_read": false }
All my sites are now verified on here! I’ve also built a basic landing page for my #smallbusiness that just compiles all of my links to my website as well as the websites to my apps
It’s super basic for now, I just wanted to get something online, but these sites are all going to expand over time
#technology #indieweb #iosdev #webdev
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://allthingstech.social/@countablenewt/113318119603885225", "content": { "html": "<p>All my sites are now verified on here! I\u2019ve also built a basic landing page for my <a href=\"https://allthingstech.social/tags/smallbusiness\">#<span>smallbusiness</span></a> that just compiles all of my links to my website as well as the websites to my apps</p><p>It\u2019s super basic for now, I just wanted to get something online, but these sites are all going to expand over time<br /><a href=\"https://allthingstech.social/tags/technology\">#<span>technology</span></a> <a href=\"https://allthingstech.social/tags/indieweb\">#<span>indieweb</span></a> <a href=\"https://allthingstech.social/tags/iosdev\">#<span>iosdev</span></a> <a href=\"https://allthingstech.social/tags/webdev\">#<span>webdev</span></a></p>", "text": "All my sites are now verified on here! I\u2019ve also built a basic landing page for my #smallbusiness that just compiles all of my links to my website as well as the websites to my apps\n\nIt\u2019s super basic for now, I just wanted to get something online, but these sites are all going to expand over time\n#technology #indieweb #iosdev #webdev" }, "published": "2024-10-16T16:48:03+00:00", "photo": [ "https://files.mastodon.social/cache/media_attachments/files/113/318/119/718/697/839/original/c1526772a468f778.jpeg" ], "post-type": "photo", "_id": "42576213", "_source": "8007", "_is_read": false }
I think especially in the age of "AI", blogs are very important.
Yes, we have to protect our work from being swallowed by the machines and the algorithms, but we also have to keep the web human, share our thoughts, and connect with one another.
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://stefanbohacek.online/@stefan/113318063075596401", "content": { "html": "<p>I think especially in the age of \"AI\", blogs are very important.</p><p>Yes, we have to protect our work from being swallowed by the machines and the algorithms, but we also have to keep the web human, share our thoughts, and connect with one another.</p><p><a href=\"https://stefanbohacek.online/tags/indieweb\">#<span>indieweb</span></a></p>", "text": "I think especially in the age of \"AI\", blogs are very important.\n\nYes, we have to protect our work from being swallowed by the machines and the algorithms, but we also have to keep the web human, share our thoughts, and connect with one another.\n\n#indieweb" }, "published": "2024-10-16T16:33:41+00:00", "post-type": "note", "_id": "42576214", "_source": "8007", "_is_read": false }
Many great points in this @pluralistic thread on achieving meaningful change through joining a movement, but I wanted to highlight this note on "infrequently updated sites":
"I follow a bunch of people via RSS who only update a couple times per year."
https://mamot.fr/@pluralistic/113317953289922474
Not having "a lot" to say shouldn't stop you from sharing your thoughts and experiences in a blog. And you didn't "fail" if you only have one or two posts.
#indieweb #blogs #PersonalWebsites
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://stefanbohacek.online/@stefan/113318006107229232", "content": { "html": "<p>Many great points in this <span class=\"h-card\"><a class=\"u-url\" href=\"https://mamot.fr/@pluralistic\">@<span>pluralistic</span></a></span> thread on achieving meaningful change through joining a movement, but I wanted to highlight this note on \"infrequently updated sites\":</p><p>\"I follow a bunch of people via RSS who only update a couple times per year.\"</p><p><a href=\"https://mamot.fr/@pluralistic/113317953289922474\"><span>https://</span><span>mamot.fr/@pluralistic/11331795</span><span>3289922474</span></a></p><p>Not having \"a lot\" to say shouldn't stop you from sharing your thoughts and experiences in a blog. And you didn't \"fail\" if you only have one or two posts.</p><p><a href=\"https://stefanbohacek.online/tags/indieweb\">#<span>indieweb</span></a> <a href=\"https://stefanbohacek.online/tags/blogs\">#<span>blogs</span></a> <a href=\"https://stefanbohacek.online/tags/PersonalWebsites\">#<span>PersonalWebsites</span></a></p>\n<a class=\"u-mention\" href=\"https://mamot.fr/@pluralistic\"></a>", "text": "Many great points in this @pluralistic thread on achieving meaningful change through joining a movement, but I wanted to highlight this note on \"infrequently updated sites\":\n\n\"I follow a bunch of people via RSS who only update a couple times per year.\"\n\nhttps://mamot.fr/@pluralistic/113317953289922474\n\nNot having \"a lot\" to say shouldn't stop you from sharing your thoughts and experiences in a blog. And you didn't \"fail\" if you only have one or two posts.\n\n#indieweb #blogs #PersonalWebsites" }, "published": "2024-10-16T16:19:12+00:00", "post-type": "note", "_id": "42576215", "_source": "8007", "_is_read": false }
🧰 My Self-Care Toolbox | And So It Goes… https://krueger.ink/my-self-care-toolbox/
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://social.lol/@philomath/113317662285130664", "content": { "html": "<p>\ud83e\uddf0 My Self-Care Toolbox | And So It Goes\u2026 <a href=\"https://krueger.ink/my-self-care-toolbox/\"><span>https://</span><span>krueger.ink/my-self-care-toolb</span><span>ox/</span></a></p><p><a href=\"https://social.lol/tags/Blog\">#<span>Blog</span></a> <a href=\"https://social.lol/tags/SelfCare\">#<span>SelfCare</span></a> <a href=\"https://social.lol/tags/IndieWeb\">#<span>IndieWeb</span></a></p>", "text": "\ud83e\uddf0 My Self-Care Toolbox | And So It Goes\u2026 https://krueger.ink/my-self-care-toolbox/\n\n#Blog #SelfCare #IndieWeb" }, "published": "2024-10-16T14:51:45+00:00", "post-type": "note", "_id": "42574847", "_source": "8007", "_is_read": false }
Trying to code and Luna has other ideas
#dogsofmaston #indieweb
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://allthingstech.social/@countablenewt/113314393993427240", "content": { "html": "<p>Trying to code and Luna has other ideas<br /><a href=\"https://allthingstech.social/tags/dogsofmaston\">#<span>dogsofmaston</span></a> <a href=\"https://allthingstech.social/tags/indieweb\">#<span>indieweb</span></a></p>", "text": "Trying to code and Luna has other ideas\n#dogsofmaston #indieweb" }, "published": "2024-10-16T01:00:35+00:00", "photo": [ "https://files.mastodon.social/cache/media_attachments/files/113/314/394/023/604/311/original/4dc62f4e2723fe34.jpeg" ], "post-type": "photo", "_id": "42568845", "_source": "8007", "_is_read": false }
#til about https://aboutideasnow.com/ , a kind of search engine for finding people to collaborate with using submitted #IndieWeb / #SmolWeb sites' /about, /ideas, and /now pages. Its really, really, sleek and cool even if it does need JavaScript to run.
#NowPage #AboutPage #IdeasPage
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://mastodo.neoliber.al/@Neblib/113313785313555365", "content": { "html": "<p><a href=\"https://mastodo.neoliber.al/tags/til\">#<span>til</span></a> about <a href=\"https://aboutideasnow.com/\"><span>https://</span><span>aboutideasnow.com/</span><span></span></a> , a kind of search engine for finding people to collaborate with using submitted <a href=\"https://mastodo.neoliber.al/tags/IndieWeb\">#<span>IndieWeb</span></a> / <a href=\"https://mastodo.neoliber.al/tags/SmolWeb\">#<span>SmolWeb</span></a> sites' /about, /ideas, and /now pages. Its really, really, sleek and cool even if it does need JavaScript to run.<br /><a href=\"https://mastodo.neoliber.al/tags/NowPage\">#<span>NowPage</span></a> <a href=\"https://mastodo.neoliber.al/tags/AboutPage\">#<span>AboutPage</span></a> <a href=\"https://mastodo.neoliber.al/tags/IdeasPage\">#<span>IdeasPage</span></a></p>", "text": "#til about https://aboutideasnow.com/ , a kind of search engine for finding people to collaborate with using submitted #IndieWeb / #SmolWeb sites' /about, /ideas, and /now pages. Its really, really, sleek and cool even if it does need JavaScript to run.\n#NowPage #AboutPage #IdeasPage" }, "published": "2024-10-15T22:25:47+00:00", "post-type": "note", "_id": "42567931", "_source": "8007", "_is_read": false }
Hi 🐾 I'm Juniper, arctic fox and amateur web developer. I can't draw but I love furry art I appreciate the Internet and believe that, together, we can make it a more fun and helpful place.
{ "type": "entry", "author": { "name": "#indieweb", "url": "https://mastodon.social/tags/indieweb", "photo": null }, "url": "https://woof.tech/@JuniperFox/113312723294985029", "content": { "html": "<p>Hi \ud83d\udc3e I'm Juniper, arctic fox and amateur web developer. I can't draw but I love furry art <img alt=\":blobfoxaww:\" height=\"16\" src=\"https://files.mastodon.social/cache/custom_emojis/images/000/585/099/original/26ba04d55f37292c.png\" title=\":blobfoxaww:\" width=\"16\" /> I appreciate the Internet and believe that, together, we can make it a more fun and helpful place.</p><p><a href=\"https://woof.tech/tags/Introduction\">#<span>Introduction</span></a> <a href=\"https://woof.tech/tags/Furry\">#<span>Furry</span></a> <a href=\"https://woof.tech/tags/IndieWeb\">#<span>IndieWeb</span></a> <a href=\"https://woof.tech/tags/WebDev\">#<span>WebDev</span></a></p>", "text": "Hi \ud83d\udc3e I'm Juniper, arctic fox and amateur web developer. I can't draw but I love furry art I appreciate the Internet and believe that, together, we can make it a more fun and helpful place.\n\n#Introduction #Furry #IndieWeb #WebDev" }, "published": "2024-10-15T17:55:42+00:00", "post-type": "note", "_id": "42565491", "_source": "8007", "_is_read": false }