Compare commits

...

15 Commits

Author SHA1 Message Date
754347facb fix email
All checks were successful
Build / publish (push) Successful in 49s
2024-10-26 22:33:18 +02:00
df811b3b16 remove club cat url
Some checks are pending
Build / publish (push) Waiting to run
2024-10-26 22:32:49 +02:00
23b175c34c add custom domain email
All checks were successful
Build / publish (push) Successful in 1m7s
2024-09-04 22:48:49 +02:00
51e2ce5a53 add club penguin post
All checks were successful
Build / publish (push) Successful in 1m1s
2024-07-21 04:55:58 +02:00
5cb7741903 add posthog analytics
All checks were successful
Build / publish (push) Successful in 52s
2024-07-14 18:17:08 +02:00
629f465b26 remove a href attributeify
All checks were successful
Build / publish (push) Successful in 50s
2024-07-14 17:51:20 +02:00
7d8d0b5d37 add attributes to a tags
All checks were successful
Build / publish (push) Successful in 47s
2024-07-14 17:03:15 +02:00
a6f22aa3be add reject subs post 2024-07-14 17:03:08 +02:00
5af4e6d4f8 remove husky
All checks were successful
Build / publish (push) Successful in 48s
2024-07-14 16:03:00 +02:00
3a433e6085 remove readme
All checks were successful
Build / publish (push) Successful in 47s
2024-07-14 15:49:04 +02:00
ad9ed10021 fix runner tag
All checks were successful
Build / publish (push) Successful in 48s
2024-07-14 14:59:48 +02:00
1fc2d7240a fix formatting
Some checks failed
Build / publish (push) Has been cancelled
2024-07-14 14:59:13 +02:00
9449b33f30 add docker build ci 2024-07-14 14:56:43 +02:00
bdc4ca01f4 fix compose command 2024-07-14 10:27:04 +02:00
0ed466f0b9 use docker build for deployment 2024-07-14 10:24:28 +02:00
19 changed files with 285 additions and 73 deletions

View File

@@ -0,0 +1,24 @@
name: Build
run-name: ${{ gitea.actor }} is running ${{ github.workflow }} on ${{ github.repository }}
on: [ push ]
jobs:
publish:
runs-on: ubuntu-latest
if: gitea.ref == 'refs/heads/main'
steps:
- uses: https://github.com/actions/checkout@v4
- name: Set up Docker Buildx
uses: https://github.com/docker/setup-buildx-action@v3
with:
config-inline: |
[registry."172.21.0.1:5000"]
http = true
insecure = true
- name: Build and push Docker image
uses: https://github.com/docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: true
tags: "172.21.0.1:5000/website"

View File

@@ -1 +0,0 @@
npm run deploy

View File

