diff --git a/README.md b/README.md index 1a600de..2ff1988 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # pages-svelte -SvelteKit repository for my website hosted at [https://denizk0461.dev/](https://denizk0461.dev/) +SvelteKit repository for my website hosted at [https://natconf.dev/](https://natconf.dev/) ![Screenshot of the website's main page](website-screenshot.webp) \ No newline at end of file diff --git a/src/lib/viewport/footer.svelte b/src/lib/viewport/footer.svelte index af1d425..b9a72f4 100644 --- a/src/lib/viewport/footer.svelte +++ b/src/lib/viewport/footer.svelte @@ -20,7 +20,7 @@

〔 2023–2026 〕denizk0461

-

Built from commit {version.substring(0, 6)}

+

Built from commit {version.substring(0, 6)}

Content
@@ -35,7 +35,7 @@ About Feeds Updates - Page Source + Page Source Privacy & Cookies
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 3374fb9..566328f 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -51,14 +51,14 @@ description: "Find things I've put for download on my Copyparty instance", img: "main/hypertext.webp", altText: "Screenshot of Hypertext Unity level. Crates are strewn across the floor, Waluigi is flying in front of the camera, and text such as 'COME AND TRY OUR ALL-NEW BLENDER' and 'omg! it's the brandenburg er tor!' is displayed.", - link: "https://files.denizk0461.dev/public/", + link: "https://files.natconf.dev/public/", }, { title: "Gitea", description: "I now also self-host a Gitea instance where I am likely migrating all my projects to", img: "main/magic.webp", altText: "A 'magic' command written in Java. The command shuts down the computer when ran.", - link: "https://code.denizk0461.dev/", + link: "https://code.natconf.dev/", }, ]; diff --git a/src/routes/blog/2026/0317.md b/src/routes/blog/2026/0317.md index d99bdfc..11b47d0 100644 --- a/src/routes/blog/2026/0317.md +++ b/src/routes/blog/2026/0317.md @@ -46,7 +46,7 @@ services: PGRST_DB_URI: 'postgres://authenticator:password@database:5432/postgres' PGRST_DB_SCHEMAS: 'api' PGRST_DB_ANON_ROLE: 'web_anon' - PGRST_SERVER_CORS_ALLOWED_ORIGINS: "https://app.denizk0461.dev" + PGRST_SERVER_CORS_ALLOWED_ORIGINS: "https://app.natconf.dev" depends_on: - database database: @@ -78,7 +78,7 @@ Keep in mind that you will not need to open up any of these ports on your firewa #### Nginx -I'm using Nginx as a reverse proxy here. What does this mean? It means that we can send a human-readable URL to Nginx, such as this: `https://files.denizk0461.dev`, and Nginx will *internally* route us to the place the service is actually running on: `http://localhost:3923`. This has several advantages: as the end user, we won't need to remember the IP address or the port of the services we connect to. As the server administrator, we will only need to expose a minimal number of ports. In this example, port 3923 is actually closed off from the public, meaning that bypassing Nginx and connecting to the service directly, e.g. by typing `https://denizk0461.dev:3923`, is impossible. The only open port is 443, which is a standard port for websites served over encrypted HTTPS. Your browser will always try to connect to a website starting with `https://` on port 443, unless you specify another port. Port 80 is actually also open on my server, as it accepts requests through the unsafe `http://`, but it only redirects to `https://` on 443. +I'm using Nginx as a reverse proxy here. What does this mean? It means that we can send a human-readable URL to Nginx, such as this: `https://files.natconf.dev`, and Nginx will *internally* route us to the place the service is actually running on: `http://localhost:3923`. This has several advantages: as the end user, we won't need to remember the IP address or the port of the services we connect to. As the server administrator, we will only need to expose a minimal number of ports. In this example, port 3923 is actually closed off from the public, meaning that bypassing Nginx and connecting to the service directly, e.g. by typing `https://natconf.dev:3923`, is impossible. The only open port is 443, which is a standard port for websites served over encrypted HTTPS. Your browser will always try to connect to a website starting with `https://` on port 443, unless you specify another port. Port 80 is actually also open on my server, as it accepts requests through the unsafe `http://`, but it only redirects to `https://` on 443. I configured Nginx to run both the SvelteKit app as well as the PostgREST backend from the same subdomain. You don't *need* to do this, and I *think* it should even work if you put, for example, the database on a different subdomain, but I can't guarantee it. @@ -86,7 +86,7 @@ I configured Nginx to run both the SvelteKit app as well as the PostgREST backen
 server {
     listen 443;
-    server_name app.denizk0461.dev;
+    server_name app.natconf.dev;
 
     location / {
         proxy_pass http://localhost:3000;
@@ -100,12 +100,12 @@ server {
 
 This `server` block serves two functions:
 
-- it serves our SvelteKit app, which by default runs on port 3000, from the root directory of the subdomain (e.g. `https://app.denizk0461.dev`), and
-- it serves the table `customers` from our PostgreSQL database, which is accessible through PostgREST on port 3100, on the subpage `/customers` (`https://app.denizk0461.dev/customers`).
+- it serves our SvelteKit app, which by default runs on port 3000, from the root directory of the subdomain (e.g. `https://app.natconf.dev`), and
+- it serves the table `customers` from our PostgreSQL database, which is accessible through PostgREST on port 3100, on the subpage `/customers` (`https://app.natconf.dev/customers`).
     - If your table has a different name, replace `customers` with that table's name.
     - If you want multiple tables to be accessible, copy the entire `location /[tablename]` block and paste it in as often as you need, replacing `[tablename]` with the names of the tables.
 
-Be sure to change `denizk0461.dev` to your own domain, as this will otherwise not work.
+Be sure to change `natconf.dev` to your own domain, as this will otherwise not work.
 
 ### Configure the Database
 
@@ -113,7 +113,7 @@ Once you have the database running, we need to create a table to store data in.
 
 You're best off following [the official guide for PostgREST](https://docs.postgrest.org/en/v14/tutorials/tut0.html#step-3-create-database-for-api). Important steps: create the schema, name it `api` (that's the publicly-accessible schema because we set `PGRST_DB_SCHEMAS: 'api'` in the `compose.yml`), create a table (name has to start with `api.` but can be anything after that, e.g. `api.customers`), insert test data, create the roles `web_anon` and `authenticator` and then quit by typing `\q`. That's all. Welcome back!
 
-You can now access the database data on `https://app.denizk0461.dev` (if you replace my domain with yours). Keep in mind that the PostgREST guide only grants read access (GET) to the database; in order to POST data to the database, you need to grant `INSERT` privileges to `web_anon`: `grant insert on api.customers to web_anon;`.
+You can now access the database data on `https://app.natconf.dev` (if you replace my domain with yours). Keep in mind that the PostgREST guide only grants read access (GET) to the database; in order to POST data to the database, you need to grant `INSERT` privileges to `web_anon`: `grant insert on api.customers to web_anon;`.
 
 If you want a kind voice to guide you through this process, I found [Ian Wootten's video on setting up PostgREST](https://youtu.be/RxuofiZNhtU) to be very nice to follow along.
 
@@ -137,10 +137,10 @@ if (response.ok) {
 }
 
-In this example, I set up two environment variables: `API_HOST` and `API_DB`. Those are secrets that won't be published to your Git provider when you push your changes (if your .gitignore is set up correctly!). `API_HOST` is the fully-qualified domain, e.g. `https://app.denizk0461.dev`, and `API_DB` is the name of the table, e.g. `customers`. Doing this is not necessary, but it's good practice to keep secrets, especially once you get to the stage of needing passwords or authentication keys. If you want to use environment variables, create a file named `.env` in the root directory of your application, add the variables as such: +In this example, I set up two environment variables: `API_HOST` and `API_DB`. Those are secrets that won't be published to your Git provider when you push your changes (if your .gitignore is set up correctly!). `API_HOST` is the fully-qualified domain, e.g. `https://app.natconf.dev`, and `API_DB` is the name of the table, e.g. `customers`. Doing this is not necessary, but it's good practice to keep secrets, especially once you get to the stage of needing passwords or authentication keys. If you want to use environment variables, create a file named `.env` in the root directory of your application, add the variables as such:
-API_HOST="https://app.denizk0461.dev"
+API_HOST="https://app.natconf.dev"
 API_DB="customers"
 
@@ -168,7 +168,7 @@ kit: { adapter: adapter(), csrf: { trustedOrigins: [ - "https://app.denizk0461.dev" + "https://app.natconf.dev" ], }, }, @@ -206,7 +206,7 @@ I'm going to prove why you should avoid generative AI at all costs. Let's go thr 1. Use Relative Form Actions -This 'fix' describes using relative paths to access form URLs. Instead of `https://app.denizk0461.dev/customers`, I should just use `/customers`. +This 'fix' describes using relative paths to access form URLs. Instead of `https://app.natconf.dev/customers`, I should just use `/customers`. This doesn't work. diff --git a/src/routes/blog/2026/0325.md b/src/routes/blog/2026/0325.md index 4443b85..dbd1977 100644 --- a/src/routes/blog/2026/0325.md +++ b/src/routes/blog/2026/0325.md @@ -14,7 +14,7 @@ To create the font, I used [FontForge](https://fontforge.org). Finding this tool ## Download & use -[Download the font here](https://files.denizk0461.dev/public/lightyears.woff2). It's in the web-optimised `woff2` format and has most characters stripped to minimise its file size – it's less than 20 kilobytes in size! Uppercase and lowercase letters are the same. +[Download the font here](https://files.natconf.dev/public/lightyears.woff2). It's in the web-optimised `woff2` format and has most characters stripped to minimise its file size – it's less than 20 kilobytes in size! Uppercase and lowercase letters are the same. For use on your website, put the font into your resources/static/similar folder and then add this block of code to your CSS file: diff --git a/src/routes/blog/feed.xml/+server.ts b/src/routes/blog/feed.xml/+server.ts index 630a45e..7c38cce 100644 --- a/src/routes/blog/feed.xml/+server.ts +++ b/src/routes/blog/feed.xml/+server.ts @@ -4,7 +4,7 @@ import { posts } from "../posts"; const xml = () => ` denizk0461's Blog - https://denizk0461.dev/blog/ + https://natconf.dev/blog/ ${getEntries()} `; @@ -16,8 +16,8 @@ function getEntries(): String { <![CDATA[${entry.post.title}]]> - https://denizk0461.dev/blog/${entry.key} - https://denizk0461.dev/blog/${entry.key} + https://natconf.dev/blog/${entry.key} + https://natconf.dev/blog/${entry.key} `) entries.forEach(entry => { diff --git a/src/routes/meta/about/+page.svelte b/src/routes/meta/about/+page.svelte index 0270ba0..f3c83df 100644 --- a/src/routes/meta/about/+page.svelte +++ b/src/routes/meta/about/+page.svelte @@ -78,7 +78,7 @@ }, { text: "Bluesky", - link: "https://bsky.app/profile/denizk0461.dev", + link: "https://bsky.app/profile/natconf.dev", }, { text: "Codeberg", @@ -151,7 +151,7 @@ Screenshot of the taskbar of a Fedora KDE setup. There are multiple icons. From left to right: Clank as the application launcher icon, Firefox, fooyin music player, Dolphin file explorer. -

As for the server infrastructure: the website is hosted on a Hetzner server instance I am renting. It's a relatively cheap CPX22 node that costs me 7,72€ a month, and besides my website, it's also hosting things such as a Nextcloud instance and a Minecraft server. In order to host and update the website, I wrote a small bash script that pulls the changes from the Git repository, builds the website as a Node server, and then exposes it via Nginx.

+

As for the server infrastructure: the website is hosted on a Hetzner server instance I am renting. It's a relatively cheap CPX22 node that costs me 7,72€ a month, and besides my website, it's also hosting things such as a Nextcloud instance and a Minecraft server. In order to host and update the website, I wrote a small bash script that pulls the changes from the Git repository, builds the website as a Node server, and then exposes it via Nginx.

Tools & Software

@@ -169,7 +169,7 @@

The rat in the bottom right of the screen is property of Insomniac Games. Clicking it will bring you good fortune.

-

The style of the webring elements is adapted from a template provided by Rainbow Cemetery for the Gamedev webring. I adapted it into a Svelte component that allows setting the links, emojis, and arrows more easily.

+

The style of the webring elements is adapted from a template provided by Rainbow Cemetery for the Gamedev webring. I adapted it into a Svelte component that allows setting the links, emojis, and arrows more easily.

Contact / Where to find me

diff --git a/src/routes/meta/privacy/+page.svelte b/src/routes/meta/privacy/+page.svelte index bb93050..284a521 100644 --- a/src/routes/meta/privacy/+page.svelte +++ b/src/routes/meta/privacy/+page.svelte @@ -13,7 +13,7 @@

This page uses no cookies as of now. No data will be stored on your device while browsing this website. No trackers are used either – no analytics, not even a visit counter of any kind. Not by a third-party, and currently, none I built myself either.

-

The Godot and Unity projects on the apps.denizk0461.dev subdomain may cache compiled shaders on your device, I'm not sure. These files would only be used by your GPU to render visual effects for the game they were compiled for.

+

The Godot and Unity projects on the apps.natconf.dev subdomain may cache compiled shaders on your device, I'm not sure. These files would only be used by your GPU to render visual effects for the game they were compiled for.

Last updated: 2025-09-10

diff --git a/src/routes/meta/updates/updates.ts b/src/routes/meta/updates/updates.ts index 2396eb6..755b85f 100644 --- a/src/routes/meta/updates/updates.ts +++ b/src/routes/meta/updates/updates.ts @@ -69,7 +69,7 @@ export const entries: UpdateEntry[] = [ date: "2026-02-03", time: "15:48", content: "Now running my own Gitea instance! It now also hosts my website repository.", - link: "https://code.denizk0461.dev/denizk0461/pages", + link: "https://code.natconf.dev/denizk0461/pages", }, { date: "2026-02-02", diff --git a/src/routes/projects/projectn5/devlog/2025/0816.md b/src/routes/projects/projectn5/devlog/2025/0816.md index 8f94978..d64a17c 100644 --- a/src/routes/projects/projectn5/devlog/2025/0816.md +++ b/src/routes/projects/projectn5/devlog/2025/0816.md @@ -4,19 +4,19 @@ let builds: LinkEntry[] = [ { text: "2023-10-07 (Protagonist #1)", - link: "https://files.denizk0461.dev/public/projectn5/2023-10-07.zip", + link: "https://files.natconf.dev/public/projectn5/2023-10-07.zip", }, { text: "2023-12-23 (Protagonist #2)", - link: "https://files.denizk0461.dev/public/projectn5/2023-12-23.zip", + link: "https://files.natconf.dev/public/projectn5/2023-12-23.zip", }, { text: "2024-03-25 (Protagonist #3 with jump animations)", - link: "https://files.denizk0461.dev/public/projectn5/2024-03-25.zip", + link: "https://files.natconf.dev/public/projectn5/2024-03-25.zip", }, { text: "2025-08-16 (Laura era) [same build as the web version]", - link: "https://files.denizk0461.dev/public/projectn5/2025-08-16.zip", + link: "https://files.natconf.dev/public/projectn5/2025-08-16.zip", }, ]; @@ -33,9 +33,9 @@ The good news is that I'm done with all of this! The bachelor's thesis in partic I decided to upload some playable builds of **Project N5**! Now that the website is running on my own server instead of being hosted by GitHub or Codeberg, I have a lot more freedom here. -The game, in its state from 2025-05-16 (before the reboot), is available to play in-browser [right here!](https://apps.denizk0461.dev/projectn5) It's not a terribly great experience, though. Loading times are significantly longer and shader compilation regularly freezes the game for longer than in a locally-saved copy. Some shaders are also not functioning as intended, though this only has a minor visual impact. The game was never optimised to work on the web, after all. +The game, in its state from 2025-05-16 (before the reboot), is available to play in-browser [right here!](https://apps.natconf.dev/projectn5) It's not a terribly great experience, though. Loading times are significantly longer and shader compilation regularly freezes the game for longer than in a locally-saved copy. Some shaders are also not functioning as intended, though this only has a minor visual impact. The game was never optimised to work on the web, after all. -I've also uploaded old builds of the game [here](https://files.denizk0461.dev/public/projectn5). You'll find the following builds, one for each protagonist: +I've also uploaded old builds of the game [here](https://files.natconf.dev/public/projectn5). You'll find the following builds, one for each protagonist: diff --git a/src/routes/projects/projectn5/devlog/feed.xml/+server.ts b/src/routes/projects/projectn5/devlog/feed.xml/+server.ts index 4317367..a8c25be 100644 --- a/src/routes/projects/projectn5/devlog/feed.xml/+server.ts +++ b/src/routes/projects/projectn5/devlog/feed.xml/+server.ts @@ -4,7 +4,7 @@ import { posts } from "../posts"; const xml = () => ` Project N5 Devlog - https://denizk0461.dev/projects/projectn5/devlog/ + https://natconf.dev/projects/projectn5/devlog/ ${getEntries()} `; @@ -16,8 +16,8 @@ function getEntries(): String { <![CDATA[${entry.post.title}]]> - https://denizk0461.dev/projects/projectn5/devlog/${entry.key} - https://denizk0461.dev/projects/projectn5/devlog/${entry.key} + https://natconf.dev/projects/projectn5/devlog/${entry.key} + https://natconf.dev/projects/projectn5/devlog/${entry.key} `) entries.forEach(entry => { diff --git a/src/routes/projects/projects.ts b/src/routes/projects/projects.ts index 98cc17c..2dcfecb 100644 --- a/src/routes/projects/projects.ts +++ b/src/routes/projects/projects.ts @@ -78,11 +78,11 @@ export const games: Project[] = [ }, { text: "Play an old web build (developed until 2025-05-16)", - link: "https://apps.denizk0461.dev/projectn5", + link: "https://apps.natconf.dev/projectn5", }, { text: "Download the old Windows builds", - link: "https://files.denizk0461.dev/public/projectn5", + link: "https://files.natconf.dev/public/projectn5", }, ], status: ProjectStatus.ACTIVE, @@ -102,7 +102,7 @@ export const games: Project[] = [ links: [ { text: "View the latest Magician build", - link: "https://apps.denizk0461.dev/magician", + link: "https://apps.natconf.dev/magician", }, ], status: ProjectStatus.ABANDONED, @@ -139,7 +139,7 @@ export const games: Project[] = [ links: [ { text: "Play Swords & Stuff", - link: "https://apps.denizk0461.dev/swordsnstuff", + link: "https://apps.natconf.dev/swordsnstuff", }, ], status: ProjectStatus.ABANDONED, @@ -159,11 +159,11 @@ export const games: Project[] = [ links: [ { text: "Play TADS 1", - link: "https://apps.denizk0461.dev/tads/1", + link: "https://apps.natconf.dev/tads/1", }, { text: "Play TADS 2", - link: "https://apps.denizk0461.dev/tads/2", + link: "https://apps.natconf.dev/tads/2", }, ], status: ProjectStatus.FINISHED, @@ -189,7 +189,7 @@ export const hardware: Project[] = [ }, { text: "Get the PCB and STL files", - link: "https://files.denizk0461.dev/public/daisyfm/", + link: "https://files.natconf.dev/public/daisyfm/", }, { text: "View the code files on Codeberg", @@ -317,7 +317,7 @@ export const music: Project[] = [ links: [ { text: "Listen & download on my copyparty instance", - link: "https://files.denizk0461.dev/public/my_tracks/Dreamworld/", + link: "https://files.natconf.dev/public/my_tracks/Dreamworld/", }, ], status: ProjectStatus.FINISHED, @@ -337,7 +337,7 @@ export const music: Project[] = [ links: [ { text: "Listen & download on my copyparty instance", - link: "https://files.denizk0461.dev/public/my_tracks/A%20New%20Beginning/", + link: "https://files.natconf.dev/public/my_tracks/A%20New%20Beginning/", }, ], status: ProjectStatus.FINISHED,