From be8c61916ceae4e87fcdd89288a68f12805a17d3 Mon Sep 17 00:00:00 2001 From: ~purplebored Date: Sat, 24 May 2025 17:23:40 +0200 Subject: [PATCH] Big update, finished the blog, added the feeds --- .gitignore | 1 - TODO.md | 6 -- assets/errors/401.xhtml | 21 +++++ assets/errors/403.xhtml | 21 +++++ assets/errors/404.xhtml | 21 +++++ assets/errors/500.xhtml | 21 +++++ assets/errors/502.xhtml | 21 +++++ assets/errors/favicon.png | Bin 0 -> 3309 bytes assets/errors/hi.txt | 3 + assets/images/buttons/valid-atom.png | Bin 0 -> 1114 bytes assets/images/buttons/valid-rss.png | Bin 0 -> 3100 bytes blog/blog.xhtml | 1 + .../my-review-of-the-minecraft-movie.xhtml | 3 + .../2025/snuff-review-1-red-bull-snuff.xhtml | 3 + .../snuff-review-2-ozona-r-type-snuff.xhtml | 3 + blog/posts/template.xhtml | 1 + feed_gen.py | 84 ++++++++++++++++++ feeds/feed.atom | 83 +++++++++++++++++ feeds/feed.rss | 83 +++++++++++++++++ index.xhtml | 3 +- pages/buttons.xhtml | 5 +- pages/contact.xhtml | 6 +- pages/feeds.xhtml | 41 +++++++++ pages/font.xhtml | 1 + pages/guides.xhtml | 1 + pages/mirrors.xhtml | 1 + pages/snuff.xhtml | 5 +- purpleblog.rss | 0 28 files changed, 423 insertions(+), 16 deletions(-) delete mode 100644 TODO.md create mode 100644 assets/errors/401.xhtml create mode 100644 assets/errors/403.xhtml create mode 100644 assets/errors/404.xhtml create mode 100644 assets/errors/500.xhtml create mode 100644 assets/errors/502.xhtml create mode 100644 assets/errors/favicon.png create mode 100644 assets/errors/hi.txt create mode 100644 assets/images/buttons/valid-atom.png create mode 100644 assets/images/buttons/valid-rss.png create mode 100644 feed_gen.py create mode 100644 feeds/feed.atom create mode 100644 feeds/feed.rss create mode 100644 pages/feeds.xhtml delete mode 100644 purpleblog.rss diff --git a/.gitignore b/.gitignore index db7f707..e28eb32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ files guides/xmpp - diff --git a/TODO.md b/TODO.md deleted file mode 100644 index ebcc967..0000000 --- a/TODO.md +++ /dev/null @@ -1,6 +0,0 @@ -# BLOG REWRITE -- [x] Write a blog.xhtml page. -- [ ] Finsih converting all the articles from htmly to plain xhtml. -- [ ] Do a Atom feed. -- [ ] Do a RSS feed. -- [ ] Check the blog posts for any big gramaticl or ortogprahic mistakes. diff --git a/assets/errors/401.xhtml b/assets/errors/401.xhtml new file mode 100644 index 0000000..82c7dbf --- /dev/null +++ b/assets/errors/401.xhtml @@ -0,0 +1,21 @@ + + + + 401 + + + + +
+ _ _ ___ _ +| || | / _ \/ | +| || |_| | | | | +|__ _| |_| | | + |_| \___/|_| + +401 - Unauthorized +Go home! +
+ + diff --git a/assets/errors/403.xhtml b/assets/errors/403.xhtml new file mode 100644 index 0000000..58e5426 --- /dev/null +++ b/assets/errors/403.xhtml @@ -0,0 +1,21 @@ + + + + 403 + + + + +
+ _ _ ___ _____ +| || | / _ \___ / +| || |_| | | ||_ \ +|__ _| |_| |__) | + |_| \___/____/ + +403 - Forbidden +Go home! +
+ + diff --git a/assets/errors/404.xhtml b/assets/errors/404.xhtml new file mode 100644 index 0000000..5f33af9 --- /dev/null +++ b/assets/errors/404.xhtml @@ -0,0 +1,21 @@ + + + + 404 + + + + +
+_ _ ___ _ _ +| || | / _ \| || | +| || |_| | | | || |_ +|__ _| |_| |__ _| + |_| \___/ |_| + +404 - Not Found +Go home! +
+ + diff --git a/assets/errors/500.xhtml b/assets/errors/500.xhtml new file mode 100644 index 0000000..c192f44 --- /dev/null +++ b/assets/errors/500.xhtml @@ -0,0 +1,21 @@ + + + + 500 + + + + +
+ _ _ ___ _____ +| || | / _ \___ / +| || |_| | | ||_ \ +|__ _| |_| |__) | + |_| \___/____/ + +500 - Internal Server Error +Go home! +
+ + diff --git a/assets/errors/502.xhtml b/assets/errors/502.xhtml new file mode 100644 index 0000000..db1e6af --- /dev/null +++ b/assets/errors/502.xhtml @@ -0,0 +1,21 @@ + + + + 502 + + + + +
+____ ___ ____ +| ___| / _ \___ \ +|___ \| | | |__) | + ___) | |_| / __/ +|____/ \___/_____| + +502 - Bad gateway +Go home! +
+ + diff --git a/assets/errors/favicon.png b/assets/errors/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..35efa69b7e9ba9a9a2dd6e9f2364cea82c21fb02 GIT binary patch literal 3309 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 literal 0 HcmV?d00001 diff --git a/assets/errors/hi.txt b/assets/errors/hi.txt new file mode 100644 index 0000000..37909ae --- /dev/null +++ b/assets/errors/hi.txt @@ -0,0 +1,3 @@ +uhh hi! as you can see my error thingy is far from being done. This is just a temporay file to let you know if you for whatever reason are here. + +have a good day/night \ No newline at end of file diff --git a/assets/images/buttons/valid-atom.png b/assets/images/buttons/valid-atom.png new file mode 100644 index 0000000000000000000000000000000000000000..11a853b0ecf225587f0a86603cca44f3884f3032 GIT binary patch literal 1114 zcmV-g1f~0lP)Sw@7dSb z>FDV0?d`(A!1MF-t;pzJXmg69yUEet&eY@b^!noG^5*OI?eX~B;_vqO`~3X;h0g^m z0009;Nkl41mR3JfiaWAX7R@)5~Whcq|zpKe?F&btpsp*J*4}cS% z&_9&~Zx4SZ9S^%5>g|IgT1q?Zb@8xQ8S3rSEm}H%3w~8g)H?-xwDgnTNk1cr#*r*P zk0f#3`H-VnmgVV4s^ItFghq$p*bevTF?6ALunu7aHH3c-IQw?z|Mo3g#6Mr3&d202(pJ6Ts3n+W;)h&^6ssG+RX#`^x=D&r+`j$5gNx z4T(XND{PrW>k|bkA>%$FrbdW`sxRDS`RuyVZYB z<9T>-YcrM^^EUzMYno=76+AWpj0tYQ#Z5Q%JmEIr901da;R6$5pik@x3^G|t6t~Q&s z&mhX;U&~pxY)w^?3_Meubls6UP1p}C0L)+ivRNr7qBvvUgCpPs81|44xCx(v*J{8k zZm){u0@LzayL8X}1aPB)gbC{^Qq1t$BC%8w=>ln(BdKV z+};iNhMrqOZzEYp^&~q9qcl(9qq`v>pH!R6@ grOK_tFWtY>KTI8W=EWzDm;e9(07*qoM6N<$g70fA!2kdN literal 0 HcmV?d00001 diff --git a/assets/images/buttons/valid-rss.png b/assets/images/buttons/valid-rss.png new file mode 100644 index 0000000000000000000000000000000000000000..c64445aa0a354f69a1c5c2252b1cfa21067db0f8 GIT binary patch literal 3100 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 qFContact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/blog/posts/2025/my-review-of-the-minecraft-movie.xhtml b/blog/posts/2025/my-review-of-the-minecraft-movie.xhtml index 369829e..d051be2 100644 --- a/blog/posts/2025/my-review-of-the-minecraft-movie.xhtml +++ b/blog/posts/2025/my-review-of-the-minecraft-movie.xhtml @@ -11,6 +11,8 @@ + + =Purpleblog= @@ -38,6 +40,7 @@ Solid 6/10 in my opinion could be worse. Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtml b/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtml index 2b61e7c..7726bad 100644 --- a/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtml +++ b/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtml @@ -11,6 +11,8 @@ + + =Purpleblog= @@ -36,6 +38,7 @@ To summarize: I believe that Red bull is over all good but I also believe that i Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtml b/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtml index 583ef0b..66b3f3b 100644 --- a/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtml +++ b/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtml @@ -11,6 +11,8 @@ + + =Purpleblog= @@ -40,6 +42,7 @@ And here comes the hard part. Giving it a rating. It's really hard since the tas Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/blog/posts/template.xhtml b/blog/posts/template.xhtml index 57079a5..8737494 100644 --- a/blog/posts/template.xhtml +++ b/blog/posts/template.xhtml @@ -32,6 +32,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/feed_gen.py b/feed_gen.py new file mode 100644 index 0000000..3ba7e43 --- /dev/null +++ b/feed_gen.py @@ -0,0 +1,84 @@ +import os +import datetime +from bs4 import BeautifulSoup +from feedgen.feed import FeedGenerator +from pytz import UTC # Ensures timezone-aware datetime + +# Configuration +BASE_URL = 'https://purplebored.pl' +POSTS_DIR = './blog/posts' +FEED_OUTPUT_DIR = './feeds' +AUTHOR_NAME = 'Purplebored' +AUTHOR_EMAIL = 'purplebored@posteo.com' + +def parse_xhtml_post(filepath): + with open(filepath, 'r', encoding='utf-8') as f: + soup = BeautifulSoup(f, 'lxml') + + # Try + og_title = soup.find('meta', attrs={'name': 'og:title'}) + if og_title and og_title.get('content'): + title = og_title['content'] + else: + # Fallback to tag + title_tag = soup.find('title') + title = title_tag.get_text() if title_tag else 'Untitled' + + # Parse <meta name="date" content="YYYY-MM-DD"> + date_meta = soup.find('meta', {'name': 'date'}) + if date_meta and date_meta.get('content'): + pub_date = datetime.datetime.strptime(date_meta['content'], '%Y-%m-%d') + else: + pub_date = datetime.datetime.fromtimestamp(os.path.getmtime(filepath)) + + pub_date = pub_date.replace(tzinfo=UTC) + + # Extract article or body content + content = soup.find('article') or soup.find('body') + + # Generate relative URL + rel_path = os.path.relpath(filepath, POSTS_DIR) + url = f'{BASE_URL}/blog/posts/{rel_path}'.replace('\\', '/') + + return { + 'title': title, + 'url': url, + 'date': pub_date, + 'content': str(content) + } + +def generate_feeds(posts): + fg = FeedGenerator() + fg.id(BASE_URL) + fg.title('Purplebored Blog') + fg.author({'name': AUTHOR_NAME, 'email': AUTHOR_EMAIL}) + fg.link(href=BASE_URL, rel='alternate') + fg.language('en') + fg.description('A blog about snuff reviews and other thoughts.') + + for post in sorted(posts, key=lambda x: x['date'], reverse=True): + fe = fg.add_entry() + fe.id(post['url']) + fe.title(post['title']) + fe.link(href=post['url']) + fe.published(post['date']) + fe.content(post['content'], type='xhtml') + + os.makedirs(FEED_OUTPUT_DIR, exist_ok=True) + fg.rss_file(os.path.join(FEED_OUTPUT_DIR, 'feed.rss')) + fg.atom_file(os.path.join(FEED_OUTPUT_DIR, 'feed.atom')) + +def main(): + posts = [] + for root, dirs, files in os.walk(POSTS_DIR): + for file in files: + if file.endswith('.xhtml'): + filepath = os.path.join(root, file) + post_data = parse_xhtml_post(filepath) + posts.append(post_data) + + generate_feeds(posts) + print(f'✅ Generated {len(posts)} posts in RSS and Atom feeds.') + +if __name__ == '__main__': + main() diff --git a/feeds/feed.atom b/feeds/feed.atom new file mode 100644 index 0000000..316282c --- /dev/null +++ b/feeds/feed.atom @@ -0,0 +1,83 @@ +<?xml version='1.0' encoding='UTF-8'?> +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><id>https://purplebored.pl</id><title>Purplebored Blog2025-05-24T15:11:17.852330+00:00Purpleboredpurplebored@posteo.compython-feedgenA blog about snuff reviews and other thoughts.https://purplebored.pl/blog/posts/2025/my-review-of-the-minecraft-movie.xhtmlMy review of the Minecraft Movie2025-05-24T15:11:17.852393+00:00
+
+

