Hi, I am devs-code

Building Digital Solutions

8+
Projects
20+
Technologies
Available for Hire

About Me

about.ts

const developer = {

name: 'devs-code',

role: 'Full-Stack Developer',

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

passion: 'Building things',

available: true,

};

I am a full-stack developer specializing in building modern web applications, Telegram bots, and AI-powered solutions.

I transform complex business requirements into elegant, high-performance digital products. From CRM systems to AI chatbots — I handle the complete development cycle.

My stack includes React, Node.js, TypeScript, PostgreSQL, Docker, and modern AI tools. Every project is built with scalability, security, and user experience in mind.

Available for new projects

Services

Full-Stack Web Development

Modern web applications with React, Node.js, TypeScript, and PostgreSQL. From landing pages to complex SaaS platforms with admin panels and APIs.

React Node.js TypeScript PostgreSQL Next.js

Telegram Bots & Automation

Custom Telegram bots for business automation, CRM integration, gaming, and customer communication. Reliable, scalable, production-ready.

Telegram API Node.js Redis CRM Webhooks

AI / ML Solutions

Integration of AI into your business: intelligent chatbots, data processing, content generation, and custom AI-powered features.

OpenAI Claude API LangChain Python RAG

Portfolio

Real projects running in production

AI Support Assistant — Live Demo
Live

AI Support Assistant — Live Demo

A working AI customer-support assistant you can talk to right now. Answers strictly from a knowledge base with visible sources, looks up order status via tool use, and escalates to a human with a dialogue summary ticket. Every reply shows its real cost (≈$0.01–0.05 per dialogue). Owner panel (demo/demo): edit the knowledge base, watch dialogues, tickets and daily spend. Embeds into any site with one script tag.

  • Live chat on the landing page — try to break it: prompt injection is handled
  • Tool use: order status lookup + escalation with auto-generated summary
  • Real cost per reply shown in chat: streaming, prompt caching, token metering
  • Admin panel: knowledge base editor, dialogues, tickets, cost per day
  • Hard budget caps: daily reply/cost limits, per-IP rate limits, 6h data reset
Anthropic Claude Node.js 22 Fastify TypeScript SQLite SSE
Live Demo
CRM System
Live

CRM System

Full-featured CRM admin panel with integrated Telegram bot for business management. Tracks clients, deals, and interactions in one place with real-time synchronization between the web dashboard and Telegram bot interface.

  • Client database with contact history and deal pipeline
  • Telegram bot for instant notifications and quick actions
  • Interactive dashboard with sales analytics and KPIs
  • Role-based access control for team members
  • Redis caching for fast data retrieval
React TypeScript Node.js PostgreSQL Redis Telegram Bot API
Live Demo
Site Pulse — technical audit in one minute
Live

Site Pulse — technical audit in one minute

A working audit tool, not a mockup: enter any URL and a real headless Chrome opens the page, measures Core Web Vitals from the browser's own Performance API, switches to mobile viewport, parses SEO basics, checks security headers, robots/sitemap and internal links. The result is a scored report with prioritised findings, a plain-language fix for each, and a rough cost estimate. Reports live at a permanent link for 14 days.

  • Real Chrome measurement: LCP, CLS, TTFB, weight, requests, JS errors
  • Mobile pass at 390×844: horizontal scroll, small tap targets, viewport
  • SEO + security: title/description/H1/canonical/OG/JSON-LD, HSTS, CSP, gzip
  • SSRF protection: private ranges and cloud metadata IPs are refused before launch
  • Queue with per-IP, per-host and daily caps; 23 offline tests on scoring rules
Node.js 22 Chrome headless Fastify TypeScript SQLite SSE
Live Demo
The Portfolio Answers Questions Itself
Live

The Portfolio Answers Questions Itself

