Привіт, я devs-code

Створюю цифрові рішення

8+
Проєктів
20+
Технологій
Відкритий до замовлень

Про мене

about.ts

const developer = {

name: 'devs-code',

role: 'Full-Stack Developer',

stack: ['React', 'Node.js', 'TS'],

passion: 'Building things',

available: true,

};

Я full-stack розробник, спеціалізуюсь на створенні сучасних веб-додатків, Telegram-ботів та AI-рішень.

Перетворюю складні бізнес-вимоги на елегантні, високопродуктивні цифрові продукти. Від CRM-систем до AI-чатботів — я займаюсь повним циклом розробки.

Мій стек: React, Node.js, TypeScript, PostgreSQL, Docker та сучасні AI-інструменти. Кожен проєкт будується з урахуванням масштабованості, безпеки та зручності.

Відкритий до нових проєктів

Послуги

Full-Stack веб-розробка

Сучасні веб-додатки на React, Node.js, TypeScript та PostgreSQL. Від лендінгів до складних SaaS-платформ з адмінками та API.

React Node.js TypeScript PostgreSQL Next.js

Telegram-боти та автоматизація

Кастомні Telegram-боти для бізнес-автоматизації, інтеграції з CRM, геймінгу та комунікації з клієнтами. Надійні та масштабовані.

Telegram API Node.js Redis CRM Webhooks

AI / ML рішення

Інтеграція ШІ у ваш бізнес: розумні чат-боти, обробка даних, генерація контенту та кастомні AI-функції.

OpenAI Claude API LangChain Python RAG

Портфоліо

Реальні проєкти у продакшені

AI-асистент підтримки — живе демо
Працює

AI-асистент підтримки — живе демо

Робочий AI-асистент служби підтримки, з яким можна поговорити просто зараз. Відповідає строго по базі знань з видимими джерелами, дивиться статус замовлення через tool use, а складне передає людині тікетом з резюме діалогу. Під кожною відповіддю — її реальна собівартість (≈1–2 грн за діалог). Панель власника (demo/demo): правка бази знань, діалоги, тікети, витрати по днях. Вбудовується на будь-який сайт одним рядком.

  • Живий чат на лендінгу — спробуйте зламати: промпт-інʼєкції відбиваються
  • Tool use: статус замовлення з бази + ескалація з автоматичним резюме
  • Собівартість кожної відповіді в чаті: стримінг, кеш промпта, облік токенів
  • Адмінка: редактор бази знань, діалоги, тікети, витрати по днях
  • Жорсткі ліміти бюджету: день/IP/діалог, автоскидання даних кожні 6 годин
Anthropic Claude Node.js 22 Fastify TypeScript SQLite SSE
Демо
CRM Система
Працює

CRM Система

Повнофункціональна CRM адмін-панель з інтегрованим Telegram-ботом для управління бізнесом. Відстеження клієнтів, угод та взаємодій в одному місці з синхронізацією в реальному часі між веб-дашбордом та інтерфейсом Telegram-бота.

  • База клієнтів з історією контактів та воронкою угод
  • Telegram-бот для миттєвих сповіщень та швидких дій
  • Інтерактивний дашборд з аналітикою продажів та KPI
  • Рольовий доступ для членів команди
  • Redis-кешування для швидкої роботи з даними
React TypeScript Node.js PostgreSQL Redis Telegram Bot API
Демо
Пульс сайту — технічний аудит за хвилину
Працює

Пульс сайту — технічний аудит за хвилину

Робочий інструмент, а не макет: вводите будь-який URL, і справжній headless Chrome відкриває сторінку, знімає Core Web Vitals прямо з Performance API браузера, перемикається в мобільний режим, розбирає SEO-технічку, перевіряє заголовки безпеки, robots/sitemap і внутрішні посилання. На виході — звіт із балом, знахідками за пріоритетом, зрозумілим «що робити» під кожною та оцінкою робіт. Звіт живе 14 днів за постійним посиланням.

  • Замір справжнім Chrome: LCP, CLS, TTFB, вага, запити, помилки JS
  • Мобільний прохід 390×844: горизонтальна прокрутка, дрібні кнопки, viewport
  • SEO і безпека: title/description/H1/canonical/OG/JSON-LD, HSTS, CSP, gzip
  • Захист від SSRF: приватні діапазони і метадані хмари відсікаються до запуску
  • Черга з лімітами на IP, хост і добу; 23 офлайн-тести на правила оцінки
