forked from blek/world
Compare commits
19 Commits
Author | SHA1 | Date |
---|---|---|
b1ek | a9cd6559bc | |
b1ek | ec4c158d2e | |
b1ek | 11e3f75d99 | |
b1ek | 7cc38727d5 | |
b1ek | 6b5a9601c4 | |
b1ek | f16f7a78d6 | |
b1ek | 740dfec1e2 | |
b1ek | 4fc270c09d | |
b1ek | 4bf96e0691 | |
b1ek | f34e5cbc21 | |
b1ek | c5f3be31aa | |
b1ek | cb725da974 | |
b1ek | b9df07d74d | |
b1ek | 0b1e5c0da2 | |
b1ek | 870f8239cd | |
b1ek | 79e6d8bfd0 | |
b1ek | d3a85b75d7 | |
b1ek | 1c6395bcfd | |
b1ek | 4e85a9967d |
39
README.md
39
README.md
|
@ -1,39 +0,0 @@
|
||||||
<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)
|
|
||||||
|
|
BIN
banner.webp
BIN
banner.webp
Binary file not shown.
Before Width: | Height: | Size: 1.0 MiB |
BIN
banner.xcf
BIN
banner.xcf
Binary file not shown.
|
@ -12,7 +12,7 @@ build_search_index = false
|
||||||
[markdown]
|
[markdown]
|
||||||
# Whether to do syntax highlighting
|
# Whether to do syntax highlighting
|
||||||
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
|
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
|
||||||
highlight_code = false
|
highlight_code = true
|
||||||
|
|
||||||
[extra]
|
[extra]
|
||||||
# Put all your custom variables here
|
# Put all your custom variables here
|
||||||
|
|
|
@ -2,21 +2,58 @@
|
||||||
title = "Welcome"
|
title = "Welcome"
|
||||||
+++
|
+++
|
||||||
|
|
||||||
## Welcome to the otherworld!
|
## Welcome to my world!
|
||||||
It does look good, doesn't it? C'mon, it really is
|
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.
|
||||||
|
|
||||||
## Long text to make it look like this page has content
|
## My contacts
|
||||||
mroreowrmewormeowrmoewrmoewmroweemrweoermooewower :3
|
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).
|
||||||
|
|
||||||
Crazy? I used to be crazy. They locked me in a room.
|
<div class='js-only'>
|
||||||
A rubber room. A rubber room with rats. And rats make
|
My time in my timezone is: <span id='time'></span>
|
||||||
me crazy. Crazy? I used to be crazy. They locked me
|
<script>
|
||||||
in a room. A rubber room. A rubber room with rats. And
|
(async () => {
|
||||||
rats make me crazy. Crazy? Yes, i am crazy UwU
|
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).
|
||||||
|
|
||||||
## Blog
|
## Blog
|
||||||
See [here](/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
|
## Facebook & social media
|
||||||
Reject social media. It's evil
|
Reject social media. It's evil
|
||||||
|
|
||||||
|
@ -24,7 +61,11 @@ Reject social media. It's evil
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### World's thoughts
|
||||||
|
|
||||||
|
Did you ever wonder what a [caterpillar](/caterpillar) looks like?
|
||||||
|
|
||||||
### Links
|
### Links
|
||||||
- [git repo of the theme](https://git.blek.codes/blek/otherworld)
|
- [a funny techy podcast](https://www.youtube.com/@tsarp)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
+++
|
||||||
|
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.
|
|
@ -0,0 +1,63 @@
|
||||||
|
+++
|
||||||
|
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.
|
|
@ -0,0 +1,19 @@
|
||||||
|
+++
|
||||||
|
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.
|
|
@ -0,0 +1,67 @@
|
||||||
|
+++
|
||||||
|
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' />
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
-----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
BIN
otherworld.png
Binary file not shown.
Before Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,60 @@
|
||||||
|
.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;
|
||||||
|
}
|
|
@ -50,3 +50,9 @@ a, a:visited {
|
||||||
text-decoration: underline !important;
|
text-decoration: underline !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 80%;
|
width: 80%;
|
||||||
max-width: 1200px;
|
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<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>
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
After Width: | Height: | Size: 229 KiB |
|
@ -10,17 +10,17 @@
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<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">
|
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;700&display=swap" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
* { font-family: 'Noto Serif JP' }
|
html { font-family: 'Noto Serif JP' }
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<title>Otherworld</title>
|
<title>blek! World</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class='screen bg'></div>
|
<div class='screen bg'></div>
|
||||||
<div class='screen content'>
|
<div class='screen content'>
|
||||||
<h1 style='margin-bottom:0'>
|
<h1 style='margin-bottom:0'>
|
||||||
<a href='/' class="title-a">Otherworldly</a>
|
<a href='/' class="title-a">blek! World</a>
|
||||||
</h1>
|
</h1>
|
||||||
<hr style='margin:0 auto'/>
|
<hr style='margin:0 auto'/>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<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>
|
|
@ -0,0 +1,29 @@
|
||||||
|
<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>
|
Loading…
Reference in New Issue