Ask this site what its owner built — the widget in the corner answers from a base of 50 cases in your language, and links only to demos that respond right now. Liveness is re-checked every 10 minutes and the output filter strips any link that is not on the live list, so a dead or invented URL cannot reach you. Cost of every reply is printed under it (~$0.003–0.02). Ready to talk? It collects the brief in chat — task, budget, timeline, contact — and hands it to Slava. Try to break it: 22 attacks from the repo test set are repelled.

  • Answers in EN / UK / RU, detected from your question
  • Links only to stands that respond right now — verified by code, not by prompt
  • Says «no such case in the portfolio» instead of inventing one
  • Collects a project brief in the dialogue and delivers it with retries
  • Cost per reply shown live: prompt caching, token metering, daily budget cap
  • Attack suite in the repo: prompt injection, role hijack, link poisoning — 22/22 repelled
Anthropic Claude Node.js 22 Fastify TypeScript SQLite FTS5 SSE
Live Demo
A Funnel Bot That Lets People Into a Private Channel
Live

A Funnel Bot That Lets People Into a Private Channel

Application → site signup → check → private channel: the bot walks the whole path itself. The landing shows both sides at once — the client chat and the manager phone, live. Signups arrive as HMAC-SHA256-signed webhooks; a wrong Telegram or a reused link is rejected with the reason printed. Invite links are one-time with a 30-minute TTL, joins are fixed by chat_member updates, and duplicates are impossible by status design. A manager can just forward a DM — the bot parses name and phone itself, no userbot on a personal account. You can check it: https://leadgate.devs-code.site

  • Two live fronts, one core: a real Telegram bot and its web twin on the landing
  • Manager view with working buttons: approve, decline, resend the link
  • Signup webhook signed with HMAC-SHA256 — a forged call lands in the public log
  • One-time invites, 30-minute TTL; joins recorded from chat_member, not on trust
  • Red path built in: press “submit with a wrong Telegram” and watch it get rejected
  • One process on SQLite + aiogram 3 + FastAPI; the stand resets itself every 6 hours
Python 3.12 aiogram 3 FastAPI SQLite Telegram Bot API HMAC-SHA256 nginx systemd
Live Demo
Game Keys Store
Live

Game Keys Store

Telegram bot store for selling game keys with a web admin panel. Customers browse 5 categories, select products, pay via Monobank integration, and receive keys instantly after payment confirmation.

  • 5 product categories with searchable catalog
  • Instant key delivery after Monobank payment
  • Order history and purchase tracking for users
  • Full CRUD admin dashboard with sales analytics
  • FastAPI-powered web admin panel
Python aiogram 3 FastAPI PostgreSQL SQLAlchemy Docker
Live Demo
Flavor Lab
Live

Flavor Lab

E-commerce Telegram bot for a craft coffee shop. A full-featured online store right inside Telegram: product catalog with pagination across 5 categories and 29 items, shopping cart with inline buttons, 4-step checkout, Monobank payment integration, order tracking with visual status bar, favorites, and a complete admin panel.

  • Detailed coffee cards: origin, roast, processing, tasting notes
  • Shopping cart with inline +/−/remove buttons
  • Monobank payment integration with webhook confirmation
  • Order history with visual status tracking bar
  • Admin panel: product management, order statuses, revenue analytics
Python 3.12 aiogram 3 SQLAlchemy 2 aiosqlite Monobank API Docker
Live Demo
AI Content Editor
Live

AI Content Editor

Full-stack platform for AI-powered article creation with a 3-stage pipeline: Generate, Verify, Refine. Supports 4 LLM providers (Gemini, OpenAI, Claude, OpenRouter), WYSIWYG TipTap editor with HTML source mode, automated fact-checking, link validation, and smart diff visualization.

  • 3-stage AI pipeline: structure → expand → polish → fact-check → refine
  • 4 LLM providers: Gemini, OpenAI, Claude, OpenRouter — user brings own keys
  • TipTap WYSIWYG editor with HTML source mode and Markdown export
  • Automated link checking with redirect detection and response times
  • HTML-aware diff visualization with word-level highlighting
React 19 TypeScript Python FastAPI TipTap Docker
Live Demo
Floritale AI
Live

Floritale AI

AI-powered Telegram bot platform for a flower business. Uses OpenAI GPT to generate personalized product descriptions, answer customer questions, and automate order processing through natural language conversations.

  • GPT-powered product descriptions and recommendations
  • Natural language order processing via Telegram
  • Automated customer support with context-aware responses
  • Product catalog integration with AI-generated content
  • Conversation history and customer preference tracking
