Compare commits

..

5 Commits
main ... main

Author SHA1 Message Date
b1ek 965e6bbdeb
add theme.toml 2024-03-24 14:05:03 +10:00
b1ek 53d6e78e8d
add screenshot 2024-03-03 20:02:45 +10:00
b1ek e3f013c572
modify the bottom text margin to get a bit more nicer look 2024-03-03 19:59:58 +10:00
b1ek 79785ce53a
add an option to disable loading 2024-03-03 19:58:11 +10:00
b1ek ab24d9eb3d
remove all blog posts but 'hi' 2024-03-03 19:54:25 +10:00
30 changed files with 105 additions and 514 deletions

51
README.md Normal file
View File

@ -0,0 +1,51 @@
<p align='center'>
<img src='banner.webp'>
</p>
<h1 align='center'>
otherworld - a zola theme
</h1>
you can see the demo [here](https://world.blek.codes)
## how to use
### prerequisities
1. a linux system. you can use windows for that, but this guide centers itself on linux based systems.
2. you need to have these programs installed: `git` and `zola`
3. some creativity, html and scss skills
### steps
#### 1. clone the repo
(aka download the theme)
lets assume that your website's directory name in `daftpunk`. it will appear in commands a few times, and you should replace it with your website's name.
```sh
$ git clone git@git.blek.codes:blek/otherworld.git daftpunk
$ cd daftpunk
```
#### 2. open an another terminal
in the same directory, run
```sh
$ zola serve
```
#### 3. edit files in the `content` directory...
...as per [zola docs](https://www.getzola.org/documentation/getting-started/overview)
## how to disable loading
go to `content/index.md`, and in the `+++` blocks, set `extra.noload` to `true`.
like this:
```toml
+++
title = "Welcome"
[extra]
noload = true
+++
```

BIN
banner.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
banner.xcf Normal file

Binary file not shown.

View File

@ -12,7 +12,7 @@ build_search_index = false
[markdown]
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = true
highlight_code = false
[extra]
# Put all your custom variables here

View File

@ -2,58 +2,21 @@
title = "Welcome"
+++
## Welcome to my world!
Hello there! My name is Alice and i am a fullstack web dev. I like to start a lot of side projects, but finish only a few of them.
## Welcome to the otherworld!
It does look good, doesn't it? C'mon, it really is
## My contacts
You can send me an email (preferred): [me@blek.codes](mailto:me@blek.codes)
I can also be reached via [telegram](https://t.me/bleki42).
## Long text to make it look like this page has content
mroreowrmewormeowrmoewrmoewmroweemrweoermooewower :3
<div class='js-only'>
My time in my timezone is: <span id='time'></span>
<script>
(async () => {
function update() {
document.getElementById('time').innerText = new Date(
new Date().toLocaleString('en-US', { timeZone: 'Asia/Vladivostok' })
).toLocaleString('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hourCycle: 'h24'
});
setTimeout(update, 1000);
}
update()
})()
</script>
</div>
I also made a lil badge to show if i am currently online. Cool, huh?
<img src='https://online.blek.codes/gif' height='31px' width='88px' alt='A badge showing if i am online or not. Sorry, the only way to know it is to load the gif. It would be all greeny if i am online' />
<a href='/online-badge'>how does it work?</a>
<div class='js-only'>
## Metrics
This website collects anonymous metrics via [umami](https://umami.is). Anonymous means there is no identity attached to those metrics.
Also you can view it [here](https://umami.blek.codes/share/ucLh7hS5xcXCpklV/world)
</div>
## Projects
{{ amber_banner() }}
You can find the list of my projects [here](/projects).
Crazy? I used to be crazy. They locked me in a room.
A rubber room. A rubber room with rats. And rats make
me crazy. Crazy? I used to be crazy. They locked me
in a room. A rubber room. A rubber room with rats. And
rats make me crazy. Crazy? Yes, i am crazy UwU
## Blog
See [here](/blog)
## Webrings!!
I like webrings.
<a href="https://webring.haaien.xyz/#1" target="_blank" rel="noopener"><img src="/hairing.gif" alt="A button saying haaien webring" height='31px' width='88px'/></a>
<a href="https://acingtheinternet.netlify.app" target="_blank" rel="noopener"><img src="/acenow.gif" alt="A button saying asexuals now" height='31px' width='88px'></a>
## Facebook & social media
Reject social media. It's evil
@ -61,11 +24,7 @@ Reject social media. It's evil
---
### World's thoughts
Did you ever wonder what a [caterpillar](/caterpillar) looks like?
### Links
- [a funny techy podcast](https://www.youtube.com/@tsarp)
- [git repo of the theme](https://git.blek.codes/blek/otherworld)

View File

@ -1,27 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'It aired!'
description = 'yaaay'
date = '2024-01-14'
slug = 'it-aired'
year = 2024
month = 1
day = 14
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
The new website is aired at [blek.codes](https://blek.codes)! Yaaay
FYI, almost everything I make is open source (with this website being no exception), so heres the [git repo](https://git.blek.codes/blek/world.git) for yall in case you wanna see whats under the hood.
## What's new?
1. A funny vaporwave-like redesign
2. The website is fully static - you can even download it via smth like `wget -r`
3. Its fully NO-JS!! I mean, the previous versions were NOJS as well, but still its pretty awesome.
Also there won't be any guestbook for a while since as i mentioned before, this stack is fully static - basically just a bunch of .HTML files.

View File

@ -1,19 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'airline blankets are so ew'
description = 'they have a lot of hairs in them'
date = '2024-08-17'
slug = 'airline-blankets'
year = 2024
month = 8
day = 17
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
i flew just a lil bit in my life, and only on one airline so i probably shouldn't be all pissy at all airlines. but seriously, why can't they just wash them properly? i asked for a blanket at a plane and it had hairs and stuff on it.
like i paid 800$ for a single ticket. is that too much effort to wash them every time they fly? i also heard someone asking for a blanket in the end of the flight and the attendant said they didnt have any left. so, there it is again.

View File

@ -1,63 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'duckduckgo ai chat thing'
description = 'its kinda cool'
date = '2024-04-11'
slug = 'duckduckgo-ai-chat'
year = 2024
month = 4
day = 11
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
so, a few days ago i've noticed that duckduckgo has this weird new "ai chat" option:
![screenshot of duckduckgo page with a red arrow pointing to the "Chat" button](/blog-image/chat-btn.png)
it allows you to select two models: claude 1.2 and chatgpt 3.5. the last one is widely known, however you can find some info on claude [here](https://www.anthropic.com/news/releasing-claude-instant-1-2)
as i've always wondered just how real their claims are that your identity is never attached to the models, i've decided to research into the API.
## chat APIs
| Disclaimer: The following section is of educational purposes only. Please do not scrape DuckDuckGo's APIs, as it would only hurt the company which honestly cares about your privacy. |
| --- |
obviously the first thing i wanted to do see if there is a public chat API. i wasn't suprised when i couldn't find info on any of the public duckduckgo APIs(probably because there isn't any), other than [this stackoverflow answer](https://stackoverflow.com/questions/29346239/duckduckgo-api-how-to-get-more-results)
however i've investigated a bit and turns out that client API is not that complicated as i thought.
now, first of all you need yo obtain the API token via `GET https://duckduckgo.com/duckchat/v1/status` with a header `x-vqd-accept: 1`. the api token will be in the `x-vqd-4` header. it seems a bit tricky to get the right token without it throwing a `ERR_INVALID_VQD` error later, so its best to copy the request as cURL from your browser.
it is quite weird actually that it seems to be accepting only genuine browser-generated headers. however they contain little to no identifying data.
after you got the api key, send a `POST https://duckduckgo.com/duckchat/v1/chat` with a header `x-vqd-4: the-vqd-header-from-previous-request`.
the payload seems to be of this TS type and encoded via JSON:
```ts
type ChatPayload {
messages: { content: string, role: 'user' }[],
model: 'claude-instant-1.2' | 'gpt-3.5-turbo-0125'
}
```
then the API will return the response word-by-word in a good ol' streamed http response in chunks like this:
```json
\n
data: {"role":"assistant","message":".","created":1712840811713,"id":"compl_8pC9nVX8QJlN92jUtcJR8TgB","action":"success","model":"claude-instant-1.2"}
```
also the `/duckchat/v1/chat` request gives you the new VQD which you gotta use for the future requests.
i guess someone could fashion a cli program to read data from that API and print it out in the console.
upd a few days later: i did. [heres the link](https://git.blek.codes/blek/hey)
## the verdict
i think its safe to say that no identity data is collected via the chat APIs, other than your IP address, which by itself is not usually enough to identify a user, especially if you're sitting on a public network.
also if someone from the team who made the API reads this, please tell me if i missed some points, and what the hell does VQD even mean.

View File

@ -1,21 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'Lbh ner fhpu n areq yznb'
description = 'ebgguvegrra vf fb shaal'
date = '2024-02-08'
slug = 'ebgguvegrra'
year = 2024
month = 2
day = 8
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
# v unq fbzr cnapnxrf gbqnl
lbhxabj, gurbarfjvguvprpernzbagurz.
vzwhfgsbbyvatnebhaqgb znxrcrbcyrguvaxvgffbzrjrveqnffenaqbz yrggref :3 fblrnuunir shayznb
fb huz qb lbh xabj jung qbrf vqx, yl naq ggly zrna?

View File

@ -1,33 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'youll be eclair, ill be life'
description = 'a few phylosophical thoughts'
date = '2024-01-28'
slug = 'eclair-life'
year = 2024
month = 1
day = 28
lang = 'en'
# [taxonomies]
# tags = ["showerthoughts"]
[extra]
author = 'b1ek <me@blek.codes>'
+++
<p align='center'>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/gNxFGHsEMUI?si=cloIuWNCp__637NV" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</p>
i mean, it is such a simple fucking truth coming from a kids tv show.
it took me so long to realise that you don't moan about problems: you kick them in the butt, as hard as you can.
afterall, what is stopping you? like, imagine if you want to get the best job ever, but you don't think that you will pass the test so you dont apply at all.
but the thing is, nothing actually stopped you from applying. like, you may get rejected, and so what? you may have like a 0.1% chance of actually getting the job, you might just as well get it. as long as the chance exists, no matter how small it is or how small it may seem, the job is worth applying for.
my point is you can easily waste all of your life lurking because you are too afraid of getting rejected or whatever. the question is, do you want to waste your life being afraid? personally, i wouldn't. i would kick life in the butt when it gives me a hard time. and you should too, unknown stranger.
just remember this: it doesnt hurt to try. ever.r

View File

@ -1,30 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'My idea about the guestbook'
description = 'The best way to create a guestbook in a static html project'
date = '2024-01-12'
slug = 'gb-idea'
year = 2024
month = 1
day = 12
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
# In short...
You might know that my website [used to have a guestbook](https://old-1.blek.codes/guestbook) (at the moment of writing this article), and it was relatively easy to implement since the whole thing used to run on express.js and a bunch of databases.
# The problem
Thing is, the current version of the website (the one you are browsing right now) is written in [Zola](https://getzola.org), which compiles into a bunch of static .HTML files.
This is obviously good in terms of server costs and performance, but isn't very good when you need to add interactive shit like guestbooks, statistics and stuff.
I mean, I could've chosen literally any other framework when i was doing the rewrite - SvelteKit, Rust+Warp, hell, even Laravel: basically anything that supports server side HTML rendering. But i kinda want to do this one completely static.
# Possible solutions
Well, the first one and the most obvious one is to not to have a guestbook. It is pretty hard to filter out the spam and overall its kind of not worth the trouble.
However, i still want for y'all to leave a message here so im jumping to solution 2: Create a separate docker service or smth that handles POST forms and serves the data.

View File

@ -1,19 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'happy 8th march to yall'
description = 'i am quite sad on this day'
date = '2024-03-08'
slug = 'happy-8th-march-2024'
year = 2024
month = 3
day = 8
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
i don't have any people in my life to celebrate or hang out with. i have someone who i can call, but i dont want to talk to them.
let's just hope that next year will be better.

View File

@ -3,15 +3,15 @@ template = 'custom/blog-post.html'
title = 'Hi!'
description = 'First post here!'
date = '2024-01-08'
date = '2024-03-03'
slug = 'hi'
year = 2024
month = 1
day = 8
month = 3
day = 3
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
author = 'author person <author@author-writing-people.com>'
+++
Hey, this is the first post here! We'll se how it goes from there.

View File

@ -1,67 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'how to download music from youtube + thumbnail'
description = 'a short small guide on how to download music from youtube, preserving thumbnail'
date = '2024-08-22'
slug = 'download-music-from-yt'
year = 2024
month = 8
day = 22
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
# let's get to the point.
you need to have `yt-dlp` and `ffmpeg` installed, `magick` and `lame` for setting the mp3 cover.
`yt-dlp` has the `-x` option, which automatically extracts the audio with ffmpeg. to specify the file format, use `--audio-format` (mp3, aac, etc):
```
yt-dlp https://youtu.be/oLnq2SdZvQs -x --audio-format mp3 -o flying_north.mp3
```
as you can see, the thumbnail is not preserved by `yt-dlp`:
<img src='/blog-image/yt-music-no-thumb.png' />
to get the thumbnail, do:
```
curl https://i.ytimg.com/vi_webp/$VIDEO_ID/maxresdefault.webp -o file.webp
```
to convert it to JPEG + crop it to 1:1 aspect ratio:
```
magick convert -crop 1:1 -gravity center file.{webp,jpeg}
```
and the last thing, to embed it inside the `.mp3`:
```
lame --ti file.jpeg flying_north.mp3
mv flying_north.mp3.mp3 flying_north.mp3 # there's a good chance `lame` will export the file to `FILENAME.mp3.mp3`
```
so, basically it could be collapsed down to a bash script:
```bash
#!/usr/bin/env bash
VIDEO_ID=oLnq2SdZvQs
filename=file.mp3
cover=$(mktemp)
yt-dlp https://youtu.be/$VIDEO_ID -x --audio-format mp3 -o $filename
curl https://i.ytimg.com/vi_webp/$VIDEO_ID/maxresdefault.webp -o $cover
lame --ti $cover $filename
```
and, yay! it works
<img src='/blog-image/yt-music-works-in-amberol.png' />

View File

@ -1,26 +0,0 @@
+++
template = 'custom/blog-post.html'
title = 'a few thoughts about life'
description = 'i am very gay and depressed'
date = '2024-02-23'
slug = 'life'
year = 2024
month = 2
day = 23
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
to be honestly, the only thing i ever want to do with my life is to sit my whole life in some dense place like berlin or something, sit at coffee shops with my friends, talk about stuff and maybe do some hacktivist stuff.
would be really nice to do something really big (kinda like mr robot, iykyk)
i dont think i could make it, but might as well try.
also it would be fun to go on a date to some abandoned building ^^ i really like the aesthetic and stuff
btw, i dont think that my death protcol would actually work. like, it might but it probably simply won't. i really need to rethink it. maybe rebuild it so it would be simple as fuck. i dont know
i feel like i should re arrange the stuff on the index page.

View File

@ -1,34 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: This is a revocation certificate
iQKVBCABCAB/FiEEWfRtuFDKRH82Nx3tFFRiIeNZXQwFAmbMjxphHQJuZXcga2V5
IC0gQTZDMDM4RTAzRDIxMkQwNjU3NTA1M0FEQTYyMkMyMkM5QkM2MTZCMgpjaGVj
ayBjdXJyZW50IGtleSBodHRwczovL2JsZWsuY29kZXMva2V5LmFzYwAKCRAUVGIh
41ldDMH8D/456UeHnKOsqODsHNUD7yUtbhpRsXjjEtKn0MgV9BwdNhtqGpbCAC8H
9kZIfuap1PQhZBuJuV+MIB3qkXta1niuhgXYaaSnrj/fqTZzPoGkV94X/LyVreD+
Tzfk2cKW19TzhtPHjsp1omoiUSpEZA6AW9T43VpEogfedtru3LlznJc/nnWUBwEH
Q3P3M+FoM+11jVgRwQq+KMMQr8DsudkPQhushOBYD/dExLou9zKzZvZLKTNYpa+g
Icic9F7My7gOnVrhT+NHdB3UJh4y82wj13t/nsrCCC9O99r/yyVsl8mJMy+9jScq
zWnXL6bRNwWNDNqEm7BB4gWSpvWe0DnFE6qlDikeWmCmGH6l8YBkoXT/4K/smHw9
fhSJGBh1h3FTvATWrNsreuNxut9OH2n6Y9cOoTVCNTOIJ3XEVXZ7dR1zKZDfJRwj
xwWWjxQt2xXI1PVybyd6PfGGfIrKAfU4EMpza7k1A/yvWlTYpYIhSXiqL0O8iJT9
RlZUmELi45hLEI3Nnd/2tmA5cL+NG9sbpfvr2+5gRbcLRwtMzZCOQU4ann8kyFVs
gfdd+SimzkKaZ5Ybb4L6Av5UCbVePNfSJKII/TWFFV2QUm8AS5/MQCnpxHFE7xQx
IgJEx5t8PicHCmXm71sBofVcw7eMomyYP4/JMPPTNpdo4nHUhe6yQQ==
=OFWv
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZsyO1RYJKwYBBAHaRw8BAQdAl/Y618e4nbHrKwUAVW/YjXQqaAy9ENKKphnV
w77ePJO0e2JsZWshIChwcmV2LiBrZXkgLSA1OUY0NkRCODUwQ0E0NDdGMzYzNzFE
RUQxNDU0NjIyMUUzNTk1RDBDIDsgY2hlY2sgY3VycmVudCBrZXkgaHR0cHM6Ly9i
bGVrLmNvZGVzL2tleS5hc2MpIDxtZUBibGVrLmNvZGVzPoiZBBMWCgBBFiEEpsA4
4D0hLQZXUFOtpiLCLJvGFrIFAmbMjtUCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsC
BBYCAwECHgcCF4AACgkQpiLCLJvGFrJsHAD+Kwwa376LtclKW1scMWWKs4cIgaJw
1dgD8ON1ir2EmrABAJMcoNEFbNREYQTKNul78MbLJYBhb7Dl82EHQRU7essGuDgE
ZsyO1RIKKwYBBAGXVQEFAQEHQB45pX39kNHHz77oy9NtZWO2mQS60Gf+/pGXEScp
dac4AwEIB4h+BBgWCgAmFiEEpsA44D0hLQZXUFOtpiLCLJvGFrIFAmbMjtUCGwwF
CQWjmoAACgkQpiLCLJvGFrKUhQD/ey5K7HZweNtsC8CPKZc8ejxS8rivgU8eoERn
QW98UNYA/3RHKiXditFsV6s+UZjM3raA7hXHkkJNaubXSfFMcFIN
=VbEi
-----END PGP PUBLIC KEY BLOCK-----

BIN
otherworld.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,60 +0,0 @@
.amber-banner {
background: #0005;
border: 1px solid #000;
border-radius: 8px;
height: 5rem;
width: fit-content;
padding: 1rem;
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 2rem;
* {
margin: 0; padding: 0;
}
h1 {
font-size: 1.5rem;
}
ul {
list-style: none;
display: flex;
margin-top: 0.5rem;
gap: 0.5rem;
}
small {
display: block;
color: #555555;
}
.amber-banner-icon {
height: 100%;
padding: 0 1rem;
@keyframes amber-banner-icon-breathe {
0%, 30% {
transform: scale(1);
}
56% {
transform: scale(1.1);
}
70%, to {
transform: scale(1);
}
}
animation: amber-banner-icon-breathe 6s ease infinite;
}
}
.amber-banner-title {
width: fit-content;
border-radius: 8px 8px 0 0;
padding: 0.2em 0.5em;
margin: 0;
margin-left: 1rem;
background: #0003;
border: 1px solid #000;
border-bottom: 0;
}

View File

@ -50,9 +50,3 @@ a, a:visited {
text-decoration: underline !important;
}
}
pre code {
padding: 0.5em 1em;
display: block;
}

View File

@ -29,6 +29,7 @@
text-align: center;
width: 80%;
max-width: 1200px;
left: 50%;
transform: translateX(-50%);

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@ -1 +0,0 @@
<svg viewBox="0 0 957.7 1703" xmlns="http://www.w3.org/2000/svg"><path d="M0 560.3c0-22.4 8-44 22.5-61L428 23.3a66.1 66.1 0 0 1 100.6-.1l406.5 476a93.9 93.9 0 0 1 22.5 61.1v536.2c0 20.9-7 41.2-19.8 57.7l-407.3 523.3a66.2 66.2 0 0 1-104.4 0L19.8 1154.1A94 94 0 0 1 0 1096.5Z" fill="url(#a)"/><path d="M0 560.3c0-22.4 8-44 22.5-61L428 23.3a66.1 66.1 0 0 1 100.6-.1l406.5 476a93.9 93.9 0 0 1 22.5 61.1v536.2c0 20.9-7 41.2-19.8 57.7l-407.3 523.3a66.2 66.2 0 0 1-104.4 0L19.8 1154.1A94 94 0 0 1 0 1096.5Z" fill="url(#b)"/><path d="M456.8 461.1a31.8 31.8 0 0 0 22.1-30.3l.4-264.2a19.3 19.3 0 0 0-34-12.5L124.7 529.7a19.3 19.3 0 0 0 20.4 30.8l311.7-99.4z" fill="url(#c)"/><defs><radialGradient id="a" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90 1023.3 682.2) scale(1705.53474)"><stop offset="0" stop-color="#ffa200"/><stop offset="1" stop-color="#ad004f"/></radialGradient><radialGradient id="b" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(525.52052 0 0 775.7961 478.9 775.8)"><stop offset="0" stop-color="#ffa100" stop-opacity="0"/><stop offset=".5" stop-color="#ffa100" stop-opacity=".2"/><stop offset="1" stop-color="#ffa100" stop-opacity=".8"/></radialGradient><linearGradient id="c" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-795.7954 795.7954) rotate(-67.3 .5 1.1)"><stop offset="0" stop-color="#ffea00"/><stop offset="1" stop-color="#ff7d00"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

View File

@ -10,23 +10,23 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;700&display=swap" rel="stylesheet">
<style>
html { font-family: 'Noto Serif JP' }
* { font-family: 'Noto Serif JP' }
</style>
<title>blek! World</title>
<title>Otherworld</title>
</head>
<body>
<div class='screen bg'></div>
<div class='screen content'>
<h1 style='margin-bottom:0'>
<a href='/' class="title-a">blek! World</a>
<a href='/' class="title-a">Otherworldly</a>
</h1>
<hr style='margin:0 auto'/>
{% block content %} {% endblock %}
<p style='font-size:80%;text-align:center;margin-top:120px;height:120px'>
<p style='font-size:80%;text-align:center;margin-top:80px;height:120px'>
Background credit to
<a style='color:gray !important' href="https://tenor.com/view/retro-aesthetic-gif-19478658">
tenor

View File

@ -15,6 +15,7 @@
{% block root %}
{% if page.extra.noload %}
<div class='screen fader'>
<p>
<img src='/load.gif' width='46px' height='48px' style='margin-bottom:8px' /><br/>
@ -28,5 +29,6 @@
</span>
</p>
</div>
{% endif %}
{% endblock root %}

View File

@ -1,5 +0,0 @@
<div class="alert" style="background:#e7f29f30;border:1px solid #d7e28f25;padding:2rem;width:fit-content;margin:0rem auto;text-align: center;border-radius:.25rem;">
<h1 style="margin:0;padding:0">{{ title | safe }}</h1>
<hr style="margin:1rem auto">
<p>{{ body | safe }}</p>
</div>

View File

@ -1,29 +0,0 @@
<link rel="stylesheet" href="/amber-banner.css">
<div class="amber-banner-title">
Open source promotion
</div>
<div class="amber-banner">
<img src="/amber.svg" class="amber-banner-icon">
<div>
<h1>Amber: the TypeScript for bash</h1>
<p>
A type safe, easy to use language compiled to bash
</p>
<ul>
<li>
<a href="https://amber-lang.com">
<img alt="Go to website" title="Go to website" referrerpolicy="no-referrer" src="https://img.shields.io/badge/Go_to_website-orange?style=plastic">
</a>
</li>
<li>
<a href="https://github.com/amber-lang/amber.git">
<img alt="GitHub repository" title="Github repository" referrerpolicy="no-referrer" src="https://img.shields.io/github/stars/amber-lang/amber?style=plastic">
</a>
</li>
<li>
<img alt="GPL 3.0 license" title="GPL 3.0 license" referrerpolicy="no-referrer" src="https://img.shields.io/github/license/amber-lang/amber?style=plastic&color=blue">
</li>
</ul>
</div>
</div>

18
theme.toml Normal file
View File

@ -0,0 +1,18 @@
name = "otherworld"
description = "Vaporwave aesthetic theme"
license = "GPL-3-only"
homepage = "https://git.blek.codes/blek/otherworld"
min_version = "0.1.0"
demo = "https://world.blek.codes"
[extra]
[author]
name = "blek!"
homepage = "https://blek.codes"
[original]
author = "blek!"
homepage = "https://blek.codes"
repo = "https://git.blek.codes/blek/world"