=== My Review of the "Minecraft Movie" ===

+

+Okay so I went to the cinema to watch the Minecraft movie. Gonna be honest I am terrible at writing reviews but I gonna try my best here. +

+Gonna start off by saying at the end of the day it's a kids comedy. Like if y'all want to watch it don't expect a movie with a good story and mature humor you won't get it from there but even after this I am actually happily surprised. The CGI looked way worse in the trailers, and even I got a smirk on my face from a few of the jokes. The soundtrack was also decent, and somehow the casting was also pretty alright. The story over all was sadly really predictable and the entire plot was also meh. Like I don't know what else to say it was just alright I went and saw it with my younger brother and his friend since I needed to supervise them and they liked it. The children in the cinema also liked it and were laughing at the jokes, if y'all got a young brother and care enough to go to the cinema then yeah I would say it's worth it to see, but if you want to see it by yourself then I don't think it's worth it. So overall I do not regret the money spent the movie was actually fully fine. If they actually invested into the story a bit more I would actually say it's would be pretty amazing I don't know what else to say it was a decent movie, worth it to watch with a younger sibling but not worth it to watch by yourself. +

+Also funny story I overheard some kids talking about how they liked it but they wished it was a animation and not live action. So yeah even the kids believe it shouldn't have been live action LMFAO. +
+Solid 6/10 in my opinion could be worse. +