@@ -1,47 +0,0 @@
# Astro Starter Kit: Minimal
```sh
npm create astro@latest -- --template minimal
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/minimal)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/minimal)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/minimal/devcontainer.json)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure
Inside of your Astro project, you'll see the following folders and files:
```text
/
├── public/
├── src/
│ └── pages/
│ └── index.astro
└── package.json
```
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
Any static assets, like images, can be placed in the `public/` directory.
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).

View File

@@ -1 +0,0 @@
npm run build && scp -r dist/* azura@azura:/home/azura/server/static

18
package-lock.json generated
View File

@@ -22,8 +22,7 @@
"@iconify-json/logos": "^1.1.42", "@iconify-json/logos": "^1.1.42",
"@iconify-json/mdi": "^1.1.64", "@iconify-json/mdi": "^1.1.64",
"@iconify-json/skill-icons": "^1.1.8", "@iconify-json/skill-icons": "^1.1.8",
"@iconify-json/vscode-icons": "^1.1.33", "@iconify-json/vscode-icons": "^1.1.33"
"husky": "^9.0.11"
} }
}, },
"node_modules/@alloc/quick-lru": { "node_modules/@alloc/quick-lru": {
@@ -3533,21 +3532,6 @@
"node": ">=16.17.0" "node": ">=16.17.0"
} }
}, },
"node_modules/husky": {
"version": "9.0.11",
"resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz",
"integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==",
"dev": true,
"bin": {
"husky": "bin.mjs"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/typicode"
}
},
"node_modules/ieee754": { "node_modules/ieee754": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",

View File

@@ -7,9 +7,7 @@
"start": "astro dev", "start": "astro dev",
"build": "astro check && astro build", "build": "astro check && astro build",
"preview": "astro preview", "preview": "astro preview",
"astro": "astro", "astro": "astro"
"deploy": "sh deploy.sh",
"prepare": "husky"
}, },
"dependencies": { "dependencies": {
"@astrojs/check": "^0.5.9", "@astrojs/check": "^0.5.9",
@@ -26,7 +24,6 @@
"@iconify-json/logos": "^1.1.42", "@iconify-json/logos": "^1.1.42",
"@iconify-json/mdi": "^1.1.64", "@iconify-json/mdi": "^1.1.64",
"@iconify-json/skill-icons": "^1.1.8", "@iconify-json/skill-icons": "^1.1.8",
"@iconify-json/vscode-icons": "^1.1.33", "@iconify-json/vscode-icons": "^1.1.33"
"husky": "^9.0.11"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
public/blog/club-p/demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
public/blog/subs/chains.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,56 @@
---
---
<script is:inline>
!(function (t, e) {
var o, n, p, r;
e.__SV ||
((window.posthog = e),
(e._i = []),
(e.init = function (i, s, a) {
function g(t, e) {
var o = e.split(".");
2 == o.length && ((t = t[o[0]]), (e = o[1])),
(t[e] = function () {
t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
});
}
((p = t.createElement("script")).type = "text/javascript"),
(p.async = !0),
(p.src = s.api_host + "/static/array.js"),
(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
p,
r
);
var u = e;
for (
void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
u.people = u.people || [],
u.toString = function (t) {
var e = "posthog";
return (
"posthog" !== a && (e += "." + a), t || (e += " (stub)"), e
);
},
u.people.toString = function () {
return u.toString(1) + ".people (stub)";
},
o =
"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys getNextSurveyStep onSessionId setPersonProperties".split(
" "
),
n = 0;
n < o.length;
n++
)
g(u, o[n]);
e._i.push([i, s, a]);
}),
(e.__SV = 1));
})(document, window.posthog || []);
posthog.init("phc_LaGA9fvYGcEMPtMiJRIAwFsTMyaZaQhtA578GMvT7L7", {
api_host: "https://eu.i.posthog.com",
person_profiles: "identified_only",
});
</script>

View File

@@ -1,5 +1,7 @@
--- ---
import { SEO } from "astro-seo"; import { SEO } from "astro-seo";
import Posthog from "../components/Posthog.astro";
const { frontmatter } = Astro.props; const { frontmatter } = Astro.props;
import "./MarkdownLayout.css"; import "./MarkdownLayout.css";
--- ---
@@ -41,5 +43,6 @@ import "./MarkdownLayout.css";
<footer> <footer>
<p class="text-secondary text-center">&copy; 2024 Zvonimir Rudinski</p> <p class="text-secondary text-center">&copy; 2024 Zvonimir Rudinski</p>
</footer> </footer>
<Posthog />
</body> </body>
</html> </html>

View File

@@ -17,3 +17,15 @@
#content em { #content em {
@apply italic text-gray-300; @apply italic text-gray-300;
} }
#content a {
@apply text-secondary underline;
}
#content blockquote {
@apply bg-gray-800 text-gray-300 border-l-4 border-secondary p-4 my-4;
}
#content cite {
@apply text-secondary;
}

View File

@@ -1,6 +1,7 @@
--- ---
import { SEO } from "astro-seo"; import { SEO } from "astro-seo";
import { format } from "date-fns"; import { format } from "date-fns";
import Posthog from "../../components/Posthog.astro";
const posts = await Astro.glob("./posts/*.md"); const posts = await Astro.glob("./posts/*.md");
@@ -68,5 +69,6 @@ posts.sort((a, b) => {
<footer class="mt-12"> <footer class="mt-12">
<p class="text-secondary text-center">&copy; 2024 Zvonimir Rudinski</p> <p class="text-secondary text-center">&copy; 2024 Zvonimir Rudinski</p>
</footer> </footer>
<Posthog />
</body> </body>
</html> </html>

View File

@@ -0,0 +1,69 @@
---
layout: ../../../layouts/MarkdownLayout.astro
title: 'where are you, club penguin?'
pubDate: 2024-07-21
description: 'A nostalgic piece about Club Penguin, a game that was a big part of my childhood. Also, a mini announcement at the end.'
---
<blockquote>
I honestly, with all my heart, think that Zvonimir just got stuck in 2013<br />
and never acknowledged the fact that he's not 13 anymore.
</blockquote>
<cite>~ A friend of mine</cite>
What is this post about? Well, it's about a game that was a big part of my childhood, and probably the childhood of many others as well.
The game ~is~ was called Club Penguin.
![Club Penguin](/blog/club-p/banner.webp)
If you do not remember Club Penguin, chances are you were not a child in the 2000s. <small>(you're either too old or too young)</small>
Club Penguin was a virtual world where you could create your own penguin, decorate your igloo, play games, and chat with other players.
The games ranged from anything like sled racing to card games, and they were all fun in their own way <small>(The Card-Jitsu was my favorite)</small>.
You could earn coins by playing games, and you could use those coins to buy clothes, furniture, and other items for your penguin.
The only downside was that you had to be a member to access all the features, but even without a membership, the game was still fun.
I could still buy an item or two for my penguin, and I could still play most of the games. <small>(There was even a complete quest line about being a secret agent!)</small>
It was a game that was simple, yet fun, and it was a game that I spent countless hours playing while blasting my favorite artists!
If you're wondering, my favorite artists were (and still are) Avril Lavigne, Green Day, Blink-182 and Nirvana. (<small>Yes, I was an edgy kid</small>)
Keep in mind, this was before I discovered Pink Floyd, which I consider the greatest band of all time. (<small>Yes, I'm still an edgy kid</small>)
# Unfortunately,
Club Penguin was shut down in 2017, and it was replaced by a mobile version called Club Penguin Island. But it was not the same.
The original Club Penguin was the best, and nothing can replace it.
Oh, and also the mobile version was shut down in 2018, so there's that.
![Dojo](/blog/club-p/dojo.webp)
## Now, where are you, Club Penguin?
I know that the original feeling might never come back, but there are some private servers that are trying to bring back the game.
I won't mention any of them here, but if you're interested, you can find them with a simple Google search.
Since I'm talking about Club Penguin, I might as well mention that I'm working on a small project related to the game.
## Well, kind of.
The project is not a game yet, and it's VERY lacking in features, but it's a start.
I cannot overstate how much I love Club Penguin, and I wanted to create something that would bring back some of the nostalgia.
So, I started creating... *(drum roll...)*
# Club Cat... *(crickets...)*
I know, I know, the name is a blatant rip-off of Club Penguin, but I couldn't think of anything better <small>(for now)</small>.
![Project](/blog/club-p/demo.png)
The project if we can even call it that, is a simple chat room with cats instead of penguins.
Nothing is animated, nor there is any multiplayer for that matter, but it's a start.
You can click around the canvas and talk to yourself, but that's about it.
I'm planning to add more features in the future, but I'm not sure when that will happen, as I have other work to tend to as well.

View File

@@ -14,6 +14,6 @@ If you don't like the content, remember that you can always close the tab and go
At some point I'd also like to add a comments section to the posts, but I'm too lazy to do that right now. <small>(I'm sorry)</small> At some point I'd also like to add a comments section to the posts, but I'm too lazy to do that right now. <small>(I'm sorry)</small>
I hope you enjoy the content I post here, and if you have any suggestions or feedback, feel free to contact me! <small>(zvonimir@mailfence.com)</small> I hope you enjoy the content I post here, and if you have any suggestions or feedback, feel free to contact me! <small>(zvonimir@zvonimir.xyz)</small>
<small>PS: The website is not hosted on GitHub Pages anymore :)</small> <small>PS: The website is not hosted on GitHub Pages anymore :)</small>

View File

@@ -0,0 +1,110 @@
---
layout: ../../../layouts/MarkdownLayout.astro
title: 'reject subscription services, embrace freedom'
pubDate: 2024-07-14
description: 'An insight into services I use to ditch Spotify and Netflix'
---
Do you like content? I'm sure you do!
But do you like paying every month for it? I'm sure you don't! <small>(Neither do I.)</small>
## Story time
I remember when I was a kid, my mom would take me to a kiosk after my dentist appointments, and I would get to pick a DVD to bring home.
Sometimes I would like the cartoon, sometimes I wouldn't. But it was always a surprise, and I loved that.
As the famous saying goes, "The cartoon was..."
<iframe width="560" height="315" src="https://www.youtube.com/embed/QJHUbtR0yI8?si=VduMtIFJom_PdKNa" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
I didn't have a computer back then, so I would watch them on a DVD player I had hooked up to my TV.
<small>(Thank you mom and dad for paying out of your asses for that!)</small>
## The Problem
Nowadays, we have services like Netflix, Spotify, and Amazon Prime Video. They offer a wide range of content, but they come at a cost.
First and foremost, you don't even own the content! You're just renting it for a monthly fee.
What happens if Netflix decides to randomly remove your favorite show/movie?
What if Spotify decides to up their prices?
You're effectively a hostage and have no say in the matter.
At least with DVDs and other physical media, I don't have to worry about that. I paid for it, and it's mine.
Also, according to Netflix, I am not allowed to share my account with my friends. Something I don't have to worry about with physical media.
<small>(I'm still waiting for my friend to return my copy of "David, el Gnomo")</small>
## The Solution
So, what can you do?
Well, you can always use the DVD player you have lying around, but physical media has its own set of problems.
You have to store them, they can get scratched, and they can get lost.
So what do we do?
# We embrace freedom!
![We break these chains!](/blog/subs/chains.jpg)
Now, I'm not saying that you should pirate content. That's illegal and wrong.
I admit that I have done it in the past, when I was a kid, and my parents didn't quite understand the concept of "dishing out money for something that's free on the internet".
But I have since learned the error of my ways and have repented.
I'll share with you a list of free alternatives I use myself but feel free to experiment and find what works best for you.
## Movies, TV Shows and Music
For movies, TV shows, and music, I use [Jellyfin](https://jellyfin.org/).
It's free, open-source, has a Docker image, and it's pretty easy to set up.
It has a web interface, Android, iOS and even Tizen apps <small>(though you have to compile and deploy the Tizen app yourself)</small>.
I won't delve into the details of how to set it up, but there are plenty of guides out there that can help you.
I have a home server that I use to host it <small>(among other things)</small>, and I can access it from anywhere in the world.
The only downside is that you have to take care of setting it up and maintaining it yourself, but at least I don't have to worry about my favorite show being removed.
## Books
Now, I'll admit that I don't read as much as I did in the past, but when I do, I just open the PDF in my browser.
I know, I know, you were probably expecting me to say "I use [Calibre](https://calibre-ebook.com/)" or something like that, but I don't.
I'm a simple man, and I like to keep things simple.
Hell, even this blog post is just a Markdown file!
If I have a physical book lying around, I just take it to a photocopy store and have them send me a PDF when they're done.
Plus, there are plenty of free PDFs out there. Some of these have physical copies, you can buy if you want to support the author.
Lately, I've been reading [Hypermedia Systems](https://hypermedia.systems/), and I have to say, it's a pretty good read.
## Extra: Git
Yeah, yeah, I know. Git is not really a content service, but it's a tool that I use every day.
I know that GitHub, GitLab, and Bitbucket are free, but I still like to control my own repositories.
While I do use all three of them at work, I have a [Gitea](https://gitea.io/) instance running on my server, and I use it for all my projects.
It's free, open-source and it even supports CI/CD pipelines, which is pretty cool.
Like with [Jellyfin](https://jellyfin.org/), I have to take care of setting it up and maintaining it, but at least I don't have to worry about my code being removed or locked by GitHub, because some idiot used AI to find a bug, that's not even there.
## Conclusion
In the end, you have to decide what works best for you.
If you like the convenience of Netflix, Spotify, and Amazon Prime Video, then by all means, keep using them.
But if you're like me and you want to break free from the chains of subscription services, then I hope this list helps you.

View File

@@ -3,6 +3,7 @@ import { SEO } from "astro-seo";
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
import Section from "../components/Section.astro"; import Section from "../components/Section.astro";
import { projects } from "../projects"; import { projects } from "../projects";
import Posthog from "../components/Posthog.astro";
--- ---
<html lang="en"> <html lang="en">
@@ -79,7 +80,7 @@ import { projects } from "../projects";
<div class="flex gap-4 mt-4"> <div class="flex gap-4 mt-4">
<abbr title="Send me an email"> <abbr title="Send me an email">
<a <a
href="mailto:zvonimir@mailfence.com" href="mailto:zvonimir@zvonimir.xyz"
class="opacity-50 hover:opacity-100 hover:text-secondary" class="opacity-50 hover:opacity-100 hover:text-secondary"
> >
<Icon name="mdi:email" size={32} /> <Icon name="mdi:email" size={32} />
@@ -127,5 +128,6 @@ import { projects } from "../projects";
window.addEventListener("DOMContentLoaded", onMount); window.addEventListener("DOMContentLoaded", onMount);
</script> </script>
<Posthog />
</body> </body>
</html> </html>

View File

@@ -5,6 +5,7 @@ import { SEO } from "astro-seo";
import { getProject, projects } from "../../projects"; import { getProject, projects } from "../../projects";
import Section from "../../components/Section.astro"; import Section from "../../components/Section.astro";
import { Icon } from "astro-icon/components"; import { Icon } from "astro-icon/components";
import Posthog from "../../components/Posthog.astro";
export const getStaticPaths = (() => { export const getStaticPaths = (() => {
return projects.map(({ id }) => ({ return projects.map(({ id }) => ({
@@ -110,5 +111,6 @@ const image = (await import(`../../assets/${project.id}.png`)).default;
<footer class="mt-12"> <footer class="mt-12">
<p class="text-secondary text-center">&copy; 2024 Zvonimir Rudinski</p> <p class="text-secondary text-center">&copy; 2024 Zvonimir Rudinski</p>
</footer> </footer>
<Posthog />
</body> </body>
</html> </html>