Node.js TypeScript OpenAI API Telegram Bot API Docker
Courier App
Live

Courier App

Progressive Web Application for delivery management. Multi-role platform with separate interfaces for administrators, drivers, and clients. Real-time order tracking, route optimization, and automated status notifications.

  • 3 role-based interfaces: admin, driver, client
  • Real-time delivery tracking on interactive map
  • PWA — installable on any device, works offline
  • Order management with automated status updates
  • Admin dashboard with delivery analytics and reports
React TypeScript Node.js PostgreSQL PWA Docker
Live Demo
CallQA
Live

CallQA

AI-powered call quality assurance platform for customer service teams. Automatically analyzes call recordings, evaluates agent performance using machine learning models, and generates detailed quality reports with actionable insights.

  • AI analysis of call recordings with speech recognition
  • Automated agent performance scoring by criteria
  • Detailed quality reports with trends and recommendations
  • Customizable evaluation criteria and scoring templates
  • Team analytics dashboard with KPI tracking
Node.js TypeScript AI/ML PostgreSQL Docker
Odoo ERP
Live

Odoo ERP

Customized Odoo ERP deployment for comprehensive business process management. Configured and extended with custom modules for inventory tracking, accounting, customer relationship management, and workflow automation tailored to client needs.

  • Custom modules for specific business workflows
  • Inventory management with warehouse tracking
  • Accounting and invoicing automation
  • CRM module with sales pipeline management
  • Docker deployment with nginx reverse proxy and SSL
Python PostgreSQL Docker Odoo nginx
Live Demo
Supplier Catalog → Marketplace Feed, on a Schedule
Live

Supplier Catalog → Marketplace Feed, on a Schedule

A supplier catalog holds over a million products. You need ten subgroups of them, priced, in stock, as YML files a marketplace can import. Open the stand and do it: tick groups, add a blacklist, set a price range, press Run. The log walks the catalog, drops what the filters reject, writes several YML files. Download one — it parses as valid XML, 60 offers, real characteristics. The slice is genuine: 200 products from tme.eu, 17 fully parsed product cards, 200 characteristics, real symbols, PLN prices, stock levels, photos and links. What the stand does not do: it does not crawl the source live from your browser. That runs on a server, under cron, and the page says so instead of pretending.

  • Filters that matter: groups, subgroups, blacklist, price from/to, in stock
  • Output splits into several YML files — 1M products never fit one job
  • One crontab line per profile: one group fails, the rest still deliver
  • Product card tab: 16 real characteristics, and where the description sits
  • Every file downloads and validates: XML parser, 60 offers per part
JavaScript XML / YML Prom.ua feed DOM parsing cron nginx
Live Demo
Furniture Store + Live Configurator: Draw It, Price It, Order It
Live

Furniture Store + Live Configurator: Draw It, Price It, Order It

A WooCommerce store with 420 products where the real width and height are drawn over every image with leader lines, the way a workshop drawing does it — furniture comes back because it did not fit, not because it was ugly. Filter by wood and finish, order as a guest in two steps, and watch the Telegram message reach the owner: the delay you see is the real one. The configurator is the part nobody else shows. Set the size to the centimetre — the drawing redraws in the browser, and the server answers with a line-by-line estimate: board per m², finish per m², hardware per piece, hours of work. It argues like a joiner: a shelf wider than its span gets a divider and an explanation, a 230 kg wardrobe becomes a two-person delivery, a cabinet taller than a doorway ships in parts. If a ready-made model in the catalogue is cheaper, it says so and links to it. What the stand does not do: no money moves, product photos are generated from dimensions rather than shot, and the data resets every 6 hours. Guest admin: demo / demo.

  • Dimensions drawn on every photo — 6 KB generated from the size, not a 40 KB stock shot
  • Configurator prices to the centimetre and shows every line of the estimate
  • It sends you to the cheaper ready-made model when the catalogue has one
  • Two storefronts, EN and UK: own currency, own couriers, own emails
  • PageSpeed 100 on mobile — catalogue of 420 products: 0.11 MB, 15 requests, one script, no jQuery
