13 Commits

Author SHA1 Message Date
Sweetbread 8c36a3e3a6 Add some services 2025-10-11 02:06:30 +03:00
Sweetbread 4b6449a7a0 Change host info 2025-10-11 02:06:30 +03:00
Sweetbread 3fefa976ea Improve style
- Add more depth to .block
- Make footer lighter
- Stylize scrollbar
2025-10-11 02:06:30 +03:00
Sweetbread d0e38f14ac Add mine page 2025-10-11 02:06:30 +03:00
Sweetbread f56c7831ed style: change sizes to rem
Docker Build and Push / build-and-push (push) Successful in 2m5s
2025-09-04 19:15:27 +03:00
Sweetbread 01600d8e50 style: decrease margins 2025-09-04 17:31:32 +03:00
Sweetbread befb88d498 feat: add tracker script
Docker Build and Push / build-and-push (push) Successful in 1m9s
2025-08-18 14:25:44 +03:00
Sweetbread 217ba01f12 update host specs
Docker Build and Push / build-and-push (push) Successful in 1m10s
2025-08-18 14:20:23 +03:00
Sweetbread 96a3ca543b l10n: add en, de, ja and fr
Docker Build and Push / build-and-push (push) Successful in 3m16s
2025-08-18 14:15:53 +03:00
Sweetbread 3a5e991870 sec: add production server
Docker Build and Push / build-and-push (push) Successful in 1m31s
2025-08-07 21:18:49 +03:00
Sweetbread 5da241b62e ci: add docker-build 2025-08-07 21:16:59 +03:00
Sweetbread 74c4f1c1f8 feat: add dockerfile 2025-08-06 19:56:05 +03:00
Sweetbread f42d2f887f Init commit 2025-08-06 19:56:05 +03:00
40 changed files with 896 additions and 27 deletions
+33
View File
@@ -0,0 +1,33 @@
name: Docker Build and Push
on:
push:
branches: [master]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Registry
uses: docker/login-action@v2
with:
registry: g.codrs.ru
username: ${{ vars.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name == 'push' }}
tags: |
g.codrs.ru/${{ vars.DOCKER_USERNAME }}/codrs.ru:latest
g.codrs.ru/${{ vars.DOCKER_USERNAME }}/codrs.ru:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
+3
View File
@@ -4,3 +4,6 @@ __pycache__/
*.py[cod]
*$py.class
.python-version
static/style/*.css
static/style/*.css.map
+23
View File
@@ -0,0 +1,23 @@
FROM node:18-alpine as sass
RUN NODE_OPTIONS=--dns-result-order=ipv4first npm install -g sass
WORKDIR /build
COPY ./static/style ./style
RUN sass ./style:./style \
--no-source-map \
--style=compressed
FROM python:3.11-slim
WORKDIR /app
COPY . .
COPY --from=sass /build/style/ ./static/style/
RUN pip install --no-cache-dir -r requirements.txt
ENV FLASK_ENV=production
ENV PYTHONUNBUFFERED=1
CMD ["gunicorn", "app:app", "-b", "0.0.0.0:80", "--workers", "4"]
+73 -2
View File
@@ -1,7 +1,78 @@
from flask import Flask, render_template
from os import system as console
from configparser import ConfigParser
from flask import (
Flask,
g,
request,
render_template,
)
translations_cache = {}
def load_translations(lang):
if lang not in translations_cache:
translations_cache[lang] = {}
try:
config = ConfigParser()
config.read(f'locale/{lang}.ini')
for section in config.sections():
translations_cache[lang][section] = dict(config.items(section))
except:
pass
return translations_cache[lang]
def get_locale():
return request.accept_languages.best_match(('en', 'ru', 'de', 'fr', 'ja'), 'en')
app = Flask(__name__)
@app.before_request
def before_request():
g.locale = get_locale()
g.translations = load_translations(g.locale)
@app.context_processor
def inject_translations():
def translate(text, **kwargs):
if ":" in text:
section, key = text.split(":", 1)
else:
section, key = "common", text
template = g.translations \
.get(section, {}) \
.get(key, f"${section}: {key}$")
try:
return template.format(**kwargs)
except:
return template
return {'_': translate}
if app.debug:
console("sass static/style/main.scss static/style/main.css")
console("sass static/style/risdeveau.scss static/style/risdeveau.css")
@app.route("/")
def hello_world():
def index():
return render_template('index.html')
@app.route("/host")
def host():
return render_template('host.html')
@app.route("/us")
def us():
return render_template('us.html')
@app.route("/risdeveau")
def risdeveau():
return render_template('personal/risdeveau.html')
+25
View File
@@ -0,0 +1,25 @@
[common]
site source = Website-Quellcode
contact us = Kontakt
about us = Über uns
about host = Über Server
[index]
bottom_text = Außerdem bieten wir {glitchtip}, {baikal} und {freshrss} für Mitglieder unserer Gruppe an!
[index.descr]
sharkey = Föderierter Microblogging-Dienst auf Basis des ActivityPub-Protokolls
gitea = Open-Source, selbst gehosteter Git-Repository-Hoster
matrix = Föderierter Messenger
copyparty = Cloud-Dateispeicher
4get = Proxy-Suchmaschine
tools = Satz verschiedener Werkzeuge
vert = Dateiumwandler
[host]
hoster = Hosting-Anbieter
specifications = Spezifikationen
hoster_descr = Nicht schlecht, nicht teuer. In der Vergangenheit gab es Netzwerkprobleme.
+25
View File
@@ -0,0 +1,25 @@
[common]
site source = Site source
contact us = Contact us
about us = About us
about host = About host
[index]
bottom_text = We also have {glitchtip}, {baikal} and {freshrss} for members of our squad!
[index.descr]
sharkey = ActivityPub-based federated microblogging service
gitea = Opensource selfhosted Git repository hosting
matrix = federated instant messenger
copyparty = cloud file storage
4get = proxy search engine
tools = set of various tools
vert = file converter
[host]
hoster = Hosting Provider
specifications = Specifications
hoster_descr = Not bad, not expensive. There were network issues in the past
+25
View File
@@ -0,0 +1,25 @@
[common]
site source = Code source du site
contact us = Contacte-nous
about us = À propos de nous
about host = À propos de serveur
[index]
bottom_text = On a aussi {glitchtip}, {baikal} et {freshrss} pour les membres du groupe !
[index.descr]
sharkey = Service de microblogging fédéré avec ActivityPub
gitea = Hébergement de dépôts Git open source en auto-hébergé
matrix = Messagerie fédérée
copyparty = Stockage de fichiers en cloud
4get = Moteur de recherche proxy
tools = ensemble d'outils variés
vert = convertisseur de fichiers
[host]
hoster = Hébergeur
specifications = Spécifications
hoster_descr = Pas mal, pas cher. Y'a eu des soucis réseau avant.
+25
View File
@@ -0,0 +1,25 @@
[common]
site source = サイトのソースコード
contact us = 問い合わせ
about us = 私たちについて
about host = サーバーについて
[index]
bottom_text = メンバーには {glitchtip}、{baikal}、{freshrss} も使えるよ!
[index.descr]
sharkey = ActivityPubを使った連合型マイクロブログ
gitea = オープンソースのセルフホスティングGitリポジトリ
matrix = 連合型メッセンジャー
copyparty = クラウドファイルストレージ
4get = プロキシ検索エンジン
tools = 様々なツールのセット
vert = ファイル変換ツール
[host]
hoster = ホスティングプロバイダー
specifications = サーバーのスペック
hoster_descr = 悪くないし安い。前にネットワークの不具合があったんだ。
+25
View File
@@ -0,0 +1,25 @@
[common]
site source = Исходники сайта
contact us = Для связи
about us = О нас
about host = О хосте
[index]
bottom_text = Ещё у нас есть {glitchtip}, {baikal} и {freshrss} для участников нашей группы!
[index.descr]
sharkey = Федеративная микроблогинговая система поверх протокола ActivityPub
gitea = Selfhosted хранилище Git-репозиториев со свободным исходным кодом
matrix = федеративный мессенджер
copyparty = облачное хранилище файлов
4get = прокси-поисковик
tools = набор разнообразных утилит
vert = конвертация файлов
[host]
hoster = Хостер
specifications = Характеристики
hoster_descr = Неплохой, недорогой. В прошлом были проблемы с сетью
+1
View File
@@ -1 +1,2 @@
Flask==3.1.1
gunicorn
+2
View File
@@ -8,6 +8,8 @@ pkgs.mkShell {
buildInputs = with pypkgs; [
python
virtualenv
# pkgs.nodejs
pkgs.nodePackages.sass
];
shellHook = ''
Binary file not shown.
Binary file not shown.
+16
View File
@@ -0,0 +1,16 @@
M+ FONTS Copyright (C) 2002-2013 M+ FONTS PROJECT
-
LICENSE_E
These fonts are free software.
Unlimited permission is granted to use, copy, and distribute them, with
or without modification, either commercially or noncommercially.
THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY.
http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/
Binary file not shown.
+92
View File
@@ -0,0 +1,92 @@
Copyright © 2020-2023 GGBotNet (https://ggbot.net/fonts/), with Reserved Font Name "Pixeloid".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
Monocraft: https://idreesinc.itch.io/monocraft
Pixeloid: https://ggbot.itch.io/pixeloid-font
PixelM+: https://itouhiro.hatenablog.com/entry/20130602/font
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

+7
View File
@@ -0,0 +1,7 @@
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('.mono').forEach(element => {
element.addEventListener('click', async () => {
await navigator.clipboard.writeText(element.textContent);
});
});
});
+242
View File
@@ -0,0 +1,242 @@
@use "sass:color";
// Palette: Catppuccin Mocha
// https://catppuccin.com/palette/
$base: #1e1e2e;
$text: #cdd6f4;
$mantle: #181825;
$crust: #11111b;
$overlay0: #6c7086;
$overlay1: #7f849c;
$overlay2: #9399b2;
$surface0: #313244;
$surface1: #45475a;
$surface2: #585b70;
$subtext0: #a6adc8;
$subtext1: #bac2de;
$red: #f38ba8;
$green: #a6e3a1;
$peach: #fab387;
$blue: #89b4fa;
$mauve: #8839ef;
html {
height: 100%;
}
body {
display: flex;
flex-direction: column;
background-color: $base;
font-family: Pixeloid, PixelMPlus;
color: $text;
width: 100%;
height: 100%;
margin: 0;
}
main {
max-width: 45rem;
margin-inline: auto;
padding: 0 .5rem;
flex: 1 0 auto;
}
h1 {
text-align: center;
}
a {
color: unset;
text: {
decoration: underline {color: $blue};
underline-offset: 1px;
}
transition: 0.3s ease;
&:hover {
text-underline-offset: 3px;
}
&:active {
transition: none !important;
display: inline-block;
transform: scale(.98) !important;
background-color: $mantle !important;
}
&.block {
text-decoration: none;
&:hover {
transform: scale(1.02) translateY(-.25rem);
background-color: $surface1;
}
}
}
p {
margin: .5rem;
}
ul {
margin-top: .25rem;
}
header {
display: flex;
justify-content: space-between;
background-color: $mantle;
padding: .5rem;
font-size: larger;
}
footer {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
background-color: $mantle;
margin-top: 2rem;
padding: 1rem;
column-gap: 4ch;
}
.mono {
font-family: Monocraft, monospace;
background-color: $mantle;
border-radius: 2px;
padding: 0 .25rem;
color: $subtext0;
overflow-wrap: anywhere;
&:hover {
transition: .3s ease;
background-color: $crust;
}
}
.block {
display: block;
background-color: $surface0;
border-radius: .5rem;
padding: .5rem;
& + & {
margin-top: .5rem;
}
&.red {
background-color: color.mix($surface0, $red, 60%);
}
&.orange {
background-color: color.mix($surface0, $peach, 60%);
}
&.green {
background-color: color.mix($surface0, $green, 60%);
&:hover { background-color: color.mix($surface1, $green, 60%); }
&:active { background-color: color.mix($mantle, $green, 60%) !important; }
}
& .header {
display: flex;
align-items: center;
font-size: x-large;
.icon {
margin-right: .5ch;
}
}
}
.blocks {
display: flex;
flex-wrap: wrap;
margin-top: .5rem;
gap: .5rem;
& + &,
& + .block,
.block + & {
margin-top: .5rem;
}
.block {
margin-top: 0;
}
}
.badges {
.block {
flex: 1;
text-wrap-mode: nowrap;
text-align: -webkit-center;
&:hover {
flex: 1.5;
transform: none;
}
}
}
.icon {
width: 1.5em;
vertical-align: middle;
border-radius: .2em;
}
::-webkit-scrollbar {
width: .5rem;
&-button {
display: none;
}
&-track {
background-color: $base;
}
&-thumb {
background-color: $overlay0;
border-radius: .25rem;
&:hover {
background-color: $overlay1;
}
}
}
@font-face {
font-family: Monocraft;
src: url("/static/font/Monocraft.ttc");
}
@font-face {
font-family: Pixeloid;
src:
url("/static/font/Pixeloid/woff/Sans.woff2") format("woff2"),
url("/static/font/Pixeloid/otf/Sans.otf") format("opentype");
}
@font-face {
font-family: Pixeloid;
src:
url("/static/font/Pixeloid/woff/Sans-Bold.woff2") format("woff2"),
url("/static/font/Pixeloid/otf/Sans-Bold.otf") format("opentype");
font-weight: bold;
}
@font-face {
font-family: PixelMPlus;
src: url("/static/font/PixelMPlus/Regular.ttf");
}
@font-face {
font-family: PixelMPlus;
src: url("/static/font/PixelMPlus/Bold.ttf");
font-weight: bold;
}
+33
View File
@@ -0,0 +1,33 @@
h3 {
margin-block-end: 0;
}
.qr {
img { width: 100% }
p { text-align: center; }
&.blocks {
flex-wrap: nowrap;
overflow-x: auto;
width: calc(100vw - 1rem);
max-width: 45rem;
scroll: {
behavior: smooth;
snap-type: x mandatory;
}
&::-webkit-scrollbar { display: none; }
&:hover .block.qr:not(:hover) {
filter: blur(5px);
transition: all 0.3s ease;
}
}
&.block {
flex: 0 0 calc(100vw - 2rem);
scroll-snap-align: start;
max-width: 13.666rem;
}
}
+27
View File
@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title>Coders Squad</title>
<link rel="stylesheet" href="/static/style/main.css">
<link rel="icon" type="image/webp" href="/static/icon/codrs.webp" />
<script src="/static/script/copy-mono.js"> </script>
<script
src="https://track.codrs.ru/api/script.js"
data-site-id="1"
defer
></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
{% include 'header.tmpl' %}
<h1>{% block title %}{% endblock %}</h1>
<main>
{% block content %}{% endblock %}
</main>
{% include 'footer.tmpl' %}
</body>
</html>
+5
View File
@@ -0,0 +1,5 @@
<footer>
<div>codrs.ru &#169; 2025</div>
<div><a href="https://g.codrs.ru/Sweetbread/codrs.ru">{{ _('site source') }}</a></div>
<div>{{ _('contact us') }}: <a href="mailto:admin@codrs.ru">admin@codrs.ru</a></div>
</footer>
+20
View File
@@ -0,0 +1,20 @@
<header>
{%- if request.path != url_for('index') %}
<a href="{{ url_for('index') }}">Coders Squad</a>
{%- else %}
<div></div>
{%- endif %}
<div class="header-links">
{%- for (l, t) in (
('us', _('about us')),
('host', _('about host'))
) %}
{%- if url_for(l) == request.path %}
<strong>{{ t }}</strong>
{%- else %}
<a href="{{ url_for(l) }}">{{ t }}</a>
{%- endif %}
{%- endfor %}
</div>
</header>
+21
View File
@@ -0,0 +1,21 @@
{% extends 'base.tmpl' %}
{% block title %}{{ _('about host') }}{% endblock %}
{% block content %}
<a href="https://play2go.cloud/?ref_id=4baFoOIp5QE" target="_blank" class="block">
<strong>{{ _("host:hoster") }}</strong>: play2go
<p>{{ _('host:hoster_descr') }}</p>
</a>
<div class="block">
<strong>{{ _("host:specifications") }}</strong>:
<ul>
<li>CPU: Ryzen i9@3.4GHz (4 cores)</li>
<li>RAM: 8 GiB</li>
<li>SSD: 150 GB</li>
<li>ETH: 500Mb/s</li>
<li>Loc: Deutchland, Frankfurt am Mein</li>
</ul>
</div>
{% endblock %}
+53 -25
View File
@@ -1,28 +1,56 @@
<html>
<head>
<title>Coders Squad</title>
</head>
<body>
<h1>Coders Squad</h1>
{% extends 'base.tmpl' %}
<h2>Сервисы</h2>
{% block title %}
<img src="/static/icon/codrs.webp" class="icon" />
Coders Squad
{% endblock %}
<h3>Сайты</h3>
{% block content %}
<a href="https://b.codrs.ru" target="_blank" class="block">
<div class="header">
<img src="/static/icon/service/sharkey.webp" class="icon"/>
<strong>Sharkey</strong>
</div>
<p>{{ _('index.descr:sharkey') }}</p>
</a>
<a href="https://g.codrs.ru" target="_blank" class="block">
<div class="header">
<img src="/static/icon/service/gitea.webp" class="icon"/>
<strong>Gitea</strong>
</div>
<p>{{ _('index.descr:gitea') }}</p>
</a>
<ul>
<li>
<a href="http://b.codrs.ru">Sharkey</a>
&mdash; федеративная соц. сеть
</li>
<li>
<a href="http://g.codrs.ru">Gitea</a>
&mdash; хостинг репозиториев
</li>
<li>Peertube &mdash; федеративный хостинг видео</li>
<li>
<a href="http://s.codrs.ru">4get</a>
&mdash; прокси-поисковик
</li>
</ul>
</body>
</html>
<div class="block">
<p><a href="https://m.codrs.ru" target="_blank"><strong>Matrix</strong></a> &mdash; {{ _('index.descr:matrix') }}</p>
<p><a href="https://c.codrs.ru" target="_blank"><strong>Copyparty</strong></a> &mdash; {{ _('index.descr:copyparty') }}</p>
<p><a href="https://s.codrs.ru" target="_blank"><strong>4get</strong></a> &mdash; {{ _('index.descr:4get') }}</p>
<p><a href="https://tools.codrs.ru" target="_blank"><strong>IT-tools</strong></a> &mdash; {{ _('index.descr:tools') }}</p>
<p><a href="https://vert.codrs.ru" target="_blank"><strong>Vert</strong></a> &mdash; {{ _('index.descr:vert') }}</p>
</div>
<div class="block">
<div>
<strong>DNS</strong>:
<ul>
<li><span class="mono">64.188.64.176</span></li>
<li>DoT: <span class="mono">codrs.ru:853</span></li>
<li>DoH: <span class="mono">dns.codrs.ru</span></li>
</ul>
</div>
<p>
<strong>Yggdrasil</strong>:
<span class="mono">200:ee1:bad2:1732:4b91:c3e3:2f08:29b3</span>
</p>
</div>
<div class="block">
{{
_('index:bottom_text',
glitchtip='<a href="https://bug.codrs.ru" target="_blank"><strong>GlitchTip</strong></a>',
baikal='<a href="https://dav.codrs.ru" target="_blank"><strong>Baikal</strong></a>',
freshrss='<a href="https://rss.codrs.ru" target="_blank"><strong>FreshRSS</strong></a>',
) | safe
}}
</div>
{% endblock %}
+88
View File
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html>
<head>
<title>Sweet Bread</title>
<link rel="stylesheet" href="/static/style/main.css">
<link rel="stylesheet" href="/static/style/risdeveau.css">
<link rel="icon" type="image/webp" href="/static/icon/us/risdeveau.webp" />
<script
src="https://track.codrs.ru/api/script.js"
data-site-id="1"
defer
></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header>
<a href="{{ url_for('index') }}">Coders Squad</a>
</header>
<main>
<h3>Development</h3>
<div class="blocks badges">
<a class="block" href="//g.codrs.ru/Sweetbread">
<img class="icon" src="/static/icon/service/gitea.webp" />
Gitea
</a>
<a class="block" href="https://github.com/VerySweetBread">
<img class="icon" src="https://github.githubassets.com/assets/GitHub-Mark-ea2971cee799.png" />
GitHub
</a>
<a class="block" href="https://git.kolibrios.org/Sweetbread">
<img class="icon" src="https://git.kolibrios.org/assets/img/logo.svg" />
KolibriOS Git
</a>
</div>
<h3>Contacts</h3>
<div class="blocks badges">
<a class="block" href="https://matrix.to/#/@risdeveau:codrs.ru">
<img class="icon" src="https://matrix.org/assets/favicon.ico" />
Matrix
</a>
<a class="block" href="//b.codrs.ru/@risdeveau">
<img class="icon" src="/static/icon/service/sharkey.webp" />
Fediverse
</a>
<a class="block" href="https://discord.com/users/459823895256498186">
<img class="icon" src="https://cdn.prod.website-files.com/6257adef93867e50d84d30e2/66e3d80db9971f10a9757c99_Symbol.svg" />
Discord
</a>
<a class="block" href="mailto:risdeveau@codrs.ru">
Mail
</a>
</div>
<h3>Game accounts</h3>
<div class="blocks badges">
<a class="block" href="https://steamcommunity.com/id/risdeveau">
<img class="icon" src="https://store.steampowered.com/favicon.ico" />
Steam
</a>
<a class="block" href="https://gamebanana.com/members/3899828">
<img class="icon" src="https://images.gamebanana.com/static/img/favicon/favicon.ico" />
GameBanana
</a>
</div>
<h3>Wallets</h3>
<div class="blocks qr">
<div class="block qr">
<p>POL, BNB</p>
<img src="/static/img/risdeveau/wallets/evm.webp">
</div>
<div class="block qr">
<p>TON</p>
<img src="/static/img/risdeveau/wallets/ton.webp">
</div>
<div class="block qr">
<p>XMR</p>
<img src="/static/img/risdeveau/wallets/xmr.webp">
</div>
</div>
</main>
</body>
</html>
+29
View File
@@ -0,0 +1,29 @@
{% extends 'base.tmpl' %}
{% block title %}О нас{% endblock %}
{% block content %}
<a href="{{ url_for('risdeveau') }}" class="block green">
<div class="header">
<img src="/static/icon/us/risdeveau.webp" class="icon"/>
Sweetbread
</div>
Главный админ, занимается почти всеми сервисами. Создал этот сайт
</a>
<div class="block red">
<div class="header">
<img src="/static/icon/us/zxcqirara.webp" class="icon"/>
zxcqirara
</div>
Второй админ, занимается майном и VPN
</div>
<div class="block orange">
<div class="header">
<img src="/static/icon/us/chest.webp" class="icon"/>
Chest
</div>
Должна была помогать делать этот сайт
</div>
{% endblock %}