Skip to content

v--/website

Repository files navigation

Personal website

This is the code for my personal website, https://ivasilev.net

For learning purposes, I have made it my goal to only rely on external dependencies for development (and not for the runtime), so I have implemented a lot from scratch. I hope some of it may be useful as a simple yet working reference unburdened by the feature creep of large libraries and frameworks. Some highlights are listed in the following sections. Think of the kind of code you see in "build your own web framework" blog posts.

Naturally, the code is licensed under the Unlicense, and whatever other content I have here is licensed under CC0 (except, obviously, for Font Awesome and the STIX fonts referenced as submodules and the PT Sans font downloaded in ./data/og_images).

After running the website for 12 years (with occasional bursts of development), in 2025 I did a large refactoring and have decided to publish the code on GitHub. On that occasion I wrote module overviews in the README files of some directories (perhaps a single "docs" directory would have been better?). For example, ./code and ./styles contain an overview of some tools used, while the directories listed in the next section feature code that may be of interest elsewhere.

To run the code, a little setup is required:

git submodule update
nodenv install
npm install
ln --symbolic local.json config/active.json

After that, a development server can be launched via npm run watcher and, after the initial build, npm run server.

Library code

What I call here "library code" is a bunch of reusable independent modules that would be external dependencies if it was not my goal to implement them. Roughly, I have implemented from scratch analogues of some of the tools that I have relied on when building web applications. The following may be of interest:

Website code

What I call here "website code" is code specific to my website.

The website is split into logically independent bundles (these are not quite bundles in the usual JavaScript sense - see here). The "core" bundle can be rendered both on the server and in the browser and its functionality is restricted to what can work in a modern browser without JavaScript. For example, the /files page must behave identically with and without JavaScript, and this is verified using end-to-end tests.

The server-side aspect is explained in ./code/server, while the client-side aspect is explained in ./code/client/core.

The other bundles are part of the "playground": a collection of interactive pages that, because of their interactivity, rely on client-side JavaScript.

About

My personal website

Topics

Resources

License

CC0-1.0, Unlicense licenses found

Licenses found

CC0-1.0
LICENSE-CC0-1.0
Unlicense
LICENSE-Unlicense

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published