you probably don't need a website

proto web personal
Two people fishing beside an electric-blue lake in a strange retro computer world.

You probably don’t need a website. I mean this in the boring, practical sense. If you want somewhere to put your code, GitHub is better. Letterboxd can tell people which movies you watched, Spotify knows what you listen to, and Twitter is always available when a random thought escapes your head five seconds before you have had time to check if it is stupid or not, OPSEC is basically dead.

All of these accounts already contain me. A person could look through them and figure out what I make, what I read, who I talk to, which software I use, and approximately what kinda of pretentious loser I am. There is very little information about me which requires a separate domain and a Haskell static site generator (written in Haskell btw muhehe). And yet I have one. Worse, I keep modifying it every few months.

Atuin says I had rebuilt my system 200ish something times when I wrote the first between rebuilds post.1 Two weeks later the number was 254. To be fair, that number also includes changes to the rest of my Nix config, and failed rebuilds, and all the times I changed one thing and immediately changed it back. It is probably a stupid metric and I dont really know why I keep a track of it; maybe just to feel something?? Or just because my about page was so empty, that I decided to fill it in, guess we will never know.

The website belongs to the same cycle. Every few months I open it and the font looks wrong. Or the homepage is too empty. Then I add things and it becomes too busy. Some stuff I thought was important six months ago now feels embarrassing, while some dumb tool I discovered two hours ago feels like it should be the first thing on the page. Sometimes I fix three lines of CSS. Sometimes the entire homepage is rebuilt by all by accident.

For a while, I thought this meant I was bad at finishing things. (Something like Cristiano Ronaldo, but he’s finished anyway, so how can I compete?) That is probably true, generally. I am bad at finishing lots of things. But I no longer expect a final version of this site. I keep finding very cool sites on what you call the internet, multiple things or services to add to my website, and now I am too deep in that rabbit hole, to leave it alone now.

profiles

Almost every platform on the internet give you a room which has already been built. Somewhat similar to the dorm room you get in college, you can decorate it, within reason. There is an avatar, a display name, maybe a banner, and a bio with some stupid ass character limit. If the devs cared enough, maybe you get to choose themes and color.

This actually is not a bad thing. A GitHub profile should look like GitHub, something like yea a sloppy code resides here. If every repository opened into an interactive 3D cathedral and made me locate the README behind 5 clicks, I would go nuts. Common structure is actually the reason, you dont need to spend first ten mins, figuring out what resides where, I can open a repo I have never seen and know where the code, issues and releases are.

But the structure also has ideas about you. GitHubs unit of work is repositories, stars and contribution graphs. LinkedIn wants employers, certifications and whatever the hell “LETS CONNECT” is. Twitter turns everything into a post which sits beside a reply count and a view count. Use these sites for long enough and your muscle memory builds up, then you start reaching for their boxes before deciding what you wanted to put in them.

I notice this most with small things. Say I was reading something, and then some neurons in my brain fired and decided to come up with something cool, but it is too small for a blog post, too specific for most people who follow me on Twitter, and who even uses LinkedIn?? A half baked pixelart editor has a similar problem. Portfolios seem to require a screenshot, a case study, and a paragraph about impact, yada yada. In my case, most of the time, it goes like: I thought this would be funny, it sort of works, but I dont see a usecase of it, but hey here is the source.

On my own site I have to invent the box. This sounds like Nirvana until I have spent far too long deciding how should the 88x31 be placed.2 Where does the navigation go? Do I even need a nav bar?? Should the homepage show my projects or the live log? Are my projects even good enough to be posted in the project section?? Why is there a live log? Why did I decide the logo should spin when clicked? Why do I have some random service running, which no one will get to ever see??

The current homepage says “hey, i’m mel”, shows what I am reading, lists a few friends, pulls the latest posts, and has a terminal-looking log in the middle. It has no single job. A recruiter would probably never want to visit my site, and somebody who only wants the blog would prefer a normal blog. The page is a fairly accurate result of me being allowed to keep touching it.

my homepage

Other sites ask me to fill fields selected by somebody else, who at the given moment thought it would be a good idea, my website has fields no reasonable engineer would approve, mostly because I invented them while redesigning my site for the nth time.

the container

Publishing can be broken down in two jobs generally: make the thing, then package it. Write the article and put it in the blog template. Take the photograph and upload it to the gallery. On a website, it doesnt work that way because the package keeps affecting the thing inside it.

The exact same sentence feels different depending on where I put it. On Twitter it is a tweet. In log.md it is a log entry. Put it alone on a white page in a large serif font and now, somehow, it is philosophical and considered very deep. Nothing changed in the sentence. The page you put it on, gave its category and the vibe.