Node.js 22 Chrome headless Fastify TypeScript SQLite SSE
Демо
Портфоліо відповідає на запитання саме
Працює

Портфоліо відповідає на запитання саме

Запитайте сайт, що робив його власник — віджет у кутку відповість по базі з 50 кейсів вашою мовою й дасть посилання лише на стенд, який відповідає просто зараз. Живість перевіряється кожні 10 хвилин, а фільтр виходу вирізає будь-яке посилання не з білого списку: впала адреса чи вигадана — до вас не дійде. Під кожною відповіддю — її собівартість (~$0.003–0.02). Готові обговорити задачу? Агент збере бриф просто в чаті — що потрібно, бюджет, термін, контакт — і передасть Славі. Спробуйте зламати: 22 атаки з тест-набору відбиваються.

  • Відповідає UK / RU / EN — мова визначається по запитанню
  • Посилання лише на живий стенд: гарантія кодом, а не обіцянкою в промпті
  • Каже «такого кейса немає» замість того, щоб вигадати
  • Збирає бриф у діалозі й доставляє його з ретраями, нічого не гублячи
  • Собівартість відповіді видно одразу: кеш промпта, облік токенів, денний ліміт
  • Тест-набір атак у репозиторії: інʼєкції, вивід з ролі, підміна посилань — 22/22
Anthropic Claude Node.js 22 Fastify TypeScript SQLite FTS5 SSE
Демо
Бот-воронка: із заявки — у закритий канал
Працює

Бот-воронка: із заявки — у закритий канал

Заявка → реєстрація на сайті → перевірка → закритий канал: увесь шлях бот проходить сам. Вітрина показує обидві сторони одразу — чат клієнта і телефон менеджера, наживо. Реєстрації приходять підписаним вебхуком (HMAC-SHA256); чужий Telegram або повторно використане посилання відхиляються, причина друкується. Інвайти одноразові з TTL 30 хвилин, вхід фіксується апдейтом chat_member, дублі неможливі за будовою статусів. Менеджер може просто переслати повідомлення з особистих — бот сам розбере ім'я і телефон, юзербот на особистому акаунті не потрібен. Перевірити: https://leadgate.devs-code.site

  • Два живі фронти, одне ядро: справжній Telegram-бот і його веб-двійник на вітрині
  • Вигляд менеджера з робочими кнопками: схвалити, відхилити, надіслати посилання ще раз
  • Вебхук реєстрації підписаний HMAC-SHA256 — підробка потрапляє в публічний журнал
  • Одноразові інвайти з TTL 30 хвилин; вхід фіксує chat_member, а не чесне слово
  • Червоний шлях вбудований: натисніть «надіслати з помилкою» — і побачите відсів із причиною
  • Один процес на SQLite + aiogram 3 + FastAPI; стенд сам скидається кожні 6 годин
Python 3.12 aiogram 3 FastAPI SQLite Telegram Bot API HMAC-SHA256 nginx systemd
Демо
Game Keys Store
Працює

Game Keys Store

Telegram-бот магазин ігрових ключів з веб-адмінкою. Покупці переглядають 5 категорій, обирають товари, оплачують через інтеграцію з Monobank та миттєво отримують ключі після підтвердження оплати.

  • 5 категорій товарів з каталогом та пошуком
  • Миттєва видача ключів після оплати через Monobank
  • Історія замовлень та відстеження покупок
  • Повна CRUD адмін-панель з аналітикою продажів
  • Веб-адмінка на FastAPI
Python aiogram 3 FastAPI PostgreSQL SQLAlchemy Docker
Демо
Flavor Lab
Працює

Flavor Lab

E-commerce Telegram-бот для крафтової кав'ярні. Повноцінний інтернет-магазин прямо в Telegram: каталог товарів з пагінацією по 5 категоріях та 29 позиціях, кошик з inline-кнопками, оформлення замовлення за 4 кроки, оплата через Monobank, відстеження замовлень з візуальним статус-баром, обране та повна адмін-панель.

  • Детальні картки кави: країна, обсмаження, обробка, смакові ноти
  • Кошик з inline-кнопками +/−/видалити
  • Інтеграція оплати через Monobank з webhook-підтвердженням
  • Історія замовлень з візуальним статус-баром
  • Адмін-панель: управління товарами, статуси замовлень, аналітика виручки