+
+

Back to the main page

+
+ +
2025-04-07T00:00:00+00:00
https://purplebored.pl/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtmlRed Bull snuff review2025-05-24T15:11:17.852387+00:00
+
+

=== Snuff review 1. Red bull snuff ===

+

+So the Red bull snuff is one of the most popular snuffs here in Poland. It's a also a very popular first snuff for many of people. For me it was the second snuff I ever tried and here is my small review after using it for around 3 weeks: +
+Going to start of with saying it's very strong and has a nice minty eucalyptus taste to it. Personally I am really mixed about the taste I don't think it's bad but I do think it's overrated. I saw a lot of people praising it for being the best snuff and the best snuff for beginners which I totally don't agree with. It's in my opinion too strong to beginners and there are better option. Price wise I would say it's in the mid range. I won't be telling the price in my reviews since that changes a lot with the taxes on tobacco changing a lot of the time and they differ a lot by the country. The box it comes in is a average generic Pöschl Tabak box which in my opinion sucks. The boxes tend to open in the pockets sometimes and the clips tend to break off which is really annoying. The aroma at first is amazing but it tends to go away after a while since the box it comes in isn't really "tight" I don't know how to explain it. The snuff last for quite a long while I had my 10g pack for around 3 or maybe even 4 weeks by this point. It also really works well if you have a runny nose since it clears it real good. +

+To summarize: I believe that Red bull is over all good but I also believe that it is way too overrated and very much not a good snuff for beginners. Overall in my opinion it's a big and strong 8/10. Good but not perfect. If you been taking snuff for a while already and never tried it you should try it BUT if you never tried snuff then I would choose a less stronger snuff like maybe OZONA stuff or GLETSCHER PRISE. +

+
+

Back to the main page

+
+ +
2025-04-08T00:00:00+00:00
https://purplebored.pl/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtmlOzona R-Type snuff review2025-05-24T15:11:17.852377+00:00
+
+

=== Snuff 2 review - Ozona R-type ===

+

+So the time finally came. I finished my 5grams of Ozona R-type. This was honestly a really hard snuff to review I have very mixed feelings about this. Well I am going to probably start off by saying it's very weak like probably the weakest one I tried so far. The taste is also pretty chemical but that doesn't mean it's bad it's still pretty good. I also gonna explain what the new "types" mean. Before they were called for example: Ozona Cherry, Raspberry, Orange, etc etc. But now they are called the first letter of the flavor. So Ozona R-type is Ozona Raspberry. It's a stupid and annoying change which I don't really like but you get used to it. +

+A comparison between the old and new ozona r-type 5 gram packeging +

+Above you can see the differences between the old and new packaging +

