587 lines
33 KiB
HTML
587 lines
33 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru" data-theme="dark" data-radius="medium">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<meta
|
||
name="description"
|
||
content="Николай Мамадаев, AI-разработник. Делаю целые продукты: Telegram-боты, MCP-серверы, плагины для Figma и Obsidian, desktop-утилиты."
|
||
/>
|
||
<title>AI-разработка · Николай Мамадаев</title>
|
||
<script>
|
||
(function () {
|
||
var FONT_CSS = {
|
||
merriweather: "/assets/fonts/merriweather.css",
|
||
geologica: "/assets/fonts/geologica.css",
|
||
mono: "/assets/fonts/mono.css",
|
||
};
|
||
try {
|
||
var t = JSON.parse(localStorage.getItem("siteThemeV1") || "{}");
|
||
var d = document.documentElement;
|
||
var m = t.mode;
|
||
if (m !== "light" && m !== "dark" && m !== "system") m = "system";
|
||
var eff =
|
||
m === "system"
|
||
? window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches
|
||
? "dark"
|
||
: "light"
|
||
: m;
|
||
d.dataset.theme = eff;
|
||
var DEF = { h: 210, s: 90, l: 40 };
|
||
function pickAccent(o) {
|
||
if (!o) return null;
|
||
var h = typeof o.h === "number" ? o.h : typeof o.hue === "number" ? o.hue : null;
|
||
var s = typeof o.s === "number" ? o.s : typeof o.sat === "number" ? o.sat : null;
|
||
var l = typeof o.l === "number" ? o.l : typeof o.light === "number" ? o.light : null;
|
||
if (h === null && s === null && l === null) return null;
|
||
return {
|
||
h: h === null ? DEF.h : h,
|
||
s: s === null ? DEF.s : Math.min(100, Math.max(30, s)),
|
||
l: l === null ? DEF.l : Math.min(70, Math.max(20, l)),
|
||
};
|
||
}
|
||
// Текущий формат: отдельный акцент для светлой и тёмной темы ({light, dark}).
|
||
// Старый плоский формат ({h, s, l}) остаётся совместимым.
|
||
var acc =
|
||
pickAccent(eff === "dark" ? t.dark : t.light) ||
|
||
pickAccent(eff === "dark" ? t.light : t.dark) ||
|
||
pickAccent(t) ||
|
||
DEF;
|
||
d.style.setProperty("--theme-h", String(acc.h));
|
||
d.style.setProperty("--theme-s", String(acc.s));
|
||
d.style.setProperty("--theme-l", String(acc.l));
|
||
var H = (((acc.h % 360) + 360) % 360) / 360;
|
||
var S = Math.min(100, Math.max(0, acc.s)) / 100;
|
||
var Lv = Math.min(100, Math.max(0, acc.l)) / 100;
|
||
var r, g, b;
|
||
if (S === 0) { r = g = b = Lv; }
|
||
else {
|
||
var q = Lv < 0.5 ? Lv * (1 + S) : Lv + S - Lv * S;
|
||
var p = 2 * Lv - q;
|
||
var hue2rgb = function(p, q, t) {
|
||
if (t < 0) t += 1; if (t > 1) t -= 1;
|
||
if (t < 1/6) return p + (q - p) * 6 * t;
|
||
if (t < 1/2) return q;
|
||
if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;
|
||
return p;
|
||
};
|
||
r = hue2rgb(p, q, H + 1/3);
|
||
g = hue2rgb(p, q, H);
|
||
b = hue2rgb(p, q, H - 1/3);
|
||
}
|
||
var lum = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
||
d.style.setProperty("--on-accent", lum > 0.58 ? "hsl(220 14% 12%)" : "hsl(0 0% 98%)");
|
||
var rad = t.radius;
|
||
if (rad === "soft" || rad === "medium" || rad === "strong") {
|
||
d.dataset.radius = rad;
|
||
} else {
|
||
d.dataset.radius = "medium";
|
||
}
|
||
var f = t.font;
|
||
if (f === "onest") f = "geologica";
|
||
if (f === "anonymous") f = "mono";
|
||
if (f !== "merriweather" && f !== "mono" && f !== "geologica") f = "geologica";
|
||
d.dataset.font = f;
|
||
var mb = t.meshBg;
|
||
if (mb === "off") {
|
||
d.dataset.meshBg = "off";
|
||
} else {
|
||
d.dataset.meshBg = "on";
|
||
}
|
||
var href = FONT_CSS[f];
|
||
if (href && !document.querySelector('link[data-theme-font="' + f + '"]')) {
|
||
var link = document.createElement("link");
|
||
link.rel = "stylesheet";
|
||
link.href = href;
|
||
link.setAttribute("data-theme-font", f);
|
||
document.head.appendChild(link);
|
||
}
|
||
} catch (e) {}
|
||
})();
|
||
</script>
|
||
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32.png" />
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16.png" />
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png" />
|
||
<link rel="manifest" href="/assets/favicon/site.webmanifest" />
|
||
<link rel="preload" href="/assets/fonts/merriweather.css" as="style" />
|
||
<link rel="preload" href="/css/main.css" as="style" />
|
||
<link rel="preload" href="/js/skill-connectors.js" as="script" />
|
||
<link rel="modulepreload" href="/js/main.js" />
|
||
<link rel="modulepreload" href="/js/modules/ui/page-mesh-shader.js" />
|
||
<link rel="stylesheet" href="/css/main.css" />
|
||
<link rel="canonical" href="https://mamadaevv.site/ai-dev/" />
|
||
<link rel="alternate" hreflang="ru" href="https://mamadaevv.site/ai-dev/" />
|
||
<link rel="alternate" hreflang="en" href="https://mamadaevv.site/ai-dev/" />
|
||
<link rel="alternate" hreflang="x-default" href="https://mamadaevv.site/ai-dev/" />
|
||
<meta name="author" content="Николай Мамадаев" />
|
||
<meta name="robots" content="index, follow" />
|
||
<meta name="theme-color" content="#0f1115" />
|
||
|
||
<!-- Open Graph -->
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:site_name" content="Николай Мамадаев — продуктовый дизайнер" />
|
||
<meta property="og:locale" content="ru_RU" />
|
||
<meta property="og:locale:alternate" content="en_US" />
|
||
<meta property="og:title" content="AI-разработка · Николай Мамадаев" />
|
||
<meta property="og:description" content="Николай Мамадаев, AI-разработник. Делаю целые продукты: Telegram-боты, MCP-серверы, плагины для Figma и Obsidian, desktop-утилиты." />
|
||
<meta property="og:url" content="https://mamadaevv.site/ai-dev/" />
|
||
<meta property="og:image" content="https://mamadaevv.site/assets/og/og-default.png" />
|
||
<meta property="og:image:width" content="1200" />
|
||
<meta property="og:image:height" content="630" />
|
||
<meta property="og:image:alt" content="AI-разработка · Николай Мамадаев" />
|
||
|
||
<!-- Twitter / X -->
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:title" content="AI-разработка · Николай Мамадаев" />
|
||
<meta name="twitter:description" content="Николай Мамадаев, AI-разработник. Делаю целые продукты: Telegram-боты, MCP-серверы, плагины для Figma и Obsidian, desktop-утилиты." />
|
||
<meta name="twitter:image" content="https://mamadaevv.site/assets/og/og-default.png" />
|
||
<meta name="twitter:image:alt" content="AI-разработка · Николай Мамадаев" />
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@graph": [
|
||
{
|
||
"@type": "Person",
|
||
"@id": "https://mamadaevv.site/#person",
|
||
"name": "Николай Мамадаев",
|
||
"url": "https://mamadaevv.site",
|
||
"jobTitle": "Продуктовый дизайнер",
|
||
"description": "Продуктовый дизайнер с опытом более 10 лет. Проектирую цифровые продукты, интерфейсы и дизайн-системы.",
|
||
"knowsAbout": [
|
||
"UX/UI-дизайн",
|
||
"продуктовый дизайн",
|
||
"дизайн-системы",
|
||
"прототипирование",
|
||
"Figma",
|
||
"no-code"
|
||
],
|
||
"sameAs": [
|
||
"https://t.me/mamadaevv",
|
||
"https://vk.com/mamadaevv",
|
||
"https://github.com/mamadaevv"
|
||
]
|
||
},
|
||
{
|
||
"@type": "WebSite",
|
||
"@id": "https://mamadaevv.site/#website",
|
||
"url": "https://mamadaevv.site/",
|
||
"name": "Николай Мамадаев — продуктовый дизайнер",
|
||
"inLanguage": "ru",
|
||
"author": {
|
||
"@id": "https://mamadaevv.site/#person"
|
||
},
|
||
"publisher": {
|
||
"@id": "https://mamadaevv.site/#person"
|
||
}
|
||
},
|
||
{
|
||
"@type": "WebPage",
|
||
"@id": "https://mamadaevv.site/ai-dev/#page",
|
||
"url": "https://mamadaevv.site/ai-dev/",
|
||
"name": "AI-разработка · Николай Мамадаев",
|
||
"description": "Николай Мамадаев, AI-разработник. Делаю целые продукты: Telegram-боты, MCP-серверы, плагины для Figma и Obsidian, desktop-утилиты.",
|
||
"isPartOf": {
|
||
"@id": "https://mamadaevv.site/#website"
|
||
},
|
||
"author": {
|
||
"@id": "https://mamadaevv.site/#person"
|
||
},
|
||
"inLanguage": "ru"
|
||
},
|
||
{
|
||
"@type": "BreadcrumbList",
|
||
"@id": "https://mamadaevv.site/ai-dev/#breadcrumbs",
|
||
"itemListElement": [
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 1,
|
||
"name": "Николай Мамадаев — продуктовый дизайнер",
|
||
"item": "https://mamadaevv.site/"
|
||
},
|
||
{
|
||
"@type": "ListItem",
|
||
"position": 2,
|
||
"name": "AI-разработка · Николай Мамадаев",
|
||
"item": "https://mamadaevv.site/ai-dev/"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
</script>
|
||
|
||
<script src="/js/skill-connectors.js" defer></script>
|
||
<script type="module" src="/js/main.js"></script>
|
||
|
||
|
||
<link rel="stylesheet" href="/vendor/plyr/plyr.css" />
|
||
|
||
<style>
|
||
/* Локальные правила страницы. Всё остальное — компоненты дизайн-системы:
|
||
.contact-grid (сетка), .mp-card (карточка), .filter-chips (переключатель),
|
||
.mp-card__tags/.mp-card__tag (метаданные), .case-links-grid (ссылки),
|
||
.hero__tags/.hero__tag (список навыков). */
|
||
.ai-page {
|
||
max-width: 52rem;
|
||
margin: 0 auto;
|
||
}
|
||
.ai-page h2 {
|
||
margin: 2.25rem 0 0.85rem;
|
||
font-size: clamp(1.15rem, 2vw, 1.35rem);
|
||
font-weight: 700;
|
||
color: var(--text);
|
||
}
|
||
.ai-page .section__prose {
|
||
margin-bottom: 0.75rem;
|
||
color: var(--text);
|
||
}
|
||
.ai-page a:not(.btn) {
|
||
color: var(--accent);
|
||
}
|
||
/* Сетка проектов: контракт .contact-grid, но 2 колонки и шире минимальная
|
||
колонка — карточкам нужен воздух. Сама сетка и её адаптив из системы. */
|
||
.ai-projects {
|
||
grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
|
||
margin-bottom: 0;
|
||
}
|
||
/* Обложка- заглушка внутри карточки. */
|
||
.ai-projects__media {
|
||
border-radius: var(--radius-sm);
|
||
overflow: hidden;
|
||
border: 1px solid var(--line);
|
||
margin-bottom: 0.7rem;
|
||
background: var(--bg-elevated);
|
||
}
|
||
.ai-projects__media img {
|
||
display: block;
|
||
width: 100%;
|
||
height: auto;
|
||
aspect-ratio: 16 / 10;
|
||
object-fit: cover;
|
||
}
|
||
/* Стек проекта — моноширинный, как .filter-chip__count в системе. */
|
||
.ai-projects__stack {
|
||
margin: 0;
|
||
font-family: var(--font-mono, ui-monospace, monospace);
|
||
font-size: 0.76rem;
|
||
line-height: 1.4;
|
||
color: var(--text-muted);
|
||
}
|
||
/* У mp-card--compact теги уходят вниз карточки (order 2) — оставляем
|
||
стек под заголовком, поэтому поднимаем его наравне с описанием. */
|
||
.mp-card--compact .ai-projects__stack {
|
||
order: 1;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<a class="skip-link" href="#case-main">К содержимому кейса</a>
|
||
<header class="header" data-theme-picker>
|
||
<div class="header__inner">
|
||
<a class="logo" href="../" aria-label="На главную">НМ</a>
|
||
<div class="header__cluster">
|
||
<nav class="nav" aria-label="Разделы страницы">
|
||
<a href="#contact">Контакты</a>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="fab-stack" aria-label="Быстрые действия">
|
||
<div class="theme-panel-fab-wrap">
|
||
<button type="button" class="fab fab--secondary glass-neutral" data-theme-panel-btn aria-expanded="false" aria-controls="theme-panel" aria-label="Настройки стиля">
|
||
<span class="theme-panel-fab__icon theme-panel-fab__icon--open-hide" aria-hidden="true"></span>
|
||
<svg class="theme-panel-fab__icon theme-panel-fab__icon--close" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
||
<path d="M6 6L18 18M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
|
||
</svg>
|
||
</button>
|
||
<div id="theme-panel" class="theme-picker__panel glass-neutral" role="dialog" aria-label="Тема и оформление" hidden data-theme-panel>
|
||
<div class="theme-picker__stack">
|
||
<section class="theme-picker__section" aria-labelledby="theme-accent-title">
|
||
<h3 id="theme-accent-title" class="theme-picker__section-title">Акцентный цвет</h3>
|
||
<div class="colorpicker" data-colorpicker>
|
||
<div class="colorpicker__plane-box">
|
||
<canvas class="colorpicker__plane" width="320" height="180" data-sl-canvas aria-label="Насыщенность и светлость акцента"></canvas>
|
||
<div class="colorpicker__knob" data-sl-knob></div>
|
||
</div>
|
||
<div class="colorpicker__hue-wrap">
|
||
<label class="colorpicker__hue-sr" for="theme-hue-slider">Оттенок акцента</label>
|
||
<input id="theme-hue-slider" class="colorpicker__hue" type="range" min="0" max="360" value="210" data-hue-slider aria-valuemin="0" aria-valuemax="360" />
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="theme-picker__section" aria-labelledby="theme-mode-title">
|
||
<h3 id="theme-mode-title" class="theme-picker__section-title">Тема</h3>
|
||
<div class="radius-seg theme-mode-seg" role="radiogroup" aria-labelledby="theme-mode-title">
|
||
<button type="button" class="radius-seg__btn" role="radio" aria-checked="false" data-theme-mode="system" aria-label="Как в системе"><span class="radius-seg__viz" aria-hidden="true"><span class="theme-mode-seg__ico theme-mode-seg__ico--system"></span></span></button>
|
||
<button type="button" class="radius-seg__btn" role="radio" aria-checked="false" data-theme-mode="light" aria-label="Светлая тема"><span class="radius-seg__viz" aria-hidden="true"><span class="theme-mode-seg__ico theme-mode-seg__ico--light"></span></span></button>
|
||
<button type="button" class="radius-seg__btn" role="radio" aria-checked="false" data-theme-mode="dark" aria-label="Тёмная тема"><span class="radius-seg__viz" aria-hidden="true"><span class="theme-mode-seg__ico theme-mode-seg__ico--dark"></span></span></button>
|
||
</div>
|
||
</section>
|
||
<section class="theme-picker__section" aria-labelledby="theme-radius-title">
|
||
<h3 id="theme-radius-title" class="theme-picker__section-title">Скругление углов</h3>
|
||
<div class="radius-seg" role="radiogroup" aria-labelledby="theme-radius-title">
|
||
<button type="button" class="radius-seg__btn" role="radio" aria-checked="false" data-radius-option="soft" aria-label="Слабое скругление"><span class="radius-seg__viz" aria-hidden="true"><span class="radius-seg__arc radius-seg__arc--soft"></span></span></button>
|
||
<button type="button" class="radius-seg__btn" role="radio" aria-checked="false" data-radius-option="medium" aria-label="Среднее скругление"><span class="radius-seg__viz" aria-hidden="true"><span class="radius-seg__arc radius-seg__arc--medium"></span></span></button>
|
||
<button type="button" class="radius-seg__btn" role="radio" aria-checked="false" data-radius-option="strong" aria-label="Сильное скругление"><span class="radius-seg__viz" aria-hidden="true"><span class="radius-seg__arc radius-seg__arc--strong"></span></span></button>
|
||
</div>
|
||
</section>
|
||
<section class="theme-picker__section" aria-labelledby="theme-typography-title">
|
||
<h3 id="theme-typography-title" class="theme-picker__section-title">Типографика</h3>
|
||
<div class="radius-seg" role="radiogroup" aria-labelledby="theme-typography-title">
|
||
<button type="button" class="radius-seg__btn theme-font-seg__btn" role="radio" aria-checked="false" data-font-option="geologica" aria-label="Sans"><span class="theme-font-seg__label">Sans</span></button>
|
||
<button type="button" class="radius-seg__btn theme-font-seg__btn" role="radio" aria-checked="false" data-font-option="merriweather" aria-label="Sans Serif"><span class="theme-font-seg__label">Sans Serif</span></button>
|
||
<button type="button" class="radius-seg__btn theme-font-seg__btn" role="radio" aria-checked="false" data-font-option="mono" aria-label="Mono"><span class="theme-font-seg__label">Mono</span></button>
|
||
</div>
|
||
</section>
|
||
<section class="theme-picker__section" aria-labelledby="theme-mesh-bg-title">
|
||
<h3 id="theme-mesh-bg-title" class="theme-picker__section-title">Фон страницы</h3>
|
||
<div class="radius-seg radius-seg--two" role="radiogroup" aria-labelledby="theme-mesh-bg-title">
|
||
<button type="button" class="radius-seg__btn theme-mesh-bg-seg__btn" role="radio" aria-checked="false" data-mesh-bg-option="on" aria-label="Показать фоновый градиент"><span class="theme-mesh-bg-seg__label">Вкл</span></button>
|
||
<button type="button" class="radius-seg__btn theme-mesh-bg-seg__btn" role="radio" aria-checked="false" data-mesh-bg-option="off" aria-label="Скрыть фоновый градиент"><span class="theme-mesh-bg-seg__label">Выкл</span></button>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<a class="fab fab--primary" href="#contact" aria-label="Связаться">
|
||
<span class="fab-primary__ico" aria-hidden="true"></span>
|
||
</a>
|
||
</div>
|
||
<div class="content-edit-fab-stack" aria-label="Правки контента" data-content-edit-ui>
|
||
<button
|
||
type="button"
|
||
class="fab fab--secondary glass-neutral content-edit-fab"
|
||
data-content-edit-mode-toggle
|
||
hidden
|
||
aria-pressed="false"
|
||
aria-label="Режим правок контента"
|
||
title="Режим правок"
|
||
>
|
||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
||
<path
|
||
d="M4 20h4l10.5-10.5a2.12 2.12 0 0 0 0-3L16.5 4.5a2.12 2.12 0 0 0-3 0L3 15v5z"
|
||
stroke="currentColor"
|
||
stroke-width="1.75"
|
||
stroke-linejoin="round"
|
||
/>
|
||
</svg>
|
||
<span class="content-edit-fab__badge" hidden aria-hidden="true">0</span>
|
||
</button>
|
||
</div>
|
||
|
||
|
||
<main id="case-main" class="section section--tight">
|
||
<div class="section__inner ai-page">
|
||
<p class="hero__eyebrow">AI-разработка · идея, код, деплой</p>
|
||
<h1 class="case-page__h1">Делаю целые продукты</h1>
|
||
<p class="case-page__sub">Telegram-боты, MCP-серверы, плагины и утилиты. Схема, код, деплой</p>
|
||
|
||
<p class="section__prose">
|
||
Больше десяти лет я проектировал интерфейсы. Теперь довожу идеи до работающего
|
||
кода: бэкенд, база данных, деплой. Инфраструктура тоже моя часть работы.
|
||
В большинстве проектов код пишет ИИ-агент. Я задаю архитектуру, проверяю
|
||
результат и отвечаю за то, что продукт вообще работает.
|
||
</p>
|
||
|
||
<h2 id="roles">Что я делаю</h2>
|
||
<ul class="section__prose hero__tags" aria-label="Что я делаю">
|
||
<li class="hero__tag">Продуктовая логика и API</li>
|
||
<li class="hero__tag">Telegram-боты на aiogram 3</li>
|
||
<li class="hero__tag">MCP-серверы</li>
|
||
<li class="hero__tag">Плагины Figma и Obsidian</li>
|
||
<li class="hero__tag">Автоматизация и агентные пайплайны</li>
|
||
</ul>
|
||
|
||
<h2 id="projects">Проекты</h2>
|
||
<ul class="filter-chips" data-filter-chips data-filter-scope="#ai-projects" aria-label="Фильтр проектов по типу">
|
||
<li><button type="button" class="filter-chip" data-filter-value="all" aria-pressed="true">Все</button></li>
|
||
<li><button type="button" class="filter-chip" data-filter-value="bots" aria-pressed="false">Бots</button></li>
|
||
<li><button type="button" class="filter-chip" data-filter-value="mcp" aria-pressed="false">MCP</button></li>
|
||
<li><button type="button" class="filter-chip" data-filter-value="plugins" aria-pressed="false">Плагины</button></li>
|
||
<li><button type="button" class="filter-chip" data-filter-value="web" aria-pressed="false">Веб</button></li>
|
||
</ul>
|
||
|
||
<ol class="contact-grid ai-projects" id="ai-projects">
|
||
<li data-filter-item data-filter-tag="bots">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-01.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">Personal Assistant</h3>
|
||
<p class="ai-projects__stack">Python · aiogram 3 · PostgreSQL</p>
|
||
<p class="mp-card__desc">Личный ассистент в Telegram: напоминания, планирование дел и работа с LLM в одном диалоге.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Боты</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="bots">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-02.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">Image Gen Bot</h3>
|
||
<p class="ai-projects__stack">Python · aiogram 3 · Redis · PostgreSQL</p>
|
||
<p class="mp-card__desc">Бот для генерации изображений: баланс, реферальная программа, админ-логи в отдельные топики супергруппы.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Боты</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="mcp bots">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-03.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">MCP Image Server</h3>
|
||
<p class="ai-projects__stack">JavaScript · MCP · OpenRouter</p>
|
||
<p class="mp-card__desc">Собственный MCP-сервер для генерации картинок. Подключается к агентам как инструмент.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">MCP</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="plugins">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-01.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">AI assistant</h3>
|
||
<p class="ai-projects__stack">TypeScript · Figma Plugin API</p>
|
||
<p class="mp-card__desc">Плагин для Figma, который исполняет скрипты прямо в редакторе. ИИ-ассистент для любого тарифа.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Плагины</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="plugins">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-02.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">Card Columns</h3>
|
||
<p class="ai-projects__stack">TypeScript · Obsidian API</p>
|
||
<p class="mp-card__desc">Вью для заметок в стиле канбан-доски: группировка по колонкам с фильтрами по тегам.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Плагины</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="plugins">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-03.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">Hermes Desktop Plugins</h3>
|
||
<p class="ai-projects__stack">JavaScript · TypeScript · Electron</p>
|
||
<p class="mp-card__desc">Плагины для рабочего стола Hermes: чип баланса API, звук завершения задачи и контроль трат.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Плагины</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="bots">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-01.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">Social Post Writer</h3>
|
||
<p class="ai-projects__stack">Python · aiogram 3 · SQLite</p>
|
||
<p class="mp-card__desc">Бот, который превращает тезисы в готовый пост под нужную площадку и тон, учитывая голос автора.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Боты</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
<li data-filter-item data-filter-tag="web">
|
||
<article class="mp-card mp-card--compact" data-glass="false">
|
||
<div class="mp-card__media ai-projects__media" aria-hidden="true">
|
||
<img class="mp-card__image" src="../assets/ai-dev/placeholder-02.webp" alt="" width="640" height="400" loading="lazy" decoding="async" />
|
||
</div>
|
||
<div class="mp-card__body">
|
||
<h3 class="mp-card__title">AI Design Assistant</h3>
|
||
<p class="ai-projects__stack">HTML · CSS · GLSL · WebGL</p>
|
||
<p class="mp-card__desc">Этот сайт целиком: структура, дизайн-система, шейдеры, CI/CD. Весь цикл создания вместе с ИИ-агентом.</p>
|
||
<ul class="mp-card__tags" aria-label="Тип проекта">
|
||
<li class="mp-card__tag">Веб</li>
|
||
</ul>
|
||
</div>
|
||
</article>
|
||
</li>
|
||
</ol>
|
||
|
||
<h2 id="stack">Стек</h2>
|
||
<ul class="section__prose hero__tags" aria-label="Стек">
|
||
<li class="hero__tag">Python</li>
|
||
<li class="hero__tag">TypeScript</li>
|
||
<li class="hero__tag">JavaScript</li>
|
||
<li class="hero__tag">Go</li>
|
||
<li class="hero__tag">HTML/CSS</li>
|
||
<li class="hero__tag">GLSL</li>
|
||
<li class="hero__tag">aiogram 3</li>
|
||
<li class="hero__tag">FastAPI</li>
|
||
<li class="hero__tag">PostgreSQL</li>
|
||
<li class="hero__tag">Redis</li>
|
||
<li class="hero__tag">SQLite</li>
|
||
<li class="hero__tag">Docker</li>
|
||
<li class="hero__tag">Coolify</li>
|
||
<li class="hero__tag">Gitea</li>
|
||
<li class="hero__tag">MCP</li>
|
||
</ul>
|
||
|
||
<h2 id="links">Где я это выкладываю</h2>
|
||
<ul class="case-links-grid">
|
||
<li>
|
||
<a class="case-link-card" href="https://github.com/mamadaevv" target="_blank" rel="noopener noreferrer">
|
||
<span class="case-link-card__body">
|
||
<span class="case-link-card__title">GitHub</span>
|
||
<span class="case-link-card__meta">Проекты и эксперименты с кодом</span>
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="case-link-card" href="http://x1qnvk08zec2u5cx6yh5iexh.155.212.186.39.sslip.io/admin" target="_blank" rel="noopener noreferrer">
|
||
<span class="case-link-card__body">
|
||
<span class="case-link-card__title">Gitea</span>
|
||
<span class="case-link-card__meta">Внутренние проекты и сервисы</span>
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="case-link-card" href="../cases/site-portfolio/" target="_blank" rel="noopener noreferrer">
|
||
<span class="case-link-card__body">
|
||
<span class="case-link-card__title">Кейс этого сайта</span>
|
||
<span class="case-link-card__meta">Как я делал сайт вместе с ИИ-агентом</span>
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="case-link-card" href="https://secrets-4-me.dynv6.net" target="_blank" rel="noopener noreferrer">
|
||
<span class="case-link-card__body">
|
||
<span class="case-link-card__title">secrets-4-me</span>
|
||
<span class="case-link-card__meta">Сервис, который работает сейчас</span>
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</main>
|
||
</body>
|
||
</html> |