Python 3.12 aiogram 3 SQLAlchemy 2 aiosqlite Monobank API Docker
Демо
AI Content Editor
Працює

AI Content Editor

Full-stack платформа для створення статей за допомогою ШІ через 3-етапний пайплайн: Генерація, Верифікація, Рефайнінг. Підтримка 4 LLM-провайдерів (Gemini, OpenAI, Claude, OpenRouter), WYSIWYG-редактор TipTap з режимом HTML-коду, автоматична перевірка фактів, валідація посилань та візуалізація змін через smart diff.

  • 3-етапний AI-пайплайн: структура → розширення → полірування → фактчек → рефайн
  • 4 LLM-провайдери: Gemini, OpenAI, Claude, OpenRouter — користувач вводить свій ключ
  • TipTap WYSIWYG-редактор з режимом HTML-коду та експортом у Markdown
  • Автоматична перевірка посилань з детекцією редиректів та заміром часу відгуку
  • HTML-aware візуалізація змін з підсвічуванням на рівні слів
React 19 TypeScript Python FastAPI TipTap Docker
Демо
Floritale AI
Працює

Floritale AI

AI-платформа у вигляді Telegram-бота для квіткового бізнесу. Використовує OpenAI GPT для генерації персоналізованих описів товарів, відповідей на запитання клієнтів та автоматизації обробки замовлень через діалог природною мовою.

  • GPT-генерація описів товарів та рекомендацій
  • Обробка замовлень природною мовою через Telegram
  • Автоматична підтримка клієнтів з контекстними відповідями
  • Інтеграція каталогу з AI-генерованим контентом
  • Історія діалогів та відстеження вподобань клієнтів
Node.js TypeScript OpenAI API Telegram Bot API Docker
Кур'єр
Працює

Кур'єр

Прогресивний веб-додаток для управління доставкою. Мультирольова платформа з окремими інтерфейсами для адміністраторів, кур'єрів та клієнтів. Відстеження замовлень у реальному часі, оптимізація маршрутів та автоматичні сповіщення про статус.

  • 3 рольових інтерфейси: адмін, кур'єр, клієнт
  • Відстеження доставки у реальному часі на карті
  • PWA — встановлюється на будь-який пристрій, працює офлайн
  • Управління замовленнями з автоматичними статусами
  • Адмін-дашборд з аналітикою доставок та звітами
React TypeScript Node.js PostgreSQL PWA Docker
Демо
CallQA
Працює

CallQA

AI-платформа контролю якості дзвінків для команд клієнтського сервісу. Автоматично аналізує записи дзвінків, оцінює роботу операторів за допомогою моделей машинного навчання та генерує детальні звіти з практичними рекомендаціями.

  • AI-аналіз записів дзвінків з розпізнаванням мови
  • Автоматична оцінка роботи операторів за критеріями
  • Детальні звіти якості з трендами та рекомендаціями
  • Налаштовувані критерії оцінки та шаблони скорінгу
  • Командний дашборд аналітики з відстеженням KPI
Node.js TypeScript AI/ML PostgreSQL Docker
Odoo ERP
Працює

Odoo ERP

Кастомізоване розгортання Odoo ERP для комплексного управління бізнес-процесами. Налаштування та розширення кастомними модулями для обліку складу, бухгалтерії, управління клієнтськими відносинами та автоматизації робочих процесів під потреби клієнта.

  • Кастомні модулі під конкретні бізнес-процеси
  • Управління складом з відстеженням товарів
  • Автоматизація бухгалтерії та виставлення рахунків
  • CRM-модуль з управлінням воронкою продажів
  • Docker-деплой з nginx reverse proxy та SSL
Python PostgreSQL Docker Odoo nginx
Демо
Каталог постачальника → фід маркетплейсу за розкладом
Працює

Каталог постачальника → фід маркетплейсу за розкладом