+So the flavor is a pretty decent chemical raspberry. It also has some mint in it. Very very good for beginners. I gave it to some of my friends which don't take snuff and they quite liked it (Unlike Red Bull which was somewhat too strong for them.) I personally found it mid since I like stronger snuffs. The packaging is pretty neat so I gonna talk about it. It's a 5gram metal round thingy which you rotate until it opens a hole. It kept the scent for quite a long time, it was also very convenient to use AND easy to open if you want to add a different snuff to it. Honestly I like this type of packaging most. It's nice, small, good, and simply convenient. Honestly I don't know what else to say if you are a beginner searching for some good and weak snuff then you should give Ozona R-Type snuff a shot. But if you are already a snuff user and like stronger snuffs then I would avoid it. +

+And here comes the hard part. Giving it a rating. It's really hard since the taste is good but it's weak which makes it good for beginners but pretty mediocre for people who already are taking snuff and are used to stronger ones. I think it's a strong 6/10 for people who already take snuff and like something stronger and a BIG STRONG 8/10 for new snuff takers. +

+
+

Back to the main page

+
+ +
2025-05-14T00:00:00+00:00
https://purplebored.pl/blog/posts/template.xhtml BLOG TITLE 2025-05-24T15:11:17.852361+00:00
+
+

=== BLOG TITLE ===

+

+

+
+

Back to the main page

