theological genesis
I’m a little torn on what to work on next. Been neglecting other business stuff. But I also remind myself there will never be a moment where I finally feel everything is handled.
Anyway… where did we leave off? We have this templating library, and now the difficulty is making sure it can be composable.
Few hours later
Done a lot of soulsearching when it comes to the developer experience here. There’s always a balance between magic and explicit. Too much magic and you have no clue what’s going on. Too explicit and you have to type way too much.
For a good hour I was trying to figure out a way to “automagically” make a module out of a file. So you wouldn’t have to type it yourself.
While it is possible, I figured so much machinery to implement it would be too much.
So what we’re going to do is just define the module and return, which seems to be idiomatic in Lua land:
local M = {}
M.item = [[
<li><%= @item %></li>
]]
M.template = [[
<h1><%= @title %></h1>
<ul>
<% for _, item in ipairs(@items) do %>
<.item item={item} />
<% end %>
</ul>
]]
M.render = function()
return Template.render(M.template, {
title = "Groceries",
items = { "Apples", "Bananas", "Carrots" }
})
end
return M
The next step is adding functional…
Few more days later
It’s interesting. I only seem to work on this in weekly intervals.
Another week
Okay, so I think what I’m going to do is just start hosting this and go from there. I need to actually feel the annoyance and pain of using this before I continue to work on it. Fell into the trap of developing something and getting lost in the weeds without just deploying it and see how it feels.
The question to ask is whether I should buy the domain I thought to host this under, or just use a temp domain as I figure out what needs to happen next.
Probably the temp domain first…
Anyway, one thing I want to do is enable lua syntax highlighting. The only available solution is a “legacy” package, but it’s fine for now.
import { StreamLanguage } from "@codemirror/language"
import { lua } from "@codemirror/legacy-modes/mode/lua"
// ...
if (buffer.path.endsWith("lua")) extensions.push(StreamLanguage.define(lua))
Cool, that’s working. Let’s see… I wanted to migrate the templating solution to Elixir so I can handle error reporting and stuff easier. But I’m going to save that for later.
I should probably fix up the actual base case of HTML/CSS/JS sites. Would be cool to add auto-formatting later, too.
Hour of research
Was trying to figure out where we left off with the templating, and whether there’s a better design.
What actually needs to be done before deploying, I think, would be
- file/directory handling
- …
Day later
I got caught up again in the memory footprint of channel processes. We’ll eventually need to have one channel listen to multiple shared documents…
But today is not that day.
In terms of actually deploying this, as listed above, we need to improve the file creation/deletion aspect.
That means supporting right click at least. And proper directory handling!
After that, we need to create the B2 file adapter, cache strategy… the Lua runtime stuff is interesting, but I’d rather get the fundamentals working first, so putting that on hold. The Lua runtime stuff needs a dedicated HTML parser/handler to properly report errors. Needs a “terminal” area too, or at least a logger area. In due time. Alas, the time that’s due is not due today.
Onward!
Or maybe not.
I’ll just do the b2 and caching strategy because I am a degenerate and do not feel like making it look good at the moment. The trick is to make it so only I can login so I don’t have to explain how horrible the UI is.
Few days later
I’ve lost some steam on this again.
I think it’s because I struggle with the whole social media aspect of it.
It’s difficult to build something you’re extremely cynical about.
The main positive I could argue for it would be a short story:
Imagine a child lost playing in the basement. The lights go out. He needs to locate the stairs, but there’s only so many steps his takes before seized by fear.
Cowering and holding his legs he patiently waits for something to appear. Seconds turn into minutes, and minutes feel like hours. Only the hum of the A/C percolates the room. Only he can get himself out of this.
Suddenly a spirit appears before him, or at least the child later suggests it as such. In this moment it is as real as anything else, a being of no taller stature, part replica, a peculiar glow, and a glow he desperately cherishes after knowing only dark for so long.
He steps forward, seemingly to follow the spirit, focuses wholly onto the spirit, and with enough following he eventually feels the familiar stair handle. Rapidly the child ascends, but then wants to say thank you.
He turns around to find nothing there. Nothing but darkness.
Was there ever something there? It was the child who took the steps after all. A figment of his mind.
But in the same manner I do think expressing oneself online serves the same function, to some extent. Though it may all be fake and easily faded, so one can at least see the glow for a bit and ascend.
Otherwise he may have waited all night stuck there and trembling, trembling in his belief he is not capable, he has nothing to say, he can only wait and wait with his inability to do anything at all. And yet his legs moved one after another when he had his spirit in front of him.
A website is animated and seemingly alive as anything else, but I think websites are more like vehicles, carrying across the essence of that person in their own moment, before inevitably shelved for the next chapter. Shelved happily for the real pursuits the website may have encouraged.
In this vein so one may find he who draws, he who writes, he who reports or he who wrestles with the metaphysical. The same spirit, guiding them along, until the stair comes, and the world takes them away.
This singular function is why I would ever want to make a website builder. Not to give a chance to make a website, but a chance to conjure a spirit, and that spirit guides you to your next goal post.
All websites are Virgils, whether for the reader or peruser, and the chapter closes, but you know you got at least something out of it.
No one reading this page can deny the influence of all of the things they’ve read or watched online. It shaped who you were.
And there’s a tad bit of sadness though, when one thinks of the social media where you are shaped by those who want you a certain mold, and shaped by the social media where you permanently lurk rather than engage with yourself and what is next, what are your interests. No one is better served by anything other than your own spirit, animated through the website you build.
If I focus on this aspect of a website builder, however insane and zealous it may be, it makes it easier to continue working on it.
But I still need something even more insane than this story and metaphor if I were to continue working on it.
Month hiatus
So I got trapped in that engineering ideology tendency that somehow the technology I could craft — that somehow I could redeem the social media genre, somehow. Or just axe it entirely. Anything, just to make it more palpable.
But the truth is I cannot fundamentally alter the contract you sign up for when you pay for your internet connection. There is nothing I have to mindsell you, no ideology to cart along, nothing to redefine the contract we’re all in.
It’s just a website builder. It’s a tad different but the core proposition is the same. All we’re doing here is deploying a website builder. I can only offer some time to look around and have a small diversion, no matter how poorly made. No matter how long it lasts…
So where did we leave off? We’re shelving the Lua stuff… we’re shelving the templating… we’re shelving everything other than the core artifact of making a website with HTML/JS/CSS.
Incidentally, I’ve been having some doubts about the whole “InertiaJS” set up honestly. I really don’t like the complexity between handling “server node” mode and “browser” mode. We’re going to roll with it, but if I started this project over I’d probably use React with some “mount” mechanism, whether through alpineJS or stimulusJS. I could still do that… maybe I will. Because it’s more enjoyable, if at all possible, to not use javascript more than you need to. Oh well.
Two weeks
Yeah, I mean, I think I’ll just clean up as much as I can, buy a domain, and go from there. I’ll finish this lack-luster chapter to shake off the two month hiatus. Hopefully a more meaningful reason surfaces.
So I think what’s been bumming me out is that I don’t want to create another social media. I’m not about it. And I spent a good chunk of time working on the “social” features of the site.
Day later
So I think what I’ve decided to do is to create a website builder only. There will be a forum attached and that’s it.
Because the more I think about it the last thing I want to do is provide more cigarettes. You have all these sites to smoke about and I don’t want to join.
IF it means little-to-no-profit, no addictive ethereal substance, so be it.
I just want something different.
So what this means is that there is no longer a “site feed” or profile. You log in, and it shows the sites you have, and you can still collaborate on them with other users if you invite them. But there is no directory and discoverability. That’s covered by the forum, probably.
What’s neat about removing the feed entirely is that it mimicks something older. Where you’re clicking around and the net feels so vast.
In terms of discoverability I think there can either be dedicated threads for each site update or something else.
Because at the end of the day most “feed-like” interactions feel vacuous. I’m not even sure what to look for anymore.
If I am to continue with this, I would probably add all the bells and whistles and do everything except one setting: if I disable my profile, it also disables updates to the global feed.
That is my only annoyance with neocities, because I cannot push an update without it also showing on the global feed.
This is the only real concrete annoyance I have. I don’t believe in online socialization as anything more than two islands talking and frankly I want it that way. So a forum or anything more seemingly intimate isn’t something too interesting.
So, there you go. The entire reason I am building this is so, when I host my site on it, I can disable the profile and not have it show anywhere on the site for sure whenever I am feeling neurotic enough to disable it.
That’s it.
It’s a little amusing to think an entire platform is born out of a desire to fix one small (seeming?) bug.
I like this distance. I hate notifications. So let’s keep living this way.
The only winning move is to not play.
But I also must explain this hem-and-haw pathetic display.
Because when you’re building something, and it’s something you have to maintain, or even just do any work on at all, you have to believe in it. You need to delude yourself of something. Anything! Any aspect at all.
Because if you cannot find any redemptive quality to what you are building, I do think it chips away at your soul, whatever of it remaining.
Believe me, I fully know and understand this won’t do much. But it better adjust something, that’s all.
I just want to make an amusing story, maybe. The story of this site seems stale, probably.
Well, I did not accomplish anything this chapter, but I have at least revealed the barebones theology behind making things. Or just an excuse, more than anything.
In the next chapter, should it ever arrive, we’ll just deploy it without doing any more programming. I’ll buy a domain and deploy it, and then if that’s the end of this experiment so be it.
Until next time!