У каталозі постачальника більше мільйона товарів. Потрібні з них десять підгруп — з цінами, залишками, у вигляді YML-файлів, які прийме маркетплейс. Стенд дозволяє зробити це руками: відмітити групи, додати чорний список, задати вилку ціни, натиснути «Запустити». Лог обходить каталог, відкидає те, що не пройшло фільтри, і пише кілька YML. Будь-який файл можна завантажити — він розбирається як валідний XML: 60 оферів, справжні характеристики. Зріз даних не вигаданий: 200 товарів з tme.eu, 17 повністю розібраних карток товару, 200 характеристик, реальні символи, ціни в PLN, залишки складу, фото та посилання. Чого стенд не робить: він не ходить на джерело наживо з браузера. Це робота сервера за розкладом — і сторінка чесно про це каже.

  • Фільтри, які справді потрібні: групи, підгрупи, чорний список, ціна, наявність
  • Вивантаження ріжеться на кілька YML — мільйон товарів в одне завдання не влізе
  • Окремий рядок crontab на профіль: одна група впала — решта відпрацювали
  • Вкладка картки товару: 16 справжніх характеристик і місце опису
  • Кожен файл завантажується і перевіряється: XML-парсер, 60 оферів у частині
JavaScript XML / YML Prom.ua feed DOM parsing cron nginx
Демо
Магазин меблів + конструктор: збери своє, побач кошторис, замов
Працює

Магазин меблів + конструктор: збери своє, побач кошторис, замов

Магазин на WooCommerce, 420 товарів, де справжні ширина й висота намальовані просто на зображенні виносними лініями, як у кресленні цеху: меблі повертають не тому, що негарні, а тому що не влізли. Фільтр за породою та покриттям, замовлення без реєстрації у два кроки — і сповіщення йде власнику в Telegram у вас на очах, зі справжньою затримкою. Конструктор — те, чого не показує ніхто. Задаєте габарит з точністю до сантиметра: креслення перемальовує браузер миттєво, а сервер відповідає кошторисом порядково — щит за м², оздоблення за м², фурнітура поштучно, години роботи. Він сперечається, як столяр: полиця ширша за граничний проліт отримує перегородку і пояснення, шафа на 230 кг — доставку вдвох, корпус вищий за проріз приїде частинами. Якщо в каталозі є готова модель дешевше, конструктор сам про це скаже і дасть посилання. Чого стенд не робить: гроші не рухаються, фото товарів згенеровані з габаритів, а не зняті, дані скидаються кожні 6 годин. Гостьова адмінка: demo / demo.

  • Габарити намальовані на кожному фото — 6 КБ із розмірів замість стокового кадру на 40 КБ
  • Конструктор рахує по сантиметру і показує кошторис порядково
  • Відправляє до готової моделі, якщо в каталозі є дешевша
  • Дві вітрини, EN і UK: своя валюта, свої перевізники, свої листи
  • PageSpeed 100 на мобільному — каталог із 420 товарів: 0.11 МБ, 15 запитів, один скрипт, нуль jQuery
WooCommerce WordPress 6 PHP 8.3 Polylang MariaDB Redis nginx + FastCGI cache Python (catalogue generation) Telegram Bot API
Демо
Особистий кабінет WooCommerce: повтор замовлення у 2 кліки, бали, підписки
Працює

Особистий кабінет WooCommerce: повтор замовлення у 2 кліки, бали, підписки

Дорога доробка, яку замовляють у вже працюючого магазину. Натискаєте «увійти як покупець» — без реєстрації — і отримуєте власну пісочницю з піврічною історією: три замовлення, бонусний баланс із переліченими операціями, активний план догляду. Будь-яке минуле замовлення повторюється у два кліки: старе замовлення стає кошиком, збережена адреса — оформленням. Там само списуєте бали й бачите рядок знижки у зведенні замовлення. Відкриваєте план догляду, тиснете «списати зараз» — і на очах створюється справжнє замовлення WooCommerce, а квитанція лягає в розділ «Листи» тим самим HTML, яким вона пішла б у пошту. Грошова частина зроблена так, щоб її перевіряли, а не вірили на слово: бали живуть у журналі, який лише дописується, баланс рухається одним атомарним UPDATE з обмеженням усередині WHERE, у кожної операції ключ ідемпотентності. Вісім одночасних списань при балансі на три проходять рівно тричі — цей тест лежить у кейсі. Нічого не намальовано, гроші не рухаються: стенд працює в тест-режимі й скидається кожні 6 годин.

  • Повтор минулого замовлення у два кліки — включно з виробом із конструктора
  • Бали: 3% повернення, списання на оформленні, історія із залишком після кожної операції
  • Підписка на витратний товар: пауза, скасування або планове списання просто зараз
  • Кожен лист магазину читається в кабінеті — стенд не пише на чужі адреси
  • 8 паралельних списань, 5 дублів нарахування, 5 одночасних прогонів підписки — проходять 3, 1 і 1