+
+ +
2025-05-15T18:32:46.352500+00:00
\ No newline at end of file diff --git a/feeds/feed.rss b/feeds/feed.rss new file mode 100644 index 0000000..d4629cd --- /dev/null +++ b/feeds/feed.rss @@ -0,0 +1,83 @@ + +Purplebored Bloghttps://purplebored.plA blog about snuff reviews and other thoughts.http://www.rssboard.org/rss-specificationpython-feedgenenSat, 24 May 2025 15:11:17 +0000My review of the Minecraft Moviehttps://purplebored.pl/blog/posts/2025/my-review-of-the-minecraft-movie.xhtml<body> +<div class="content2" style="text-align: center;"> +<h1>=== My Review of the "Minecraft Movie" ===</h1> +<p> +Okay so I went to the cinema to watch the Minecraft movie. Gonna be honest I am terrible at writing reviews but I gonna try my best here. +<br/> <br/> +Gonna start off by saying at the end of the day it's a kids comedy. Like if y'all want to watch it don't expect a movie with a good story and mature humor you won't get it from there but even after this I am actually happily surprised. The CGI looked way worse in the trailers, and even I got a smirk on my face from a few of the jokes. The soundtrack was also decent, and somehow the casting was also pretty alright. The story over all was sadly really predictable and the entire plot was also meh. Like I don't know what else to say it was just alright I went and saw it with my younger brother and his friend since I needed to supervise them and they liked it. The children in the cinema also liked it and were laughing at the jokes, if y'all got a young brother and care enough to go to the cinema then yeah I would say it's worth it to see, but if you want to see it by yourself then I don't think it's worth it. So overall I do not regret the money spent the movie was actually fully fine. If they actually invested into the story a bit more I would actually say it's would be pretty amazing I don't know what else to say it was a decent movie, worth it to watch with a younger sibling but not worth it to watch by yourself. +<br/> <br/> +Also funny story I overheard some kids talking about how they liked it but they wished it was a animation and not live action. So yeah even the kids believe it shouldn't have been live action LMFAO. +<br/> +Solid 6/10 in my opinion could be worse. + </p> +<br/> +<h3><a href="/blog/blog.xhtml">Back to the main page</a></h3> +</div> +<div class="footer"> + Purplebored © 2023-2025 | + <a href="https://git.ari.lt/purplebored/My-Personal-Website">Source code</a> | + <a href="/pages/contact.xhtml">Contact Me</a> | + <a href="/pages/mirrors.xhtml">Tor, Ygg &amp; Mirrors</a> | + <a href="/pages/font.xhtml">Font</a> | + </div> +</body>https://purplebored.pl/blog/posts/2025/my-review-of-the-minecraft-movie.xhtmlMon, 07 Apr 2025 00:00:00 +0000Red Bull snuff reviewhttps://purplebored.pl/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtml<body> +<div class="content2" style="text-align: center;"> +<h1>=== Snuff review 1. Red bull snuff ===</h1> +<p> +So the Red bull snuff is one of the most popular snuffs here in Poland. It's a also a very popular first snuff for many of people. For me it was the second snuff I ever tried and here is my small review after using it for around 3 weeks: +<br/> +Going to start of with saying it's very strong and has a nice minty eucalyptus taste to it. Personally I am really mixed about the taste I don't think it's bad but I do think it's overrated. I saw a lot of people praising it for being the best snuff and the best snuff for beginners which I totally don't agree with. It's in my opinion too strong to beginners and there are better option. Price wise I would say it's in the mid range. I won't be telling the price in my reviews since that changes a lot with the taxes on tobacco changing a lot of the time and they differ a lot by the country. The box it comes in is a average generic Pöschl Tabak box which in my opinion sucks. The boxes tend to open in the pockets sometimes and the clips tend to break off which is really annoying. The aroma at first is amazing but it tends to go away after a while since the box it comes in isn't really "tight" I don't know how to explain it. The snuff last for quite a long while I had my 10g pack for around 3 or maybe even 4 weeks by this point. It also really works well if you have a runny nose since it clears it real good. +<br/> <br/> +To summarize: I believe that Red bull is over all good but I also believe that it is way too overrated and very much not a good snuff for beginners. Overall in my opinion it's a big and strong 8/10. Good but not perfect. If you been taking snuff for a while already and never tried it you should try it BUT if you never tried snuff then I would choose a less stronger snuff like maybe OZONA stuff or GLETSCHER PRISE. + </p> +<br/> +<h3><a href="/blog/blog.xhtml">Back to the main page</a></h3> +</div> +<div class="footer"> + Purplebored © 2023-2025 | + <a href="https://git.ari.lt/purplebored/My-Personal-Website">Source code</a> | + <a href="/pages/contact.xhtml">Contact Me</a> | + <a href="/pages/mirrors.xhtml">Tor, Ygg &amp; Mirrors</a> | + <a href="/pages/font.xhtml">Font</a> | + </div> +</body>https://purplebored.pl/blog/posts/2025/snuff-review-1-red-bull-snuff.xhtmlTue, 08 Apr 2025 00:00:00 +0000Ozona R-Type snuff reviewhttps://purplebored.pl/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtml<body> +<div class="content2" style="text-align: center;"> +<h1>=== Snuff 2 review - Ozona R-type ===</h1> +<p> +So the time finally came. I finished my 5grams of Ozona R-type. This was honestly a really hard snuff to review I have very mixed feelings about this. Well I am going to probably start off by saying it's very weak like probably the weakest one I tried so far. The taste is also pretty chemical but that doesn't mean it's bad it's still pretty good. I also gonna explain what the new "types" mean. Before they were called for example: Ozona Cherry, Raspberry, Orange, etc etc. But now they are called the first letter of the flavor. So Ozona R-type is Ozona Raspberry. It's a stupid and annoying change which I don't really like but you get used to it. + </p> +<img alt="A comparison between the old and new ozona r-type 5 gram packeging" height="200" src="/assets/images/blog/2025/ozonar.png" width="300"/> +<p> +Above you can see the differences between the old and new packaging +<br/> <br/> +So the flavor is a pretty decent chemical raspberry. It also has some mint in it. Very very good for beginners. I gave it to some of my friends which don't take snuff and they quite liked it (Unlike Red Bull which was somewhat too strong for them.) I personally found it mid since I like stronger snuffs. The packaging is pretty neat so I gonna talk about it. It's a 5gram metal round thingy which you rotate until it opens a hole. It kept the scent for quite a long time, it was also very convenient to use AND easy to open if you want to add a different snuff to it. Honestly I like this type of packaging most. It's nice, small, good, and simply convenient. Honestly I don't know what else to say if you are a beginner searching for some good and weak snuff then you should give Ozona R-Type snuff a shot. But if you are already a snuff user and like stronger snuffs then I would avoid it. +<br/> <br/> +And here comes the hard part. Giving it a rating. It's really hard since the taste is good but it's weak which makes it good for beginners but pretty mediocre for people who already are taking snuff and are used to stronger ones. I think it's a strong 6/10 for people who already take snuff and like something stronger and a BIG STRONG 8/10 for new snuff takers. + </p> +<br/> +<h3><a href="/blog/blog.xhtml">Back to the main page</a></h3> +</div> +<div class="footer"> + Purplebored © 2023-2025 | + <a href="https://git.ari.lt/purplebored/My-Personal-Website">Source code</a> | + <a href="/pages/contact.xhtml">Contact Me</a> | + <a href="/pages/mirrors.xhtml">Tor, Ygg &amp; Mirrors</a> | + <a href="/pages/font.xhtml">Font</a> | + </div> +</body>https://purplebored.pl/blog/posts/2025/snuff-review-2-ozona-r-type-snuff.xhtmlWed, 14 May 2025 00:00:00 +0000 BLOG TITLE https://purplebored.pl/blog/posts/template.xhtml<body> +<div class="content2" style="text-align: center;"> +<h1>=== BLOG TITLE ===</h1> +<p> +</p> +<br/> +<h3><a href="/blog/blog.xhtml">Back to the main page</a></h3> +</div> +<div class="footer"> + Purplebored © 2023-2025 | + <a href="https://git.ari.lt/purplebored/My-Personal-Website">Source code</a> | + <a href="/pages/contact.xhtml">Contact Me</a> | + <a href="/pages/mirrors.xhtml">Tor, Ygg &amp; Mirrors</a> | + <a href="/pages/font.xhtml">Font</a> | + </div> +</body>https://purplebored.pl/blog/posts/template.xhtmlThu, 15 May 2025 18:32:46 +0000 \ No newline at end of file diff --git a/index.xhtml b/index.xhtml index 0b17833..45fd7e7 100644 --- a/index.xhtml +++ b/index.xhtml @@ -72,7 +72,7 @@
- Purpleblog (I write snuff (tobaco) reviews on there too now!) + Purpleblog

