<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>bckt · blog.vrypan.net</title>
    <link>https://blog.vrypan.net/tags/bckt/</link>
    <description>bckt · blog.vrypan.net</description>
    <lastBuildDate>Thu, 23 Oct 2025 07:33:35 +0200</lastBuildDate>
    <generator>bckt</generator>
    <atom:link href="https://blog.vrypan.net/rss-bckt.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title>My blog posting workflow</title>
      <link>https://blog.vrypan.net/2025/10/23/251023-my-bckt-workflow/</link>
      <guid isPermaLink="true">https://blog.vrypan.net/2025/10/23/251023-my-bckt-workflow/</guid>
      <pubDate>Thu, 23 Oct 2025 07:33:35 +0200</pubDate>
      <description>Here's my blog posting workflow, using  bckt, Obsidian, and Netlify.</description>
      <content:encoded><![CDATA[
	
        <img  src="https://blog.vrypan.net/2025/10/23/251023-my-bckt-workflow/my-workflow.png">
        
	<p>Here's my blog posting workflow, using  <strong>bckt</strong><sup class="footnote-ref"><a href="#fn-1" id="fnref-1" data-footnote-ref>1</a></sup>, <strong>Obsidian</strong><sup class="footnote-ref"><a href="#fn-2" id="fnref-2" data-footnote-ref>2</a></sup>, and <strong>Netlify</strong><sup class="footnote-ref"><a href="#fn-3" id="fnref-3" data-footnote-ref>3</a></sup>.</p>
<h2>The setup</h2>
<p>All my posts live in a folder called <code>posts/</code>, which I’ve added as an <strong>Obsidian vault</strong>. That gives me a nice writing environment with all of Obsidian’s goodies.</p>
<p>Inside the vault, I keep a <code>posts/_obsidian/bckt-template.md</code> file that looks like this:</p>
<pre lang="yaml"><code>---
title: &quot;{{title}}&quot;
date: {{date:YYYY-MM-DD hh:mm:ss}}
abstract: &gt;
 Use this to add a post abstract
tags: []
attached: []
image:
---
</code></pre>
<p>This is my frontmatter template for new posts.</p>
<div class="markdown-alert markdown-alert-note">
<p class="markdown-alert-title">Note</p>
<p>An empty <code>posts/_obsidian/.backtignore</code> instructs bckt to skip this folder when rendering the site.</p>
</div>
<h2>Writing a post</h2>
<p>When I want to write something new, I create a folder like this:</p>
<pre><code>posts/2025/10/251023-my-bckt-workflow/
</code></pre>
<p>Then I drop a markdown file inside — for example <code>post.md</code>. (The name doesn’t matter; bckt will pick any <code>&lt;filename&gt;.md</code>.)</p>
<p>I use Obsidian’s <strong>Templates: Insert template</strong> action to insert my frontmatter, then I fill in the title, date, and abstract, and start writing.</p>
<p>I also add any related files (for example, images) in the same folder, and include them in the <code>attached</code> frontmatter field. I can then reference them relatively (ex: <code>![image](image.png)</code>), and bckt will take care or the rest.</p>
<h2>Turning Farcaster casts into posts</h2>
<p>Sometimes I post something short on <strong>Farcaster</strong><sup class="footnote-ref"><a href="#fn-4" id="fnref-4" data-footnote-ref>4</a></sup> that I later want to turn into a proper blog post. That’s where <strong>bckt-fc</strong> comes in. I just run a command like:</p>
<pre><code>bckt-fc --castid vrypan/0xe9e10a9ae08803d21e4c80ce6da730dd3ff3d6a5 \
--destination posts/2025
</code></pre>
<p>This fetches the cast (and any images or videos in it) and automatically creates a new post in my <code>posts/2025</code> folder. It’s a quick way to turn spontaneous thoughts into something more permanent.</p>
<h2>Publishing the site</h2>
<p>Once I’m done writing, I render the site with:</p>
<pre><code>bckt render
</code></pre>
<p>If I want to preview locally, I use:</p>
<pre><code>bckt dev
</code></pre>
<p>Finally, to push everything live, I deploy to Netlify:</p>
<pre><code>netlify deploy --dir=html --prod
</code></pre>
<p>And that’s it — a full publishing loop that starts in Obsidian and ends with a live post on my blog, all backed by git and simple CLI tools.</p>
<hr />
<section class="footnotes" data-footnotes>
<ol>
<li id="fn-1">
<p><a href="https://github.com/vrypan/bckt">bckt</a> <a href="#fnref-1" class="footnote-backref" data-footnote-backref data-footnote-backref-idx="1" aria-label="Back to reference 1">↩</a></p>
</li>
<li id="fn-2">
<p><a href="https://obsidian.md/">Obsidian</a> <a href="#fnref-2" class="footnote-backref" data-footnote-backref data-footnote-backref-idx="2" aria-label="Back to reference 2">↩</a></p>
</li>
<li id="fn-3">
<p><a href="https://www.netlify.com/">Netlify</a> <a href="#fnref-3" class="footnote-backref" data-footnote-backref data-footnote-backref-idx="3" aria-label="Back to reference 3">↩</a></p>
</li>
<li id="fn-4">
<p><a href="https://farcaster.xyz">Farcaster</a> <a href="#fnref-4" class="footnote-backref" data-footnote-backref data-footnote-backref-idx="4" aria-label="Back to reference 4">↩</a></p>
</li>
</ol>
</section>

]]></content:encoded>

   <enclosure url="https://blog.vrypan.net/2025/10/23/251023-my-bckt-workflow/my-workflow.png"
   type="image/png"
   length="296632"/>

    </item>
    
    <item>
      <title>Blog Pagination: The Notebook Way</title>
      <link>https://blog.vrypan.net/2025/10/13/blog-pagination-notebook-way/</link>
      <guid isPermaLink="true">https://blog.vrypan.net/2025/10/13/blog-pagination-notebook-way/</guid>
      <pubDate>Mon, 13 Oct 2025 22:24:00 +0300</pubDate>
      <description>What if we treated a blog like a notebook, where page 1 stays page 1, and new posts add pages at the end?</description>
      <content:encoded><![CDATA[
	
        <img  src="https://blog.vrypan.net/2025/10/13/blog-pagination-notebook-way/notebook.png">
        
	<p>When we refer to a blog's &quot;first page&quot;, we usually mean the first page visitors see—the homepage with
the latest posts. But what if we treated a blog like what it actually is: a notebook or diary?</p>
<p>In a physical notebook, page 1 contains your first entry. As you write more, you fill pages 2, 3, 4,
and so on. When someone wants to read it, they naturally start from page 1 or jump to the last page
for recent entries.</p>
<p>Traditional blog pagination works backwards because it was simpler for developers to write <code>SELECT * FROM posts ORDER BY dt DESC LIMIT 10</code>. But it creates a fundamental problem: <strong>page contents change
with every new post</strong>.</p>
<p>You can't say &quot;this post is on page 10&quot; because page 10 contains different posts after each publish.
This isn't just conceptually messy—it has real technical costs. Links to <code>/page/10</code> become
meaningless. Static site generators must rebuild and upload N index pages per post. Git histories
bloat with N changed files.</p>
<hr />
<h2>The Solution</h2>
<p>Treat your blog like a notebook with fixed pages:</p>
<ul>
<li>Page 1: posts 1-20</li>
<li>Page 2: posts 21-40</li>
<li>Page 3: posts 41-60</li>
</ul>
<p>Your homepage becomes the <strong>last</strong> page—the one you're currently writing.</p>
<p>To avoid a sparse final page, keep a buffer of 20-39 posts on the homepage. When you publish post
101, articles 81-100 stay on the homepage. Once you hit post 120, page 5 (posts 81-100) gets
finalized, and the cycle repeats.</p>
<p>This blog works this way. Visit <code>blog.vrypan.net</code>, and you land on page 138, because I've
been posting for years, and this is the page I'm currently writing on.</p>
<hr />
<p>Note: This is how pagination works on <a href="https://github.com/vrypan/bckt">bckt</a> since v0.5.2. Of course, if
you think this way of thinking will confuse your users, you don't have to expose it to them, and tell
them they are on page 100. You can show links to previous and next pages, just like they are used to.
But whne you post a new article, you wont have to re-upload or git commit 100 new index pages ;-)</p>

]]></content:encoded>

   <enclosure url="https://blog.vrypan.net/2025/10/13/blog-pagination-notebook-way/notebook.png"
   type="image/png"
   length="1455336"/>

    </item>
    
    <item>
      <title>My blog, from diary to content repo</title>
      <link>https://blog.vrypan.net/2025/10/07/my-blog-from-diary-to-content-repo/</link>
      <guid isPermaLink="true">https://blog.vrypan.net/2025/10/07/my-blog-from-diary-to-content-repo/</guid>
      <pubDate>Tue, 07 Oct 2025 14:33:19 +0300</pubDate>
      <description>I've been blogging for almost 30 years—from back when we called them "weblogs" or just "online journals," before "blogging" was even a term. This blog started in 2003 as a diary for my friends. Back then, the audience was tiny. Few people were online. Among them, few spoke Greek,...</description>
      <content:encoded><![CDATA[
	
        <img  src="https://blog.vrypan.net/2025/10/07/my-blog-from-diary-to-content-repo/image.png">
        
	<p>I've been blogging for almost 30 years—from back when we called them &quot;weblogs&quot; or just &quot;online
journals,&quot; before &quot;blogging&quot; was even a term. This blog started in 2003 as a diary for my friends.
Back then, the audience was tiny. Few people were online. Among them, few spoke Greek, and from
them, even fewer knew what a &quot;blog&quot; was.</p>
<p>Then we discovered RSS Syndication—an early content distribution system that let readers subscribe
to updates. We didn't use the word &quot;distribution&quot; back then, but that's exactly what it was.</p>
<p>Then social networks arrived and changed everything. They were easy to use and had built-in sharing
features that made RSS feel complicated by comparison. Even with all this change, I kept my blog
updated, even if not as often. I'm glad I did. Going back to posts from 20 years ago is a real
treasure, and I can also point people to my old writings when needed.</p>
<p>Over the years, my blog evolved from a personal diary into my content repository. When I
experimented with platforms like Medium and later Paragraph, I always copied the articles back to my
blog—keeping everything in one place.</p>
<p>These days, Farcaster is where I publish most regularly. It's so much easier to post a quick thought
there—whether it's short-form text, photos, or videos—than to create a full blog post.</p>
<p>That's where <a href="https://github.com/vrypan/bckt">bckt</a> comes in. It includes <code>bckt-fc</code>, a tool that
makes it trivial to fetch a cast and convert it into a blog post. It will even fetch attached images
and videos and store them locally inside the posts folder (in bckt, a post is a folder containing
markdown and other assets). It also has special templates to render these posts (for example, with
no title).</p>
<p>It's easy to build these small tools for bckt, and I'll probably build more. For example, I'd like
to build one that takes a photo as input, reads its EXIF data, and creates a post with the date and
location—or maybe a gallery if multiple photos are provided. Or use an MP3 file and its embedded
ID3 tags to do something similar for podcasters. (If you've built one of these, let me know!)</p>

]]></content:encoded>

   <enclosure url="https://blog.vrypan.net/2025/10/07/my-blog-from-diary-to-content-repo/image.png"
   type="image/png"
   length="1693036"/>

    </item>
    
    <item>
      
      <link>https://blog.vrypan.net/2025/10/05/fc-2025-10-05-0xf7adac4e/</link>
      <guid isPermaLink="true">https://blog.vrypan.net/2025/10/05/fc-2025-10-05-0xf7adac4e/</guid>
      <pubDate>Sun, 05 Oct 2025 21:50:18 +0000</pubDate>
      <description>Static site generators are simple, but if you've used them long enough you know there are a thousand details that can make your life easier or harder.</description>
      <content:encoded><![CDATA[
	
	<p>Static site generators are simple, but if you've used them long enough you know there are a thousand details that can make your life easier or harder.</p>
<p>I finally built the SSG I always wanted.</p>
<p><a href="https://github.com/vrypan/bckt/">https://github.com/vrypan/bckt/</a></p>

]]></content:encoded>

    </item>
    
  </channel>
</rss>