WooCommerce WordPress 7 PHP 8.3 MariaDB (InnoDB) Polylang WP-CLI REST API JavaScript (no framework)
Демо
Той самий магазин на другому рушії: один дизайн на WooCommerce і OpenCart
Працює

Той самий магазин на другому рушії: один дизайн на WooCommerce і OpenCart

Той самий магазин меблів, що на сусідньому стенді WooCommerce — той самий макет, той самий фід на 420 товарів, та сама структура каталогу, ті самі тексти — зібраний наново на OpenCart 4.1. Обидва живі, в обидві адмінки можна зайти гостем, а сторінка порівняння ставить їх поруч із числами, знятими одним приладом за один захід. Це відповідь на питання, яке замовник ставить першим: а на моїй платформі так само вийде? Дизайн перенісся без правок. Рушій — ні. Другої теми на рівні файлів OpenCart 4.1 не має, тому тема живе розширенням і підмінює шаблони подією: жоден файл ядра не зачеплено, оновлення роботу не зітре. Адресі товару потрібен окремий сегмент маршруту, інакше вона мовчки віддає 200 і показує головну. Масштабування зображень не читає SVG узагалі. Кеш на проміху повертає порожній масив замість false — перевірка is_array() проходить, і сторінка виходить порожньою без жодної помилки. Оформлення замовлення розкладено на п'ять маршрутів, де список доставки треба спершу запросити, щоб його можна було обрати. Кожна з цих особливостей ламає вітрину мовчки. Чого стенд не робить: гроші не рухаються, оплата лише при отриманні, зображення товарів згенеровані з габаритів, а не зняті, дані скидаються кожні 6 годин. Гостьова адмінка: shop-oc.devs-code.site/keruvannya, demo / demo.

  • Один дизайн, два рушії — клацніть по обох адмінках і порівняйте самі
  • Сторінка порівняння з чесними цифрами: обидва стенди одним приладом, в одну годину
  • PageSpeed 99–100 на мобільному, CLS 0.000 — без jQuery і Bootstrap, мінус 230 КБ, яких тема не використовує
  • Тема розширенням: жоден файл ядра не змінено, оновлення переживе
  • Відділення Нової Пошти тягнуться з публічного API перевізника просто в оформленні
  • Моніторинг оформлює повне замовлення кожні 5 хвилин і прибирає його за собою
OpenCart 4.1 PHP 8.3-FPM MariaDB Redis nginx microcache Twig Nova Poshta API WebP
Демо
Один дизайн — чотири платформи: виміряно, а не розказано
Працює

Один дизайн — чотири платформи: виміряно, а не розказано

Один каталог меблів на 420 моделей і одна вёрстка на чотирьох рушіях: WooCommerce, OpenCart 4, headless-фронт на Astro поверх REST API WordPress і чистий WordPress без магазину. Усі чотири стенди живі, їх можна відкрити поруч. Таблиця швидкості не написана руками: нічний раннер міряє кожен стенд Lighthouse — три прогони, медіана, ті самі три сторінки в усіх (головна, каталог, картка), — а сторінка тягне числа з фіда, тому дата кожного заміру видна на екрані. Заміри, зняті під навантаженням сервера, відкидаються, а не публікуються; стенд, виміряний не повністю, чесно про це каже замість половини колонки. Поруч із вимірюваною половиною — те, що виміряти не можна: термін збірки, вартість утримання, кому платформа підходить і де вона закінчується. Ця частина прямо позначена як наша оцінка. «Своєї» платформи в нас немає: чесна таблиця і є весь сенс.

  • Чотири живі стенди, один дизайн, один каталог — відкриваються поруч
  • Швидкість перемірюється щоночі, у кожного числа своя дата заміру
  • Заміри під навантаженням сервера відкидаються, а не публікуються
  • Виміряне й оцінене — дві різні таблиці, вони не змішуються
  • П’ять сценаріїв замовника → платформа й обґрунтування, включно з «залишайтеся як є»
WordPress WooCommerce OpenCart 4 Astro Lighthouse nginx + FastCGI cache SQLite PHP 8.3
Демо
Той самий магазин статикою: 544 мс проти 5 мс на проміху кеша
Працює

Той самий магазин статикою: 544 мс проти 5 мс на проміху кеша