My log is a very literal example. The original log workflow was something like this, adding a one-line thought meant editing log.md, committing the change, pushing it, waiting for GitHub Actions to build the site, and redeploying the whole thing. This was funny the first time. It was less funny and more boring every time after that, and it also meant I barely used the log because comeon, just for a simple thought, it would go through an entire deployment pipeline. Now I type this:

log "aloha, idk what to write here, so here it comes"

That command fires up the script, which sends the text to a Cloudflare Worker, the Worker stores it in D1, and the site fetches it from there. The Discord /log command goes to the same place. The result still looks like part of my static website, except I can use it the way I use a chat box. Boom, this change itself dropped the log time from 2 mins, to 2 secs and I started using the log more often.

The rest of the site works the other way. Posts are Markdown files (looking back, the v1 of this site, I used to write them in raw HTML like a cavemen). Hakyll turns them into pages, and a Nix flake builds the whole thing.3 I like that a post is a normal file I can open in any text editor. I also like that the same site can contain a live feed, and all my inupt stats in a box generated from Hammerspoon, a page of photographs (I should make them public sometime), and a pile of 88x31 buttons. None of those things needed to share a format just because they share a domain.

A technical note can look like something I wrote while fixing a problem. On a project page I can even include the terminal output which matters more in that context. Tiny experiments may need almost no writing. Maybe the thing is the weird cursor or the button or the fact that the page makes a noise. For a while, making the page and making the thing on it is basically the same thing.

Robin Sloan has written about working on the container and the contents together. That description makes sense to me. It is also a dangerous idea if you just love building sites again and again, because you can spend far too long making the container do something cool and forget what you meant to put in it. I have done this enough times that it might be my actual thingy.

what counts as personal

Personal websites usually begin as portfolios because a portfolio has an obvious justification. You need an internship, and somebody tells you to buy a domain. So the homepage gets your name and job title. The projects have polished descriptions. There is a resume and a contact button. Everything on the site can explain how and why it is there.

I have projects I want people to see, so part of my site works this way too. A person is very boring without humor in it, if you build every site just for the sake of a job interview, the games gone. Humanity wont thrive without lil bit of humor init.

I write prompt code and I am a CS student. I spend monst of my time using computers and I am slowly moving towards MLOps, assuming the entire field does not rearrange itself again while I am learning it. The website also has the Minecraft server my friends and I ran from a homelab (do not ask me for the IP, its no more), keyboards, books, Linux experiments, movies, links I found, and projects with no purpose beyond making me feel cool for a little while. Doing things just because it feels cool, is such a great thing to do tbh.

The homepage has a section called rabbit holes which currently says Linux, building keebs, airplanes and home labbin. This information is useless to almost everybody. It is more personal than another paragraph about being a passionate software engineer in the Big 26.

The pages I like the most are difficult to defend. Someone maintains a links page by hand. There is an 88x31 button for no apparent reason. An obscure program they briefly used gets its own page. Those choices tell me more about the person than a polished sleek pixel perfect site does.

There is a tendency to call all of this content, which is a word I really realy hate. An essay is content, a photograph is content, a three sec video of someone falling from the chair is a content. Once everything has the same name, it can enter the same feed and be measured using the same numbers. Call it capitalistic world or whatever, but it works like this. This is one of the reasons I’m more bullish on hosting our own stuff, in your own closet.

A random page on my website is under no pressure to do well or get more views. There is nowhere for it to do well. It can sit at /links/ while I keep checking whether the logs gets updated on my phone. I can keep it because I like that it exists. I don’t really need any more reasons.

old versions

I keep the site partly for reasons that have nothing to do with visitors. Every so often I find an old version of the homepage or an old post. The prose is worse. I’m a pretty open minded person, so some opinions did not survive contact with another six months of being alive. The CSS is usually committing a crime, and I absolutely hate it. But I can see what I was interested in and what sort of person I was trying to look like at that given instant of time. The design is part of that record. One font can bring back an entire phase of my life.

Platforms remember almost everything I have done too. They are actually much better at it. But scrolling through years of tweets does not feel like opening an old green notebook. The archive is organised around the platform’s unit, sorted by its clock, and presented inside its current interface. Even my old posts look like current Twitter when I open them. Part that I absolutely hate, is a post I made 3 years ago, with some different profile picture, if I visit it now, itll show me my current one anyways.

My website keeps its old shape until I want it to. The Markdown file is still there. I can edit it, leave it alone, write the web server in another language, or open the Git history and see exactly how I ruined the blogs. I can work with the files directly instead of requesting an archive from a service and then figuring out how do I even parse the JSON.

The site also remembers things I would never think to preserve deliberately. My about page displays input statistics collected by Hammerspoon. Last month it said a million key presses and 189 kilometres of scrolling, thats quite a lot actually. This is completely useless information. In five years it may be one of the more interesting records on the site, because I will have forgotten what using a computer in 2026 felt like. Apparently it involved 189 kilometres of scrolling.