WooCommerce WordPress 6 PHP 8.3 Polylang MariaDB Redis nginx + FastCGI cache Python (catalogue generation) Telegram Bot API
Live Demo
Customer Portal for WooCommerce: Repeat an Order in 2 Taps, Points, Care Plans
Live

Customer Portal for WooCommerce: Repeat an Order in 2 Taps, Points, Care Plans

The expensive add-on a working shop orders after the shop itself. Press “Sign in as a customer” — no registration — and you get your own sandbox account with six months of history: three orders, a points balance with every operation listed, an active care plan. Repeat any past order in two taps: the old order becomes a cart, the saved address becomes a checkout. Spend points there and watch the discount line appear in the order summary. Open the care plan and press “charge now” — a real WooCommerce order is created on the spot and the receipt lands in Letters, in the same HTML the shop would have emailed. The money side is built to be checked, not believed: points live in an append-only ledger, the balance moves by one atomic UPDATE with the limit inside the WHERE, and every operation carries an idempotency key. Eight simultaneous redemptions against a balance for three go through exactly three times — that test ships with the case. Nothing is a mockup and no money moves: the stand runs in test mode and resets every 6 hours.

  • Repeat a past order in two taps — including a made-to-measure piece from the configurator
  • Points: 3% back, redeemed at checkout, full history with the balance after each line
  • Care plan for a consumable: pause, cancel, or run the scheduled charge right now
  • Every letter the shop generated is readable in the account — the stand never mails strangers
  • 8 parallel redemptions, 5 duplicate accruals, 5 concurrent subscription runs — 3, 1 and 1 succeed
WooCommerce WordPress 7 PHP 8.3 MariaDB (InnoDB) Polylang WP-CLI REST API JavaScript (no framework)
Live Demo
Same Shop, Second Engine: One Design on WooCommerce and OpenCart
Live

Same Shop, Second Engine: One Design on WooCommerce and OpenCart

The same furniture shop as the WooCommerce stand next door — same layout, same 420-product feed, same catalogue tree, same texts — rebuilt on OpenCart 4.1. Both are live, both admin panels are open to guests, and a comparison page puts them side by side with numbers taken by one instrument in one sitting. This answers the question a client asks first: will it work on my platform? The design carried over unchanged. The engine did not. OpenCart 4.1 has no second theme at the file level, so the theme lives as an extension and swaps templates on an event — no core file is touched, and an update will not wipe the work. A product URL needs an explicit route segment or it silently returns 200 and shows the home page. Image resizing cannot read SVG at all. A cache miss returns an empty array instead of false, so an is_array() check passes and the page comes out blank without an error. Checkout is five separate endpoints where the shipping list must be requested before it can be chosen. Every one of those breaks the storefront silently. What the stand does not do: no money moves, payment is cash on delivery, product images are generated from dimensions rather than photographed, and data resets every 6 hours. Guest admin: shop-oc.devs-code.site/keruvannya, demo / demo.

  • One design, two engines — click through both admin panels and compare
  • Comparison page with honest numbers: both stands measured by one instrument, same hour
  • PageSpeed 99–100 on mobile, CLS 0.000 — no jQuery, no Bootstrap, 230 KB the theme never used
  • Theme as an extension: not one core file modified, so updates survive
  • Nova Poshta branch lookup live from the carrier's public API during checkout
  • A monitor places a full order every 5 minutes and removes it afterwards
OpenCart 4.1 PHP 8.3-FPM MariaDB Redis nginx microcache Twig Nova Poshta API WebP
Live Demo
One Design, Four Platforms — Measured, Not Opined
Live

One Design, Four Platforms — Measured, Not Opined

The same 420-item furniture catalogue and the same layout running on four engines: WooCommerce, OpenCart 4, a headless Astro front on the WordPress REST API, and plain WordPress with no shop plugin. All four stands are live and you can open them side by side. The speed table is not written by hand: a nightly runner measures every stand with Lighthouse — three runs, median, the same three pages on each (home, catalogue, product) — and the page pulls the numbers from a feed, so the date of every measurement is on screen. Runs taken while the server was busy are discarded rather than published, and a stand that is not fully measured says so instead of showing half a column. Next to the measured half sits the part nobody can measure — build time, running cost, who each platform is for and where it stops — marked openly as our estimate. No platform is ours: the honest table is the whole point.

  • Four live stands, one design, one catalogue — open them side by side
  • Speed re-measured every night; every number carries its measurement date
  • Measurements taken under server load are thrown out, not published
  • Measured and estimated are two separate tables, never mixed
  • Five buyer scenarios → a platform and the reason, including “stay where you are”
