mirror of
https://github.com/MShverdiakov/souchastnik.git
synced 2026-10-03 03:16:02 +00:00
страница для GitHub Pages
This commit is contained in:
parent
b0f2c8a40f
commit
87aa366ea1
2 changed files with 207 additions and 0 deletions
0
.nojekyll
Normal file
0
.nojekyll
Normal file
207
index.html
Normal file
207
index.html
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Соучастник — клавиатура, которая называет статью</title>
|
||||
<meta name="description" content="Android-клавиатура, которая показывает, какой срок вы получите за то, что пишете в интернете. ИИ-модель работает целиком на устройстве, разрешения на интернет у приложения нет.">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta property="og:title" content="Соучастник">
|
||||
<meta property="og:description" content="Помогает разобраться, какой срок вы получите за то, что пишете в интернете. Всё считается на устройстве, интернета у приложения нет.">
|
||||
<meta property="og:type" content="website">
|
||||
<style>
|
||||
:root {
|
||||
--red: #C0392B;
|
||||
--bg: #F7F7F8;
|
||||
--ink: #17171A;
|
||||
--muted: #6E6E74;
|
||||
--rule: #E2E2E5;
|
||||
--card: #FFFFFF;
|
||||
--strip-bg: #17171A;
|
||||
--strip-admin: #D8A200;
|
||||
--key: #2B2B2E;
|
||||
--key-ink: #F2F2F2;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--bg: #17171A;
|
||||
--ink: #F2F2F2;
|
||||
--muted: #8A8A90;
|
||||
--rule: #2E2E33;
|
||||
--card: #1E1E22;
|
||||
}
|
||||
}
|
||||
* { box-sizing: border-box; }
|
||||
html { -webkit-text-size-adjust: 100%; }
|
||||
body {
|
||||
margin: 0;
|
||||
background: var(--bg);
|
||||
color: var(--ink);
|
||||
font: 16px/1.6 system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
|
||||
padding: 0 20px 72px;
|
||||
}
|
||||
main { max-width: 46rem; margin: 0 auto; }
|
||||
a { color: var(--red); }
|
||||
code, pre {
|
||||
font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", monospace;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
code {
|
||||
background: var(--card); border: 1px solid var(--rule);
|
||||
border-radius: 4px; padding: 0.1em 0.35em;
|
||||
}
|
||||
pre {
|
||||
background: var(--card); border: 1px solid var(--rule); border-radius: 8px;
|
||||
padding: 14px 16px; overflow-x: auto; line-height: 1.5;
|
||||
}
|
||||
pre code { background: none; border: 0; padding: 0; }
|
||||
|
||||
/* шапка */
|
||||
header { padding: 64px 0 8px; }
|
||||
.lockup { display: flex; align-items: center; gap: 16px; }
|
||||
.lockup svg { width: 56px; height: 52px; flex: none; }
|
||||
h1 { font-size: 2rem; letter-spacing: -0.02em; margin: 0; font-weight: 650; }
|
||||
.tagline { font-size: 1.25rem; line-height: 1.45; margin: 24px 0 0; max-width: 32rem; }
|
||||
.disclaimer { color: var(--muted); font-size: 0.9375rem; margin: 16px 0 0; }
|
||||
|
||||
/* скачать */
|
||||
.get { margin: 0; display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
|
||||
.btn {
|
||||
display: inline-block; background: var(--red); color: #fff; text-decoration: none;
|
||||
font-weight: 600; font-size: 1.0625rem; padding: 13px 26px; border-radius: 8px;
|
||||
}
|
||||
.btn:hover { background: #A93226; }
|
||||
.get dl { margin: 0; font-size: 0.875rem; color: var(--muted); }
|
||||
.get dl div { display: flex; gap: 6px; }
|
||||
.get dt::after { content: ":"; }
|
||||
.get dd { margin: 0; color: var(--ink); }
|
||||
|
||||
/* демо */
|
||||
figure.demo { margin: 36px 0 0; }
|
||||
.phone {
|
||||
max-width: 22rem; background: var(--strip-bg); border-radius: 14px;
|
||||
overflow: hidden; border: 1px solid var(--rule);
|
||||
}
|
||||
.field { padding: 18px 14px 22px; color: #F2F2F2; font-size: 0.9375rem; background: #202024; }
|
||||
.field .caret { border-left: 2px solid var(--strip-admin); margin-left: 1px; }
|
||||
.strip {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
padding: 7px 10px; background: var(--strip-bg);
|
||||
border-top: 1px solid #26262B; border-bottom: 1px solid #26262B;
|
||||
}
|
||||
.strip .verdict {
|
||||
flex: 1; font-size: 0.8125rem; color: var(--strip-admin);
|
||||
white-space: nowrap; overflow: hidden;
|
||||
}
|
||||
.strip .toggle { color: var(--strip-admin); font-size: 1rem; }
|
||||
.keys { padding: 6px 4px 10px; display: grid; gap: 5px; }
|
||||
.keys .row { display: grid; grid-auto-flow: column; gap: 4px; justify-content: center; }
|
||||
.keys .row.mid { padding: 0 14px; }
|
||||
.keys .row.low { padding: 0 28px; }
|
||||
.keys span {
|
||||
background: var(--key); color: var(--key-ink); border-radius: 4px;
|
||||
text-align: center; padding: 7px 0; font-size: 0.75rem; min-width: 1.55rem;
|
||||
}
|
||||
figcaption { color: var(--muted); font-size: 0.8125rem; margin-top: 12px; max-width: 30rem; }
|
||||
|
||||
/* текст */
|
||||
section { margin: 56px 0 0; }
|
||||
h2 { font-size: 1.3125rem; margin: 0 0 14px; letter-spacing: -0.01em; }
|
||||
p { margin: 0 0 14px; }
|
||||
.note { color: var(--muted); font-size: 0.9375rem; }
|
||||
.table-wrap { overflow-x: auto; }
|
||||
table { border-collapse: collapse; width: 100%; font-size: 0.9375rem; }
|
||||
th, td {
|
||||
text-align: left; vertical-align: top;
|
||||
padding: 12px 16px 12px 0; border-bottom: 1px solid var(--rule);
|
||||
}
|
||||
th { white-space: nowrap; width: 9rem; font-weight: 600; }
|
||||
blockquote {
|
||||
margin: 24px 0 0; padding-left: 16px;
|
||||
border-left: 2px solid var(--rule); color: var(--muted);
|
||||
}
|
||||
footer {
|
||||
margin: 72px 0 0; padding-top: 24px; border-top: 1px solid var(--rule);
|
||||
color: var(--muted); font-size: 0.875rem;
|
||||
}
|
||||
footer p { margin: 0 0 8px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
|
||||
<header>
|
||||
<div class="lockup">
|
||||
<svg viewBox="28 30 52 48" role="img" aria-label="Соучастник">
|
||||
<path d="M37,32 H61 A7,7 0 0 1 68,39 V59 A7,7 0 0 1 61,66 H37 A7,7 0 0 1 30,59 V39 A7,7 0 0 1 37,32 Z" fill="#C0392B"/>
|
||||
<path d="M47,42 H71 A7,7 0 0 1 78,49 V69 A7,7 0 0 1 71,76 H47 A7,7 0 0 1 40,69 V49 A7,7 0 0 1 47,42 Z" fill="#2B2B2E" stroke="#3B3B40" stroke-width="1"/>
|
||||
<path d="M59.10 68.03L59.10 68.03Q57.21 68.03 56.11 67.31Q55.01 66.60 54.57 65.33Q54.13 64.06 54.13 62.38L54.13 62.38L54.13 56.27Q54.13 54.50 54.57 53.23Q55.01 51.96 56.11 51.27Q57.21 50.57 59.10 50.57L59.10 50.57Q60.93 50.57 61.97 51.18Q63.01 51.79 63.44 52.91Q63.87 54.02 63.87 55.49L63.87 55.49L63.87 56.92L60.51 56.92L60.51 55.32Q60.51 54.73 60.45 54.22Q60.39 53.70 60.10 53.38Q59.82 53.05 59.13 53.05L59.13 53.05Q58.43 53.05 58.12 53.39Q57.80 53.72 57.72 54.26Q57.63 54.80 57.63 55.45L57.63 55.45L57.63 63.17Q57.63 63.89 57.75 64.42Q57.87 64.96 58.19 65.24Q58.52 65.53 59.13 65.53L59.13 65.53Q59.80 65.53 60.08 65.20Q60.36 64.88 60.44 64.33Q60.51 63.78 60.51 63.17L60.51 63.17L60.51 61.52L63.87 61.52L63.87 62.92Q63.87 64.41 63.45 65.56Q63.03 66.70 62.00 67.36Q60.97 68.03 59.10 68.03Z" fill="#F2F2F2"/>
|
||||
</svg>
|
||||
<h1>Соучастник</h1>
|
||||
</div>
|
||||
<p class="tagline">Клавиатура для Android. Показывает, какой срок вы получите за то, что пишете.</p>
|
||||
<p class="disclaimer">Это не юридическая консультация. Настоящий суд смешнее. AI can make mistakes.</p>
|
||||
</header>
|
||||
|
||||
<figure class="demo">
|
||||
<div class="phone" aria-hidden="true">
|
||||
<div class="field">да ты дурак совсем<span class="caret"> </span></div>
|
||||
<div class="strip">
|
||||
<span class="verdict">ст. 5.61 КоАП · оскорбление · 3–5 тыс ₽</span>
|
||||
<span class="toggle">◉</span>
|
||||
</div>
|
||||
<div class="keys">
|
||||
<div class="row"><span>й</span><span>ц</span><span>у</span><span>к</span><span>е</span><span>н</span><span>г</span><span>ш</span><span>щ</span><span>з</span><span>х</span></div>
|
||||
<div class="row mid"><span>ф</span><span>ы</span><span>в</span><span>а</span><span>п</span><span>р</span><span>о</span><span>л</span><span>д</span><span>ж</span></div>
|
||||
<div class="row low"><span>я</span><span>ч</span><span>с</span><span>м</span><span>и</span><span>т</span><span>ь</span><span>б</span><span>ю</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<figcaption>Тумблер справа выключает разбор.</figcaption>
|
||||
</figure>
|
||||
|
||||
<section id="privacy">
|
||||
<h2>Приватность</h2>
|
||||
<p><strong>Разрешения <code>INTERNET</code> нет.</strong> Приложение не может отправить наружу ни байта. Модель работает на устройстве, поля с паролями не разбираются.</p>
|
||||
<p class="note">Проверьте сами, список разрешений должен быть пустым:</p>
|
||||
<pre><code>aapt dump permissions souchastnik-1.0-arm64-v8a.apk</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="get">
|
||||
<div class="get">
|
||||
<a class="btn" href="https://github.com/MShverdiakov/souchastnik/releases/latest">Скачать APK</a>
|
||||
<dl>
|
||||
<div><dt>Размер</dt><dd>473 МБ</dd></div>
|
||||
<div><dt>Требования</dt><dd>Android 9+, arm64</dd></div>
|
||||
<div><dt>Версия</dt><dd>1.0</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="how">
|
||||
<h2>Как это работает</h2>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>Модель</th><td>Qwen3.5-0.8B, квантованная, на llama.cpp</td></tr>
|
||||
<tr><th>Кандидаты</th><td>словарь триггеров сужает список статей, модель решает, есть ли состав</td></tr>
|
||||
<tr><th>Скорость</th><td>4–6 с на фразу; без dotprod (Cortex-A53/A73) 15–20 с</td></tr>
|
||||
<tr><th>Память</th><td>хватает 4 ГБ RAM</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="limits">
|
||||
<h2>Границы</h2>
|
||||
<p>Приложение констатирует, а не помогает обойти. Выдуманных статей нет: за VPN и Telegram не сажают.</p>
|
||||
<p>Словаря триггеров в репозитории нет: за него могут посадить меня. Могу выдать по запросу.</p>
|
||||
<blockquote>за идею спасибо ув. Кибердед и ув. Лука Ебков</blockquote>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p>GPL-3.0. Делайте что хотите. <a href="https://github.com/MShverdiakov/souchastnik">Исходный код</a></p>
|
||||
</footer>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue