Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

./blog.sh

@blogsh.mastodon.social.ap.brid.gy
4 followers 0 following 83 posts

A minimalist, file-based web/log engine. Posts are plain JSON files, the site is a static build, and authoring happens through a CLI/wizard -- no database, no admin […] 🌉 bridged from ⁂ mastodon.social/@blogsh, follow @ap.brid.gy to interact

PostsRepliesMedia
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 22h
The door for programs Up to 1.9 the engine had one door for programs, and it was narrow. The phone delivered a post through it: a shortcut sent a file over SSH, receive.sh took it on the other side and answered with one object. Two commands kept that promise — add… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 16/10/2026
An icon instead of a terminal Every guide to this engine starts with the same sentence: open Terminal, go to your site's folder and type ./blog.sh. For somebody who lives in a terminal, that is one sentence. For somebody who does not, it is three things to get wrong before the… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 15/10/2026
The archive talks back A letter arrived at the end of September. Pavel had used this engine to back up his old blog, and wrote down what he learned doing it: over a thousand posts in nine years, and stretches when he wrote every day. He had not known. The blog had been… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 15/10/2026
./blog.sh 1.10 ./blog.sh 1.10 is out — release on GitHub. The release that opens a door for programs. Every screen you read before you act, and every action it offers you, can now answer as data too. A program on another machine reaches them over the SSH the… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 12/10/2026
Where this engine grew up Every feature on this site has a page that says what it does. Fewer say why it is there, and almost none say what the week before it existed was like. That part was written somewhere else: on sean.cz, the archive this engine was taken out of and… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 06/10/2026
Building an Archive stevendbrewer.com blogsh.app/posts/2026/steven-d-brew… #archive #migration
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 06/10/2026
The page a stranger opens first Saturday, LinuxDays in Prague, a stand run by friends from OSCloud — Mastodon, Pixelfed, PeerTube, Matrix, the services for people who want their data where they can see it. A full day behind one table, and not a single talk seen. This engine was… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 05/10/2026
How big it can get It is a fair thing to ask before you hand twenty years of writing to a tool: at what point does it stop being pleasant to use? Measured here in August, on an archive of 6,639 posts, the honest answer was a shrug: adding one post cost the whole… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 02/10/2026
./blog.sh: blogovací engine, kterému stačí terminál root.cz blogsh.app/posts/2026/blog-sh-on-ro… #philosophy
blogsh.app
./blog.sh: blogovací engine, kterému stačí terminál
root.cz ./blog.sh on Root.cz, the Czech Linux site, in Czech and in my own words: why the text and the pictures belong on your own disk, what a build is and whe…
002 2
Reposted by ./blog.sh
Pavel Janíček @paveljanicek.mamutovo.cz.ap.brid.gy · 30/09/2026
Obsluhoval jsem blogsh-ového krále Milý Danieli, vůbec by mne nenapadlo, že tvé oznámení o tom, že existuje nějaká blogovací platforma jménem ./blogsh ve mně vzbudí takový oheň o to, o co se na téhle doméně tak dlouho snažím: Zase pravidelně psát. Když jsem díky tvé platformě… […]
mamutovo.cz
Original post on mamutovo.cz
102 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 30/09/2026
Everything else in 1.9 Five posts have covered what 1.9 is about: a post in two languages, the site in the language of the page, what stands in a deploy target before the first deploy, a host that only speaks FTP and one phone shortcut instead of two. This one is the… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 30/09/2026
One shortcut instead of two Sending a post from an iPhone took two shortcuts until 1.9: one to take the files from the share sheet, one to open the SSH connection. Written on a train walked through both. It is one shortcut now, imported rather than built, and it runs on a Mac… […]
mastodon.social
Original post on mastodon.social
012 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 29/09/2026
A host that only speaks FTP A shared hosting plan often comes with a directory, an FTP login and nothing else — no SSH, no rsync, no git. That has been enough for blog.sh all along; the docs just never said so until 1.9. The way there is the rclone backend, because rclone… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 29/09/2026
Before the first deploy Somebody moves a blog off WordPress onto blog.sh and keeps the same hosting, the same directory, the same address. The build is ready, the first deploy goes through without an error — and the front page is still the old one. Nothing went wrong in… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 28/09/2026
The site speaks the language of the page Somebody translates their posts, opens the Czech half of the site — and the menu still says Writing, the footer still says Links, and every tag on every pill is the English word. The posts were only ever half of what a reader reads. The rest is… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 28/09/2026
Two languages, one site Somebody writes in Czech, and some of the people who would read it don't read Czech. The usual answer is a second blog — a second archive, a second set of tags, a second feed — and within a year the two have drifted apart: a post fixed in one and… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 28/09/2026
./blog.sh 1.9 ./blog.sh 1.9 is out — release on GitHub. The release about publishing in more than one language. Name them in site.locales, and a post keeps one date, one set of tags and one series, with a text per language written by ./blog.sh translate. The… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 27/09/2026
The parts that don't rebuild themselves A laptop dies, or a server gets rebuilt from nothing, and the question that actually matters is narrower than it sounds. Not "how do I back this up" — "which of these files does the engine actually need me to protect, because nothing else here can… […]
mastodon.social
Original post on mastodon.social
012 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 26/09/2026
The lock that doesn't wait Twice an hour, on a large enough site, two cron jobs reach for the same folder at almost the same moment: the scheduled publish, building and deploying whatever post came due, and the sidebar refresh, rewriting a few of the same output files with… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 23/09/2026
What's left to get wrong There's no /admin on this site. No login form to try a password against, no session cookie to steal, no plugin list to check against last month's CVEs — not because a checklist said to strip them out, but because none of them were ever built in the… […]
mastodon.social
Original post on mastodon.social
013 3
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 19/09/2026
How did I set up blog.sh on my shared hosting pavelchcepsat.cz blogsh.app/posts/2026/pavel-moved-a… #migration #deploy
blogsh.app
How did I set up blog.sh on my shared hosting
pavelchcepsat.cz Pavel moved a WordPress blog off a shared host and onto blog.sh, over plain FTP. The write-up goes step by step: the WXR export, the import, rc…
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 19/09/2026
Whoever loads last wins Two real sites wear a look this engine never shipped. sh.cynicky.blog is dressed as Ghost — a full-width lead card, a dotted frame, tiles instead of a plain list. arch-linux.cz is dressed as a Hugo theme, Blowfish specifically — a compact bar, a… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 14/09/2026
./blog.sh 1.8 ./blog.sh 1.8 is out — release on GitHub. A release about what happens when something goes wrong. Every page, feed and index is now written to a temporary file and renamed into place, so a save interrupted by a full volume or a build stopped… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 12/09/2026
The build doesn't know where it's going Somebody builds a whole site on a laptop, imports a decade of old posts into it, previews every page — and none of it has gone anywhere yet. Nothing in env.sh says where, and nothing else is waiting on that: the build runs, the archive checks out,… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 08/09/2026
One line of colour A reader changed one border colour in site.css, ran a rebuild, and waited while the build produced, byte for byte, every page that was already there. He asked why. The answer was one word in one list, and 1.7 takes it out. What a build writes down… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 08/09/2026
The last thing a recorder writes Someone opens a post with a video in it and presses play. The connection is fine. The video is not large. Nothing happens for a while, and then the video starts all at once, as if it had been waiting for permission. It had been waiting for the… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 07/09/2026
A bicycle nobody had to draw The example configuration this engine ships carries a bicycle: a tag called kolo, and under it an <svg> written out by hand. It is there because there was nothing else to put there. tag_icons took the name of an icon the engine ships or a drawing… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 07/09/2026
The address a post is about Somebody sends you an article. You read it, and you have two hundred words to say about it -- not a review, the thing you noticed and one sentence about why. The post is mostly the other page, and the address it is about has to live somewhere.… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 06/09/2026
What a post is, not what it says Five parts of a series written over a spring, and the third went out without its series: line. The site did what it was told. Part three sat at its date and nowhere else: off the series listing, out of the links from one part to the next, and out… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 06/09/2026
The post that waited for a terminal The post is written on the tram: a title, four paragraphs, two photographs with their descriptions. The switch above Send says Draft, which is what it says unless it is moved. Send, and the answer card comes back with the preview address. Then it… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 05/09/2026
./blog.sh 1.7 ./blog.sh 1.7 is out. The page that writes a post on a phone now publishes it too, and it finds out what happened rather than being told: it mints a receipt before sending and asks the site for it every three seconds until the answer comes. Beside… […]
mastodon.social
Original post on mastodon.social
000 0
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 05/09/2026
Everything else in 1.6 Five posts have covered the things 1.6 is about. This one is the rest, in the order an operator meets them. A way out of the trash and the versions Both stores had a way back — restore, and the version picker in the post's properties — and no way… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 05/09/2026
A badge that says what a post is about Every post wears a date badge with an icon in it, and the icon says what kind of post it is: text, a picture, a video, a quote. On a blog where nearly everything is text, that icon is the same on nearly every card. Somebody running this engine put… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 04/09/2026
Where a reader carries a post A post gets read, and then it goes somewhere: into a toot, a message, an email to one person. Until now the reader did that by copying the address out of the bar. 1.6 puts a row of controls under the post for it — off unless share: names what you… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 04/09/2026
Written on a train A reader who was thinking about moving to this engine wrote to say he would stay where he was. He manages his blog from a phone, on the road, and a blog that can only be worked from a terminal was no use to him however fast it built. He was right.… […]
mastodon.social
Original post on mastodon.social
013 3
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 03/09/2026
A post handed over as a file Until 1.6 a post came from a person at a terminal. The wizard asked its questions, opened an editor, asked what to do at the end. Nothing else could write one: not a script, not a cron job, not a phone. does the same work with the markdown handed… […]
mastodon.social
Original post on mastodon.social
101 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 03/09/2026
The time between deciding and the site saying so Publishing a post used to cost the size of the archive, not the size of the change. A post dated today alters a dozen files. The build rendered every page in the archive and read every one back off disk to find that out. On the archive this […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 03/09/2026
./blog.sh 1.6 ./blog.sh 1.6 is out. The build stopped rebuilding what nobody changed: a rebuild that changes nothing costs a seventh of what it did, an ordinary publish about two fifths. A post can be handed over as a file — by a script, a cron job, or the new… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 02/09/2026
Everything else in 1.5 Five posts covered the shape of this release. Here is the rest of it, a paragraph each. blogsh.app/posts/2026/everything-el… #content #build
blogsh.app
Everything else in 1.5
Five posts covered the shape of this release. Here is the rest of it, a paragraph each.
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 01/09/2026
An archive you cannot see is not empty This site's approved comments and its post counters are two small JSON files, refreshed by a cron job every half hour and uploaded with the rest of the site. Through 1.4, a tick that ran while the archive was not there would narrow both files to… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 01/09/2026
Posts nobody meant to publish An importer's worst failure is not losing a post. It is publishing one. 1.5 went through all eleven import adapters and the machinery underneath them looking for exactly that, and found it three times over, in three different files, made the same… […]
mastodon.social
Original post on mastodon.social
003 3
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 31/08/2026
Cut before it is written A listing card used to be the whole post. The engine rendered every block of it into the page, and the stylesheet clipped the result at 500 pixels. On the real front page that meant fourteen cards carrying between 794 and 2,616 pixels of content… […]
mastodon.social
Original post on mastodon.social
001 1
Reposted by ./blog.sh
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 31/08/2026
Two pages the site built out of itself Until now this engine could show you ten posts at a time and nothing else. /page/128/ is a real address on a large archive, and it tells you nothing about whether you have landed in 2009 or in 2014 — pagination is anchored from the oldest post, so… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 31/08/2026
Two pages the site built out of itself Until now this engine could show you ten posts at a time and nothing else. /page/128/ is a real address on a large archive, and it tells you nothing about whether you have landed in 2009 or in 2014 — pagination is anchored from the oldest post, so… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 30/08/2026
A slug is an address, not a name For most of this project's life, a post without a title had two names. Its own page called it by its date. Everything else — the browser tab, the link card somebody shares, every item in the feed — called it burtiky-opekame-hipstamatic-oggl-jane.… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 30/08/2026
./blog.sh 1.5 1.5 is the release where the site learned to say what it holds. The release is on GitHub. A post that never had a title used to be called by its address — on this project's own reference archive that was 62 % of it. Now it is called by its own… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 28/08/2026
Tested like an enemy 1.4 went through four adversarial audit rounds before the tag: fleets of independent reviewers over real archives — real exports, a real 4400-post site, real deploy targets — each told to break the engine rather than confirm it. The findings… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 28/08/2026
What a crash may cost The queue can now swap two scheduled posts that share a slug across two years — with their media and their edit history riding along, because those are keyed by year and slug exactly like the post file. That sentence is short; making it true was… […]
mastodon.social
Original post on mastodon.social
002 2
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 27/08/2026
The other half of check ./blog.sh check reads the whole archive and says what is wrong: media a post asks for and hasn't got, links to addresses nothing answers at, two posts that would be served at one address. Through 1.3 that was where it ended — a list of findings and… […]
mastodon.social
Original post on mastodon.social
001 1
./blog.sh @blogsh.mastodon.social.ap.brid.gy · 27/08/2026
Deploy in your own language The wizards were translated from the start; the narration around them was not. A Czech site watched its own deploy go by in English, one line above a Czech sentence — build warnings, announcement failures, import errors, the queue's repair… […]
mastodon.social
Original post on mastodon.social
001 1