Магазин меблів із сусіднього стенда на WooCommerce, зібраний наново статичною вітриною на Astro 5. Той самий каталог, ті самі ціни, ті самі замовлення: 421 товар на мову приїжджає з WooCommerce Store API і розкладається в 983 HTML-файли, які nginx віддає без PHP, Node і бази в запиті. Обидві вітрини дають 100 у мобільному Lighthouse, і стверджувати протилежне було б неправдою — тема магазину зроблена добре. Різниця в тому, чого цей бал вартий. При влучанні в мікрокеш WordPress відповідає за 2 мс, швидше за нас. При проміху він збирає сторінку 544 мс, а кеш зобов'язаний колись промахнутися: після правки товару, зі спливом строку, при першому заході на рідкісну сторінку. Статиці промахуватися нічим — адреса, яку ще ніхто не питав, приходить за ті самі 5 мс, бо збирати нічого. Документ 4.3 КБ проти 12.7 КБ, JavaScript 6 КБ проти 13 КБ. Кошик справжній: він живе в магазині через Cart-Token, і замовлення, оформлене тут, з'являється в адмінці WooCommerce сусіднього стенда разом із живими тарифами Нової Пошти. Журнал збірок на /builds/ показує кожну пересборку — які товари змінилися і скільки файлів переписано, зазвичай 18 із 1428: викладка робить жорсткі посилання на минулий реліз і чіпає лише відмінності. Чого стенд не робить: гроші не рухаються, зображення товарів — креслення, згенеровані з габаритів, а не фотографії, а каталог наздоганяє шестигодинне скидання сусіднього магазину за 5 хвилин.

  • Натисніть кнопку — ваш браузер сам заміряє обидві вітрини на одному товарі
  • 544 мс проти 5 мс до першого байта на проміху кеша — ось де справжня різниця
  • Замовлення зі статичної вітрини приходить в адмінку WooCommerce сусіднього стенда
  • Публічний журнал збірок: що змінилося, що переписано, скільки це зайняло
  • Змінюєте одну ціну — перезбираються 11 файлів із 1428: товар, його списки, його сусіди
  • Українська сторінка тягне 95 КБ шрифтів замість 170 КБ, шістьма файлами замість дев’яти
Astro 5 SSG TypeScript WooCommerce Store API nginx brotli_static systemd + unix socket woff2 subsetting Lighthouse incremental deploy
Демо
Сайт юрфірми, який сам себе перевіряє
Працює

Сайт юрфірми, який сам себе перевіряє

Натисніть кнопку — сайт перевірить себе у вас на очах. 33 перевірки справжніми HTTP-запитами до власних сторінок за 2,1 секунди: розмітка, заголовки, кеш, TLS, security-заголовки, битi посилання. Результат зараз — 100%: 31 пройдено, 0 провалів. Два рядки сірі навмисно: індексація закрита, бо це демо, і звіт так і пише замість фальшивої галочки. Core Web Vitals міряються у вашому браузері, а не в лабораторії. Аудит знайшов справжню дірку під час роботи: /wp-config.php віддавався з кодом 200, бо правила deny в nginx стояли нижче обробника PHP. Виправлено, можете перевірити. Вхід в адмінку: demo / demo.

  • Одна кнопка, 33 живі перевірки: 2,1 с, 33 справжніх запити, кожне значення виміряне
  • Core Web Vitals з вашого браузера + p75 за реальними візитами, без аналітичних сервісів
  • Калькулятор строків у першому екрані: ввели дату — бачите, які строки ще йдуть
  • Форма з 4 кроків зі скорингом заявки — формула показана, а не схована
  • ТехSEO написано руками: 0 КБ на фронті, schema.org одним звʼязним графом
  • Нуль сторонніх запитів — ні аналітики, ні шрифтового CDN, тому й cookie-банера немає
WordPress 7 ACF PHP 8.3 nginx + FastCGI cache Redis MariaDB Server-Sent Events schema.org
Демо

Технології

Фронтенд

React
Next.js
Astro
TypeScript
Tailwind CSS
HTML/CSS

Бекенд

Node.js
Express
Python
REST API
WebSocket
Telegram Bot API

Бази даних

PostgreSQL
Redis
MongoDB

DevOps

Docker
nginx
Linux
Git
CI/CD

AI / ML

OpenAI API
LangChain
Claude API

Зв'язатися

Маєте ідею проєкту? Давайте обговоримо.