Redesigning the site feels more human than it should, Im kinda attached to its current CSS. The old design fit an older version of me. Nothing is necessarily wrong with it. I just do not want it representing me anymore, so I repaint the room and move the projects around. That’s called evolving or for you normies its character development.

I think I even do this to physical rooms without treating as a failure to finish the room or something. I replace the old postcards Ive had on the walls, change the orientation of my desk, get a new lamp, discover the lamp is broken, get a refund, fix the lamp. A new keyboad, well a personal site seems allowed to work the same way too. I would be worried if mine ever looked the same for too long.

other people’s rooms

One of my favourite things on the internet is clicking an ordinary link and ending up on a website which immediately feels like a person lives there. The CSS might not have been touched since a decade. There could be a page cataloguing every keyboard the owner has built, followed by notes on mathematics and photographs of a cat. Maybe the cursor is needlessly custom. Before reading the about page, you already know something about whoever made it. Ain’t it awesome??

Laurel Schwulst wrote about websites as rooms, houses, boats, gardens, puddles, and a bunch of other possible shapes. I like the essay because it gave me permission to stop treating the blog-and-portfolio combination as the natural form of a website. A site can be a notebook. It can be a workshop with tools left everywhere. Some are closer to archives. Others feel like abandoned buildings, but there is still something interesting through every window you pass from.

The room metaphor gets a bit precious if I push it too far. Opening a Hakyll page from a GitHub Pages server is not the same as entering my home. The useful part of the metaphor is that each website can have local rules. People can organise things differently and make pages I would never have thought to make.

Open enough profiles and the sameness becomes obvious. I learn what each person put in the standard fields, but I never find out which fields they would have invented for themselves.

My favourite example is a good links page. Mine is a feed of articles, papers, videos, and whatever else I want to find again. I add something with a terminal command or a Discord command, because apparently I cannot have a bookmarks page without building infrastructure for it.

The links page would be pointless if everything on it led back to me. One person’s blog points to an essay. The essay mentions a tiny project. The project has a blogroll, and twenty minutes later I am reading somebody in Japan explain their mechanical keyboard. I have no idea how I got there. This used to be a normal way to use the web. And this is what I absolutely love about the internet, it got so many doors to it.

Some of those doors lead to people. It is kinda insane how many people you can meet because both of you happened to be in the same stupid corner of the internet at the same time. It still feels so magical to me.

Hallie Bateman

Recommendation systems are much more efficient. YouTube is good at finding the video most likely to keep me on YouTube. A link somebody placed by hand says they found a page and thought it was worth keeping, even if they never explain why.

I keep a tiny frens section on my homepage for the same reason. It is not comprehensive or ranked. They are a few pepole I like, and anybody reading mine can leave through one of them.

me and all the cool peeps that reside on this site

owning almost nothing

People sometimes describe a personal website as owning land on the internet. This is an overstatement to be very honest. I do not own the fibre, the browser, the DNS system, or the datacenter. I rent the domain. GitHub currently serves the HTML. The things which move are mostly Cloudflare Workers, so even my static website has managed to depend on somebody else’s computer. I can move the site, which is about as much ownership as the web gives me.

The posts are Markdown. The site becomes raw HTML. If GitHub Pages stops working for me, I can put the output elsewhere. If I get tired of Hakyll, I can write a different generator or go back to being a cavemen writing in HTML. Moving would be annoying, especially the Cloudflare parts, but the files would come with me.

The page stays until I remove it, break the build, or forget to renew the domain. A feed does not decide when an old post stops appearing in front of people. If somebody has the URL, the page is still there.

GitHub and Twitter will probably still exist tomorrow. They can still change their interfaces, remove features, bury archives, alter APIs, or decide every surface needs a low entropy short form video bullshit. An exported JSON archive doesnt contain the same vibes you had while making that post.

HTML is boring in a useful way. A document with a URL remains the basic unit of the web. You can create one without an app review, a publishing account or permission from a company. Write a file, put it on a server, and somebody on the other side of the world can open it. We have lived with this for long enough that it sounds ordinary, but it is still kind of magical.

the right to make bad websites

Modern software tries very hard to prevent bad aesthetic choices. Templates have reasonable spacing. Type scales are consistent. Every dashboard has the same pixel perfect border radius and looks like it came from the same AI slop agent. This usually makes software easier to use. It also makes a lot of the web look like nobody in particular made it. On my own website I am allowed to make it worse however I like.

The early web had flashing text, background music, unrelated fonts, visitor counters, tiled backgrounds, and textures which my brain cannot comprehend on how they did it. People made terrible websites because the tools allowed them to make decisions, including terrible ones. I do not want all of that back, but it was still wayy better than what we have now, where everything looks the same.

Wienerville displayed in Netscape

