Compare commits

..

9 Commits

Author SHA1 Message Date
0f692aba68 Add some fixes and news 2025-08-23 04:17:24 +03:00
92a0078b8b Fix services grid 2025-08-20 03:37:55 +03:00
63ac26acb8 Fix services grid 2025-08-20 03:17:28 +03:00
2d38a75555 Fix notes adaptivity 2025-08-20 03:10:01 +03:00
3a2271ebb6 Add .asciicontainer adaptivity fix 2025-08-20 02:59:00 +03:00
ba0e6f92fe Add new article and specific for notes stylization 2025-08-20 02:33:57 +03:00
29139c807d Add some fixes 2025-08-19 23:07:55 +03:00
3a82701008 Build new website files 2025-08-19 22:59:53 +03:00
b8060817e5 Add some fixes 2025-08-19 22:58:01 +03:00
26 changed files with 304 additions and 109 deletions

File diff suppressed because one or more lines are too long

View File

@@ -5,34 +5,27 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="Беларусский или белорусский - как писать?">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords" content="Беларусь или Белоруссия белорусский беларусский">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>Беларусский или белорусский</title> <title>Беларусский или белорусский</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>
<h1>Беларусский или белорусский</h1> <h1>Беларусский или белорусский</h1>
<h2 id="введение">Введение</h2> <div class="article"><h2 id="введение">Введение</h2><p>Вопрос “Беларусь или Белоруссия” здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.</p><p>Но отдельная тема - писать белорусский или беларусский. Этот вопрос спорный, но я постараюсь ответить на него с точки зрения русского языка.</p><h2 id="морфологический-принцип">Морфологический принцип</h2><p>В отличие от беларусского языка, русская орфография имеет в своей основе морфологический принцип, то есть по идее вне зависимости от своей позиции морфема всегда пишется одинаково. Например, са<strong>д</strong> - са<strong>д</strong>ы (на конце всегда <code>д</code>).<br/>Исключения в виде <code>без-</code> - <code>без-</code> не учитываются, так как они редки.</p><h2 id="как-писать">Как писать?</h2><p>Для начала, в литературном стандарте закреплена форма с буквой <code>о</code>. Но в таком случае слово Беларусь должно было бы писаться с <code>о</code>, так как соеденительной морфемой в русском <code>а</code> быть не может.</p><p>Вот только слово Беларусь пишется с <code>а</code>. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать <code>беларусский</code>.<br/>Ну либо переходить на <code>Белорусь</code>, но…</p><p>P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.</p></div>
<p>Вопрос “Беларусь или Белоруссия” здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.</p>
<p>Но отдельная тема - писать белорусский или беларусский. Этот вопрос спорный, но я постараюсь ответить на него с точки зрения русского языка.</p>
<h2 id="морфологический-принцип">Морфологический принцип</h2>
<p>В отличие от беларусского языка, русская орфография имеет в своей основе морфологический принцип, то есть по идее вне зависимости от своей позиции морфема всегда пишется одинаково. Например, са<strong>д</strong> - са<strong>д</strong>ы (на конце всегда <code>д</code>).<br/>Исключения в виде <code>без-</code> - <code>без-</code> не учитываются, так как они редки.</p>
<h2 id="как-писать">Как писать?</h2>
<p>Для начала, в литературном стандарте закреплена форма с буквой <code>о</code>. Но в таком случае слово Беларусь должно было бы писаться с <code>о</code>, так как соеденительной морфемой в русском <code>а</code> быть не может.</p>
<p>Вот только слово Беларусь пишется с <code>а</code>. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать <code>беларусский</code>.<br/>Ну либо переходить на <code>Белорусь</code>, но…</p>
<p>P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.</p>
<div id="footer"> <div id="footer">
<main> <main>
<pre> .--. <pre> .--.

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7">
<meta name="description" content="Restoration of Synapse after losing 1 year of database history">
<meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords" content="matrix synapse conduit postgres">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>Restoration of Synapse after losing 1 year of database history</title>
<link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body>
<div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div>
<h1>Restoration of Synapse after losing 1 year of database history</h1>
<div class="article"><h2 id="introduction">Introduction</h2><p>In July 2025, my Synapse PostgreSQL had broken, so I needed to restore it from my 1-y.o. backup. I was thinking about what to do, and my friend sent me <a href="https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/">this</a> article, so we understood what to do!</p><p>For example, there is a room called #example:example.org (roomid !example:example.org), whose member was @user:example.net.
The problem is that every server knows @user:example.net is in the room #example:example.org. But our server doesnt! So that is what we should aim at solving the problem.</p><h2 id="architecture">Architecture</h2><p>We get 2 types of error messages:</p><ul>
<li><code>synapse.handlers.receipts: [PUT-...] Ignoring receipt for room &#39;!example:example.org&#39; from server example.org as we&#39;re not in the room</code> (there is the same error message, but when you get a typing event from an unknown room)</li>
<li><code>synapse.federation.federation_server: [PUT-...] Ignoring PDU for unknown room_id: !example:example.org</code></li>
</ul><p>We can read the journal and parse the error message (I use a bash script to do that).
Okay, we have a room id! In the given article, the author is the only user of their server, so they can just send <a href="https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias">POST /_matrix/client/v3/join/!example:example.org</a> request, and everything will be good.
But my server has multiple users, so I cant use the easiest way. We need to get information about membership (so we need to get state).</p><p>As we are admins of our servers, we have their signing keys.
We will need them because we are going to get state via Federation API requests.
How? There are different ways to do that.
However, all of them require at least 1 event id, so firstly we need to do <a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid">GET /_matrix/federation/v1/timestamp_to_event</a>.
Determining request parameters (?dir as direction (b[ackward] or f[orward]) and &amp;ts as timestamp in Unix time format in milliseconds), we have just got either the last or the first event id! In my case, I chose the way of getting the last event, so then Ill have to make <a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid">GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id</a>, and I will get the actual state.
Of course, both of the requests, as I said, should be signed using your servers key (<a href="https://spec.matrix.org/v1.15/server-server-api/#signing-events">how to sign events</a>).</p><br/><p>(There is no support of timestamp_to_event in Conduit, so it would be a good idea to make support of requesting different servers)</p><p>After we receive the state, we need to parse it, but I think this cant make a difficulty.
As a result, we have a list of our users that were in the given room, like [“@user:example.net”, “@anotheruser:example.net”, “@exampleuser:example.net”].
Then, the simplest way is to get temporary users auth token via <a href="https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user">POST /_synapse/admin/v1/users/user_id/login</a> and make <a href="https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias">POST /_matrix/client/v3/join/!example:example.org</a> from the name of the user using their token.
The problem is solved!</p><h2 id="external-links">External links</h2><ul>
<li><a href="https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/">Article that gave me the idea</a></li>
<li><a href="https://spec.matrix.org/v1.15/server-server-api/">Matrix Federation API docs</a>
<ul>
<li><a href="https://spec.matrix.org/v1.15/server-server-api/#signing-events">How to sign Federation API requests</a></li>
<li><a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid">GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id</a></li>
<li><a href="https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid">GET /_matrix/federation/v1/timestamp_to_event</a></li>
</ul>
</li>
<li><a href="https://spec.matrix.org/v1.15/server-server-api/">Matrix Client API docs</a>
<ul>
<li><a href="https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias">POST /_matrix/client/v3/join/!example:example.org</a></li>
</ul>
</li>
<li><a href="https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user">Admin API POST /_synapse/admin/v1/users/user_id/login</a></li>
</ul></div>
<div id="footer">
<main>
<pre> .--.
." o \__
_.-" ,( `
_.-" ,;;|
_.-=" _," ,,;;;'
.-"`_.-"``-..,,;;;;:'
`"'` `\`\
/^\\\
</pre>
</main>
<aside>
<b>Made with ♥</b> by Thary<br>
<!-- Website sources are available on <a href="https://git.vector1.dev/thary/website">Gitea</a>!<br> -->
<!-- All content is in Public domain and licensed under <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a><br> -->
Logo is created by <a href="https://houl.floof.company/">Houl</a><br>
ASCII arts are taken from <a href="https://web.archive.org/web/20010420182629/http://www.geocities.com/spunk1111/indexjava.htm">this website</a>
</aside>
</div>
</body></html>

BIN
dist/cinny-preview.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

View File

@@ -5,24 +5,25 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="Contact nothing.run &#38; nothing.run community">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>Contact</title> <title>Contact us</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>
<h1>Contact</h1> <h1>Contact us</h1>
<div class="asciicontainer"> <div class="asciicontainer">
@@ -56,10 +57,10 @@
<div> <div>
<h2>Our chat</h2> <h2>Our chat</h2>
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p> <p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
<ul> <ul>
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li> <li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li> <li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -5,20 +5,21 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="Donate us :3">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>Donate :3</title> <title>Donate :3</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>

BIN
dist/element-preview.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 KiB

11
dist/index.html vendored
View File

@@ -5,20 +5,21 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="Librehoster, crypto- and infoanarchysts, free software fans">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords" content="nothing crypto free software libre self host">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>nothing.run</title> <title>nothing.run</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>

View File

@@ -5,33 +5,45 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="nothing.run-s matrix instance info">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords" content="matrix element synapse messenger IM">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>Matrix</title> <title>Matrix</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>
<h1>Matrix</h1> <h1>Matrix</h1>
<p><a href="https://matrix.org"><strong>Matrix</strong></a> is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!</p> <p><a href="https://matrix.org"><strong>Matrix</strong></a> is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!</p>
<h2 id="login-data">Login data</h2>
<ul>
<li>Server name: nothing.run</li>
<li>Server address: <a href="https://matrix.nothing.run">https://matrix.nothing.run</a></li>
</ul>
<h2 id="our-room">Our room</h2> <h2 id="our-room">Our room</h2>
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
<ul>
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
</ul>
<h2 id="clients">Clients</h2> <h2 id="clients">Clients</h2>
<h3 id="web-clients">Web-clients</h3> <h3 id="web-clients">Web-clients</h3>
<ul> <div class="bigcontainer"><div class="matrixclient"><ul>
<li><a href="https://cinny.nothing.run">Cinny</a> - modern and beautiful Matrix web client</li> <li><a href="https://cinny.nothing.run">Cinny</a> - modern and beautiful Matrix web client</li>
</ul><img src="/cinny-preview.png" alt="Cinny preview"/></div><div class="matrixclient"><ul>
<li><a href="https://element.nothing.run">Element</a> - the most popular and functional Matrix client</li> <li><a href="https://element.nothing.run">Element</a> - the most popular and functional Matrix client</li>
</ul> </ul><img src="/element-preview.png" alt="Element preview"/></div></div>
<h3 id="mobile-clients">Mobile clients</h3> <h3 id="mobile-clients">Mobile clients</h3>
<ul> <ul>
<li><a href="https://github.com/element-hq/element-android">Element</a> - very buggy and uncomfortable client</li> <li><a href="https://github.com/element-hq/element-android">Element</a> - very buggy and uncomfortable client</li>
@@ -42,13 +54,10 @@
</ul> </ul>
<h3 id="desktop-clients">Desktop clients</h3> <h3 id="desktop-clients">Desktop clients</h3>
<ul> <ul>
<li><a href="https://iamb.chat/">iamb</a> - written in Rust terminal-based client with Vim keybindings</li> <li><a href="https://iamb.chat/">iamb</a> &amp; <a href="https://github.com/gomuks/gomuks">gomuks</a> - written in Rust and Go terminal-based clients. iamb uses Vim-like keybindings</li>
<li><a href="https://github.com/gomuks/gomuks">gomuks</a> - a terminal Matrix client written in Go</li> <li><a href="https://wiki.gnome.org/Apps/Fractal">Fractal</a>, <a href="https://apps.kde.org/neochat/">NeoChat</a>, <a href="https://nheko-reborn.github.io/">Nheko</a> - nice desktop-oriented clients. Can be buggy sometimes</li>
<li>You can use Element, Schildi and Cinny Web as desktop clients via Electron. Its a less performant way to message from Matrix, but… You can! :)</li>
<li><a href="https://github.com/alphapapa/ement.el">Ement.el</a> - really? Are you so crazy to chat from Emacs???</li> <li><a href="https://github.com/alphapapa/ement.el">Ement.el</a> - really? Are you so crazy to chat from Emacs???</li>
<li>[Fractal]</li>
<li>[NeoChat]</li>
<li>[Nheko]</li>
<li>You can use Element, Schildi and Cinny Web as desktop clients through Electron. Its unperformance way to use Matrix, but… You can! :)</li>
</ul> </ul>
<div id="footer"> <div id="footer">
<main> <main>

17
dist/news/index.html vendored
View File

@@ -5,26 +5,31 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="Librehoster, crypto- and infoanarchysts, free software fans">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>nothing.run</title> <title>nothing.run</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>
<h1>nothing.run</h1> <h1>nothing.run</h1>
<h3 id="9-august-2025">9 August 2025</h3> <h3 id="23-august-2025">23 August 2025</h3>
<ul>
<li>We have switched from Contabo nameservers to <a href="https://desec.io">Desec</a></li>
</ul>
<h3 id="9-august-2025">9 August 2025</h3>
<ul> <ul>
<li>There are <a href="https://tea.nothing.run">Gitea</a> and <a href="https://idm.nothing.run">KaniDM</a> right now</li> <li>There are <a href="https://tea.nothing.run">Gitea</a> and <a href="https://idm.nothing.run">KaniDM</a> right now</li>
</ul> </ul>

17
dist/notes/index.html vendored
View File

@@ -5,20 +5,21 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content="Astro v2.10.7"> <meta name="generator" content="Astro v2.10.7">
<meta name="description" content="{frontmatter.description}"> <meta name="description" content="Tharys notes and articles">
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}"> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host">
<meta name="keywords">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>nothing.run</title> <title>nothing.run</title>
<link rel="stylesheet" href="/_astro/contact.05f6af3e.css" /></head> <link rel="stylesheet" href="/_astro/contact.8ef370d5.css" /></head>
<body> <body>
<div class="header astro-HPNW4VWY"> <div class="header astro-HPNW4VWY">
<a href="/" class="astro-HPNW4VWY">~/</a> <a href="/" class="astro-HPNW4VWY">~/</a>
<a href="/contact.html" class="astro-HPNW4VWY">Contact</a> <a href="/contact" class="astro-HPNW4VWY">Contact</a>
<a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a> <a href="https://uptime.nothing.run" class="astro-HPNW4VWY">Uptime</a>
<a href="/news" class="astro-HPNW4VWY">News</a> <a href="/news" class="astro-HPNW4VWY">News</a>
<a href="/notes.html" class="astro-HPNW4VWY">Notes</a> <a href="/notes" class="astro-HPNW4VWY">Notes</a>
<a href="/donate" class="astro-HPNW4VWY">Donate :3</a> <a href="/donate" class="astro-HPNW4VWY">Donate :3</a>
</div> </div>
@@ -26,7 +27,11 @@
<h2 id="linguistics">Linguistics</h2> <h2 id="linguistics">Linguistics</h2>
<ul> <ul>
<li><a href="/articles/belarusian.html">Беларусский или белорусский</a></li> <li><a href="/articles/belarusian">Беларусский или белорусский</a></li>
</ul>
<h2 id="computers">Computers</h2>
<ul>
<li><a href="/articles/synapse-revitalization-script">Restoration of Synapse after losing 1 year of database history</a></li>
</ul> </ul>
<div id="footer"> <div id="footer">
<main> <main>

BIN
public/cinny-preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

BIN
public/element-preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 KiB

View File

@@ -8,10 +8,10 @@ const { location } = Astro.props;
<div class="header"> <div class="header">
<a href="/">~/</a> <a href="/">~/</a>
<a href="/contact.html">Contact</a> <a href="/contact">Contact</a>
<a href="https://uptime.nothing.run">Uptime</a> <a href="https://uptime.nothing.run">Uptime</a>
<a href="/news">News</a> <a href="/news">News</a>
<a href="/notes.html">Notes</a> <a href="/notes">Notes</a>
<a href="/donate">Donate :3</a> <a href="/donate">Donate :3</a>
</div> </div>

View File

@@ -1,3 +0,0 @@
- **[SchildiChat Web](https://element.nothing.run)** - built with Flutter and based on Element Matrix client with many features!
- **[Cinny](https://cinny.nothing.run)** - most beautiful Matrix client
- *Coming soon!* **[FluffyChat](https://fluffy.nothing.run)** - another Web Matrix client

View File

@@ -0,0 +1,7 @@
---
---
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p>
<ul>
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
</ul>

View File

@@ -1,4 +0,0 @@
- **[Main website](/)**
- **[Matrix](/matrix.html)** - decentralized communication server (powered by <a href="https://matrix.org/docs/projects/server/synapse">Synapse</a>). We have [Web-clients for Matrix](/matrix.html#web)
<!-- - *Coming soon!* **[Mastodon](https://social.nothing.run)** - free social network, part of the Fediverse, powered by ActivityPub -->
- *Coming soon!* **Forgejo** - lightwale Git repos hosting with Git over HTTPS and over SSH support. Based on Gitea

View File

@@ -4,11 +4,13 @@ import Footer from "../components/footer.astro";
import "../fonts.css"; import "../fonts.css";
import "../style.css"; import "../style.css";
const {frontmatter, title} = Astro.props; const {frontmatter} = Astro.props;
let props = {}; let {title, description, keys} = Astro.props;
if (typeof frontmatter !== 'undefined') { if (typeof frontmatter !== 'undefined') {
props.title = frontmatter.title; title = frontmatter.title;
} else { props.title = title; }; description = frontmatter.description;
keys = frontmatter.keys;
};
--- ---
<!DOCTYPE html> <!DOCTYPE html>
@@ -18,17 +20,18 @@ if (typeof frontmatter !== 'undefined') {
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />--> <!--<link rel="icon" type="image/svg+xml" href="/favicon.svg" />-->
<meta name="generator" content={Astro.generator} /> <meta name="generator" content={Astro.generator} />
<meta name="description" content="{frontmatter.description}" /> <meta name="description" content={description} />
<meta name="keywords" content="nothing crypto free software libre self host {frontmatter.keys}" /> <meta name="keywords" content="nothing.run nothing privacy free libre software floss self host" />
<meta name="keywords" content={keys} />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png"> <link rel="icon" href="/nothingrun-favicon-whiteonblack.png" type="image/png">
<title>{props.title}</title> <title>{title}</title>
</head> </head>
<body> <body>
<Header /> <Header />
<h1>{props.title}</h1> <h1>{title}</h1>
<slot /> <slot />
<Footer /> <Footer />

View File

@@ -2,10 +2,11 @@
layout: '../../layouts/index.astro' layout: '../../layouts/index.astro'
title: 'Беларусский или белорусский' title: 'Беларусский или белорусский'
description: 'Беларусский или белорусский - как писать?' description: 'Беларусский или белорусский - как писать?'
keys: 'nothing crypto free software libre self host' keys: 'Беларусь или Белоруссия белорусский беларусский'
le: '19 Aug. 2025' le: '19 Aug. 2025'
--- ---
<div class="article">
## Введение ## Введение
Вопрос "Беларусь или Белоруссия" здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу. Вопрос "Беларусь или Белоруссия" здесь затронут не будет. Как беларус, могу сказать, что нам просто приятно, когда нас называют Беларусью, и мы считаем использование первого варианта минимальным уважением к нашему народу.
@@ -23,3 +24,4 @@ le: '19 Aug. 2025'
Вот только слово Беларусь пишется с `а`. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать `беларусский`.<br/>Ну либо переходить на `Белорусь`, но... Вот только слово Беларусь пишется с `а`. Что же пошло не так? Это заимствование из беларусского, и сейчас представляет из себя один цельный корень. Это значит, что при добавлении других морфем, в том числе суффикса -ск-, а в корне должно сохраняться. То есть самый логичный вариант - писать `беларусский`.<br/>Ну либо переходить на `Белорусь`, но...
P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт. P.s. естественно, всё это не касается официальных докемнтов, потому что там, как это ни странно, необходимо использовать литератный стандарт.
</div>

View File

@@ -0,0 +1,48 @@
---
layout: '../../layouts/index.astro'
title: 'Restoration of Synapse after losing 1 year of database history'
description: 'Restoration of Synapse after losing 1 year of database history'
keys: 'matrix synapse conduit postgres'
le: '19 Aug. 2025'
---
<div class="article">
## Introduction
In July 2025, my Synapse PostgreSQL had broken, so I needed to restore it from my 1-y.o. backup. I was thinking about what to do, and my friend sent me [this](https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/) article, so we understood what to do!
For example, there is a room called #example:example.org (roomid !example:example.org), whose member was @user:example.net.
The problem is that every server knows @user:example.net is in the room #example:example.org. But our server doesn't! So that is what we should aim at solving the problem.
## Architecture
We get 2 types of error messages:
- `synapse.handlers.receipts: [PUT-...] Ignoring receipt for room '!example:example.org' from server example.org as we're not in the room` (there is the same error message, but when you get a typing event from an unknown room)
- `synapse.federation.federation_server: [PUT-...] Ignoring PDU for unknown room_id: !example:example.org`
We can read the journal and parse the error message (I use a bash script to do that).
Okay, we have a room id! In the given article, the author is the only user of their server, so they can just send [POST /_matrix/client/v3/join/!example:example.org](https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias) request, and everything will be good.
But my server has multiple users, so I can't use the easiest way. We need to get information about membership (so we need to get state).
As we are admins of our servers, we have their signing keys.
We will need them because we are going to get state via Federation API requests.
How? There are different ways to do that.
However, all of them require at least 1 event id, so firstly we need to do [GET /_matrix/federation/v1/timestamp_to_event](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid).
Determining request parameters (?dir as direction (b[ackward] or f[orward]) and &ts as timestamp in Unix time format in milliseconds), we have just got either the last or the first event id! In my case, I chose the way of getting the last event, so then I'll have to make [GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid), and I will get the actual state.
Of course, both of the requests, as I said, should be signed using your server's key ([how to sign events](https://spec.matrix.org/v1.15/server-server-api/#signing-events)).
<br />
(There is no support of timestamp_to_event in Conduit, so it would be a good idea to make support of requesting different servers)
After we receive the state, we need to parse it, but I think this can't make a difficulty.
As a result, we have a list of our users that were in the given room, like ["@user:example.net", "@anotheruser:example.net", "@exampleuser:example.net"].
Then, the simplest way is to get temporary user's auth token via [POST /_synapse/admin/v1/users/user_id/login](https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user) and make [POST /_matrix/client/v3/join/!example:example.org](https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias) from the name of the user using their token.
The problem is solved!
## External links
- [Article that gave me the idea](https://blog.erethon.com/blog/2023/06/21/what-happens-when-a-matrix-server-disappears/)
- [Matrix Federation API docs](https://spec.matrix.org/v1.15/server-server-api/)
- [How to sign Federation API requests](https://spec.matrix.org/v1.15/server-server-api/#signing-events)
- [GET /_matrix/federation/v1/state/!example:example.org?event_id=$event_id](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1stateroomid)
- [GET /_matrix/federation/v1/timestamp_to_event](https://spec.matrix.org/v1.15/server-server-api/#get_matrixfederationv1timestamp_to_eventroomid)
- [Matrix Client API docs](https://spec.matrix.org/v1.15/server-server-api/)
- [POST /_matrix/client/v3/join/!example:example.org](https://spec.matrix.org/v1.15/client-server-api/#post_matrixclientv3joinroomidoralias)
- [Admin API POST /_synapse/admin/v1/users/user_id/login](https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/user_admin_api.md#login-as-a-user)
</div>

View File

@@ -1,7 +1,8 @@
--- ---
import Layout from '../layouts/index.astro' import Layout from '../layouts/index.astro'
import MatrixChat from '../components/matrixchat.astro'
--- ---
<Layout title="Contact"> <Layout title="Contact us" description="Contact nothing.run & nothing.run community">
<div class="asciicontainer"> <div class="asciicontainer">
<pre class="smaller"> <pre class="smaller">
__ __
@@ -33,11 +34,7 @@ import Layout from '../layouts/index.astro'
<div> <div>
<h2>Our chat</h2> <h2>Our chat</h2>
<p>Nothing.run has chat in Matrix. Join it to get information about downtimes and updates, help, to suggest something that could make nothing.run better</p> <MatrixChat />
<ul>
<li>Our Matrix space <a href="https://matrix.to/#/#nothingrun:nothing.run">#nothingrun:nothing.run</a></li>
<li>Our Matrix chat <a href="https://matrix.to/#/#localhost:nothing.run">#localhost:nothing.run</a></li>
</ul>
</div> </div>
</div> </div>
</Layout> </Layout>

View File

@@ -2,7 +2,6 @@
layout: '../layouts/index.astro' layout: '../layouts/index.astro'
title: 'Donate :3' title: 'Donate :3'
description: 'Donate us :3' description: 'Donate us :3'
keys: 'nothing crypto free software libre self host'
--- ---
import Service from '../components/service.astro'; import Service from '../components/service.astro';

View File

@@ -1,18 +1,35 @@
--- ---
layout: '../layouts/index.astro' layout: '../layouts/index.astro'
title: 'Matrix' title: 'Matrix'
description: 'Matrix' description: 'nothing.run-s matrix instance info'
keys: 'nothing crypto free software libre self host' keys: 'matrix element synapse messenger IM'
--- ---
import MatrixChat from '../components/matrixchat.astro';
[**Matrix**](https://matrix.org) is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available! [**Matrix**](https://matrix.org) is modern federative network for communication. That means that users from different servers can interact with each other. We host our own Matrix network server. There also is a great cross-plattform-client available!
## Login data
- Server name: nothing.run
- Server address: https://matrix.nothing.run
## Our room ## Our room
<MatrixChat />
## Clients ## Clients
### Web-clients ### Web-clients
- [Cinny](https://cinny.nothing.run) - modern and beautiful Matrix web client <div class="bigcontainer">
- [Element](https://element.nothing.run) - the most popular and functional Matrix client
<div class="matrixclient">
- [Cinny](https://cinny.nothing.run) - modern and beautiful Matrix web client
<img src="/cinny-preview.png" alt="Cinny preview" />
</div>
<div class="matrixclient">
- [Element](https://element.nothing.run) - the most popular and functional Matrix client
<img src="/element-preview.png" alt="Element preview" />
</div>
</div>
### Mobile clients ### Mobile clients
- [Element](https://github.com/element-hq/element-android) - very buggy and uncomfortable client - [Element](https://github.com/element-hq/element-android) - very buggy and uncomfortable client
@@ -22,10 +39,7 @@ keys: 'nothing crypto free software libre self host'
- [SchildiChat Next](https://schildi.chat/android/next/) - Element X with spaces support - [SchildiChat Next](https://schildi.chat/android/next/) - Element X with spaces support
### Desktop clients ### Desktop clients
- [iamb](https://iamb.chat/) - written in Rust terminal-based client with Vim keybindings - [iamb](https://iamb.chat/) & [gomuks](https://github.com/gomuks/gomuks) - written in Rust and Go terminal-based clients. iamb uses Vim-like keybindings
- [gomuks](https://github.com/gomuks/gomuks) - a terminal Matrix client written in Go - [Fractal](https://wiki.gnome.org/Apps/Fractal), [NeoChat](https://apps.kde.org/neochat/), [Nheko](https://nheko-reborn.github.io/) - nice desktop-oriented clients. Can be buggy sometimes
- You can use Element, Schildi and Cinny Web as desktop clients via Electron. It's a less performant way to message from Matrix, but... You can! :)
- [Ement.el](https://github.com/alphapapa/ement.el) - really? Are you so crazy to chat from Emacs??? - [Ement.el](https://github.com/alphapapa/ement.el) - really? Are you so crazy to chat from Emacs???
- [Fractal]
- [NeoChat]
- [Nheko]
- You can use Element, Schildi and Cinny Web as desktop clients through Electron. It's unperformance way to use Matrix, but... You can! :)

View File

@@ -2,9 +2,12 @@
layout: '../layouts/index.astro' layout: '../layouts/index.astro'
title: 'nothing.run' title: 'nothing.run'
description: 'Librehoster, crypto- and infoanarchysts, free software fans' description: 'Librehoster, crypto- and infoanarchysts, free software fans'
keys: 'nothing crypto free software libre self host'
--- ---
### 23 August 2025
- We have switched from Contabo nameservers to [Desec](https://desec.io)
### 9 August 2025 ### 9 August 2025
- There are [Gitea](https://tea.nothing.run) and [KaniDM](https://idm.nothing.run) right now - There are [Gitea](https://tea.nothing.run) and [KaniDM](https://idm.nothing.run) right now

View File

@@ -2,8 +2,10 @@
layout: '../layouts/index.astro' layout: '../layouts/index.astro'
title: 'nothing.run' title: 'nothing.run'
description: 'Tharys notes and articles' description: 'Tharys notes and articles'
keys: 'nothing crypto free software libre self host'
--- ---
## Linguistics ## Linguistics
- [Беларусский или белорусский](/articles/belarusian.html) - [Беларусский или белорусский](/articles/belarusian)
## Computers
- [Restoration of Synapse after losing 1 year of database history](/articles/synapse-revitalization-script)

View File

@@ -38,6 +38,7 @@ body {
font-optical-sizing: auto; font-optical-sizing: auto;
font-style: normal; font-style: normal;
height: 100vh; height: 100vh;
} }
ul, li { ul, li {
@@ -182,26 +183,27 @@ pre.smaller {
} }
#matrix { #matrix {
background-image: url("./assets/matrix.png"); background-image: url("/matrix.png");
} }
#gitea { #gitea {
background-image: url("./assets/gitea.png"); background-image: url("/gitea.png");
} }
#hedgedoc { #hedgedoc {
background-image: url("./assets/hedgedoc.png"); background-image: url("/hedgedoc.png");
} }
#kanidm { #kanidm {
background-image: url("./assets/kanidm.png"); background-image: url("/kanidm.png");
} }
.container { .container {
display: grid; display: grid;
/* margin: 0 auto; */ /* margin: 0 auto; */
padding: 10px; padding: 20px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
grid-column-gap: 10px; grid-column-gap: 20px;
/* grid-template-columns: auto auto auto; */ /* grid-template-columns: auto auto auto; */
/* grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); */
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
max-width: 1300px; max-width: 1300px;
} }
@@ -215,10 +217,14 @@ pre.smaller {
grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr)); grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
max-width: 1300px; max-width: 1300px;
} }
@media (min-width: 1570px) { @media (min-width: 1000px) {
.bigcontainer { .asciicontainer {
display: flex; grid-template-columns: 250px repeat(auto-fit, minmax(250px, 1fr));
gap: 50px; }
}
@media (max-width: 1000px) {
.asciicontainer {
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
} }
} }
@@ -226,3 +232,30 @@ pre.smaller {
margin-left: 10px; margin-left: 10px;
margin-right: 10px; margin-right: 10px;
} }
@media (min-width: 1570px) {
.bigcontainer {
display: flex;
gap: 50px;
}
}
@media (min-width: 1570px) {
.bigcontainer .matrixclient img {
width: 40vw;
height :auth;
}
}
@media (max-width: 1570px) {
.bigcontainer .matrixclient img {
width: 90vw;
height: auth;
}
}
.article {
padding-left: auto;
padding-right: auto;
margin: auto;
max-width: 1000px;
}