=== Cool Stuff ===

@@ -89,6 +89,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/pages/buttons.xhtml b/pages/buttons.xhtml index 888fb50..a2afd83 100644 --- a/pages/buttons.xhtml +++ b/pages/buttons.xhtml @@ -140,8 +140,8 @@ Air VPN - The air to breathe the real Internet - + alt="Air VPN - The air to breathe the real Internet" /> +
Back to the main page @@ -151,6 +151,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/pages/contact.xhtml b/pages/contact.xhtml index 4789d93..4e33944 100644 --- a/pages/contact.xhtml +++ b/pages/contact.xhtml @@ -20,15 +20,12 @@

=== Contact Me ===

Here are some ways to get in touch with me.

- Signal: @alek.69
Telegram: @purplebored Matrix: purplebored:telepath.im
- Matrix(alt): mokosh:inamatrix.xyz
Email: purplebored(at)posteo.com
XMPP: niko(at)telepath.im

- I would prefer to be contacted by Email or XMPP. The other - options are fine but I check my email and XMPP the most. + Please avoid using Matrix since I don't really use it anymore and check it only a few times per week. I preffer to be contacted by XMPP or Email.

Also if you are contacting me over email or XMPP please use @@ -47,6 +44,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS |

diff --git a/pages/feeds.xhtml b/pages/feeds.xhtml new file mode 100644 index 0000000..e848f32 --- /dev/null +++ b/pages/feeds.xhtml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + =Feeds= + + + + +
+

=== My RSS and Atom feed for Purpleblog. ===

+

+ RSS +
+ Atom +

+
+ Valid attom button + Valid RSS button +

Back to the main page

+
+ + + diff --git a/pages/font.xhtml b/pages/font.xhtml index 7e189fd..6530882 100644 --- a/pages/font.xhtml +++ b/pages/font.xhtml @@ -32,6 +32,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/pages/guides.xhtml b/pages/guides.xhtml index f571995..05d01ee 100644 --- a/pages/guides.xhtml +++ b/pages/guides.xhtml @@ -47,6 +47,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/pages/mirrors.xhtml b/pages/mirrors.xhtml index 2e89e5c..bf8618b 100644 --- a/pages/mirrors.xhtml +++ b/pages/mirrors.xhtml @@ -60,6 +60,7 @@ Contact Me | Tor, Ygg & Mirrors | Font | + RSS | diff --git a/pages/snuff.xhtml b/pages/snuff.xhtml index 318a150..4827233 100644 --- a/pages/snuff.xhtml +++ b/pages/snuff.xhtml @@ -49,8 +49,8 @@
Snuff reviews:

@@ -64,6 +64,7 @@ Contact Me | Tor, Ygg & Mirrors | Font + RSS | diff --git a/purpleblog.rss b/purpleblog.rss deleted file mode 100644 index e69de29..0000000