A weird favicon somebody drew tells me a person was there. So does a footer which changes on one page, or something hidden behind a keyboard shortcut that four people will find. Nobody needed it. The person who made the website liked the idea enough to make it.

My own site has a spinning blackletter m, a live terminal log, old web buttons, input statistics, and a page which redirects /now-playing/ to my fav music(you should def check it out). These are not features I would recommend to anyonee. Taken together they are a better explanation of why I wanted a website than the about page is.

Having control also lets you invent stupid rules. Maybe every title is lowercase. Maybe URLs never change. You can refuse JavaScript, or use far too much of it. The site can run from a machine under your desk. You can choose a Haskell generator in 2026 even though you then have to explain what Hakyll is.

None of these decisions need to work for another website. Product software has users who deserve sensible defaults. On my site I can be unreasonable and deal with the result myself becuase the result doesnt even matter.

unfinished things

I think many people never make a website because the imagined first version is already so huge. It needs a beautiful homepage, a blog, five finished posts, project case studies, dark mode, responsive design, analytics, an RSS feed, perfect terminal client, and then a guy on Hacker News will say the HTML is 14kb larger than necessary. This is too much work for a place which does not exist yet.

The first version can be an index.html file containing your name. Add a link later. Pick some weird background colour. Write something on the about page that gets you ratioed on twitter(this actually happened). The useful property of a website is that publishing it does not make it permanent. You can change the file tomorrow, because it is yours.

Publishing on the internet usually comes at the end of a process. You finish The Post, press publish, and begin making another post for the feed. On a personal website, publishing can happen near the beginning. A note can remain incomplete. An experiment can barely work. You can return to an old page after learning something and fix it instead of writing a new announcement about the correction.

I need this because I abandon things. I get obsessed with new things, move very fast for two weeks, hit the part where I actually need patience, and disappear into something else. The site contains the evidence. Xeet sat untouched from September until a random convo happened about it. Other tools did not get lucky yet i guess.

A page at least makes an unfinished thing easier to find again. The idea has a name, a URL, maybe a note about where I got stuck. It remains part of the site instead of vanishing into some directory I will discover much later.

There is no rule that the newest page must be the most important one either. Well thats not the case with Twitter or other platforms, feeds only push whats fresh. Yesterdays stuff gets buried over todays, A website can keep a 3 y/o note beside something I wrote like an hour ago. I can organise around subject, or usefulness, or whatever system I want to arrange with when I am doing the organising. It does not have to be sorted entirely by date.

noticing websites

I now notice the width of the text, how links are styled, whether the URL changes when I click something, and how somebody organised their notes. I inspect the source. I steal small CSS ideas. I collect screenshots, I look at every request thats being passed from that sites.

Making things changes what you notice. Learning a little about keyboards makes you notice every keyboard. Learning how a compiler works makes error messages more interesting, or at least gives you new reasons to be annoyed by them at some point. When a small random website starts too good to read on, I start picking at the reasons. Maybe the font works, maybe he writes really well, and there is no pile of JavaScript above the first paragraph. Somebody may also have cared about that page for much longer than was reasonable.

People make these choices inside large products too, but the major corps usually hides them. On a small site I can often trace an idea directly to the person who wanted it. I end up clicking around to see what else they did.

you still don’t need one

For most practical purposes, a platform remains easier. GitHub is better at collaborating on code. Discord is better for conversation. YouTube can store more video than I would like to store on a server. I still use all of them, probably too much, and having a website has not rescued me from the modern internet.

I do not want those accounts to be the complete version of me online. My site holds whatever does not fit anywhere else, and its purpose changes depending on which part I rebuilt most recently. Some weeks it is a blog. Other weeks it is closer to a messy rough nb or a junk drawer.

I want more people to make these places because I want more weird things to find. I want pages about obscure stuff, tiny tools built for four pepole, ridiculous domain names, blogrolls, and personal libraries maintained according to rules no one can make sense of. I want websites where I cannot tell which framework made them because there may not be one.

A sixteen-year-old with a text editor and an enormous company can both put a URL in my browser. The sixteen-year-old is also free to make the button spin because it looked cool. The browser will open either page.

So make a website if you want one. Put your name on a blank page, add one link, and leave it alone until you feel like changing it. It does not need a strategy or an audience. It does not even need to be good.

My own site is currently Hakyll, Nix, GitHub Pages, a few Cloudflare Workers, too much CSS, and a logo you can spin. I am sure this architecture is final. Atuin still says 254 rebuilds.

my dumbass stats that no one asked for

  1. The entries mentioned here are between rebuilds 001 and 002.↩︎

  2. 88 × 31 pixels: the tiny linked image buttons in the footer. Each one is a little signpost to another person’s site.↩︎

  3. Hakyll produces the HTML before anyone visits. Reading a post does not run a Haskell server; the live log is a separate service.↩︎

cool people & cool stuff