WordPress WooCommerce OpenCart 4 Astro Lighthouse nginx + FastCGI cache SQLite PHP 8.3
Live Demo
Same Store, Served as Files: 544 ms to 5 ms on a Cache Miss
Live

Same Store, Served as Files: 544 ms to 5 ms on a Cache Miss

The furniture shop from the WooCommerce stand next door, rebuilt as a static front on Astro 5. Same catalogue, same prices, same orders — 421 products per language pulled from the WooCommerce Store API and written to 983 HTML files that nginx hands out with no PHP, no Node and no database in the request. Both storefronts score 100 on mobile Lighthouse, and saying otherwise would be a lie: the theme is built well. The difference is what that 100 costs. On a microcache hit WordPress answers in 2 ms — faster than us. On a miss it spends 544 ms building the page, and a cache has to miss eventually: after a product edit, at expiry, on the first visit to a rare page. Static has nothing to miss — an address nobody has ever requested still answers in 5 ms, because there is nothing to build. The document is 4.3 KB against 12.7 KB, JavaScript 6 KB against 13 KB. The cart is a real cart: it lives in the shop through a Cart-Token, and an order placed here appears in the WooCommerce admin of the other stand with real Nova Poshta rates. A build log at /builds/ shows every rebuild with the products that changed and the number of files rewritten — usually 18 of 1428, because the deploy hardlinks the previous release and touches only what differs. What the stand does not do: no money moves, product images are drawings generated from dimensions rather than photographs, and the catalogue follows the neighbouring shop's 6-hour reset within 5 minutes.

  • Press one button and your own browser times both storefronts on the same product
  • 544 ms to 5 ms first byte on a cache miss — where the real difference lives
  • An order placed on the static front lands in the WooCommerce admin next door
  • Public build log: which products changed, which files were rewritten, how long it took
  • Change one price and 11 of 1428 files are rebuilt — the product, its listings, its neighbours
  • Ukrainian page loads 95 KB of fonts instead of 170 KB, in 6 files instead of 9
Astro 5 SSG TypeScript WooCommerce Store API nginx brotli_static systemd + unix socket woff2 subsetting Lighthouse incremental deploy
Live Demo
A Law-Firm Site That Audits Itself
Live

A Law-Firm Site That Audits Itself

Press one button and this site checks itself in front of you. 33 checks, real HTTP requests to its own pages, 2.1 seconds: schema, headings, cache, TLS, security headers, dead links. Score right now is 100% — 31 passed, 0 failed. Two lines are grey on purpose: indexing is off because this is a demo, and the report says so instead of faking a green tick. Core Web Vitals are measured in your browser, not in a lab. The audit found a real hole while I built it: /wp-config.php answered 200, because the nginx deny rules sat below the PHP handler. Fixed, and you can retest it yourself. Guest admin: demo / demo.

  • One button, 33 live checks: 2.1 s, 33 real requests, every value measured
  • Core Web Vitals from your own browser + p75 from real visits, no analytics service
  • Deadline calculator in the hero: put in a date, see which California clocks still run
  • 4-step intake form that scores the lead — the formula is printed, not hidden
  • Technical SEO written by hand: 0 KB on the front end, schema.org as one linked graph
  • Zero third-party requests — no analytics, no font CDN, so no cookie banner
WordPress 7 ACF PHP 8.3 nginx + FastCGI cache Redis MariaDB Server-Sent Events schema.org
Live Demo

Tech Stack

Frontend

React
Next.js
Astro
TypeScript
Tailwind CSS
HTML/CSS

Backend

Node.js
Express
Python
REST API
WebSocket
Telegram Bot API

Database

PostgreSQL
Redis
MongoDB

DevOps

Docker
nginx
Linux
Git
CI/CD

AI / ML

OpenAI API
LangChain
Claude API

Get in Touch

Have a project in mind? Let's discuss it.