BorisovAI

Blog

Posts about the development process, solved problems and learned technologies

New Featureai-agents-admin-agent

n8n Workflows as Code: DIY Deployment Without the Enterprise Price Tag

# Automating n8n Configuration Deployment Without Breaking the Bank The problem was classic: a developer had n8n running on a remote server but faced the challenge of managing configuration delivery like any serious DevOps engineer would. The subscription route? Too expensive. Building a custom solution? Let's do it. The team started by analyzing what n8n actually is—a workflow automation platform comparable to Zapier or Make, but open-source and self-hostable. Since n8n stores workflows as JSON and maintains an API, the logical approach was treating configurations as code that could be versioned and deployed like any other infrastructure. The first decision centered on **how to deliver configurations**. Several paths emerged: using n8n's export/import features via the UI (tedious at scale), leveraging the REST API to programmatically create workflows, or building a custom plugin system. The subscription-free route meant rolling up sleeves and coding. Here's where it got interesting. n8n's extensibility model does allow custom node creation, but the team asked the right question: *would this violate terms of service?* The answer nuances an important principle many developers miss—there's a difference between legitimate customization and terms violation. Creating your own authentication nodes or integrations? Fair game. Bypassing licensing checks or repackaging the core? That's where agreements get violated. The team chose the cleanest path: building a deployment utility that consumed n8n's native API to push configurations. This leveraged JavaScript—a natural fit since n8n itself is Node.js-based. The approach kept everything declarative and testable. For testing a remote n8n instance, they outlined a practical plan: first validate API connectivity and authentication, then create a test workflow, verify it executes, capture logs, and clean up. This mirrors how most teams handle infrastructure-as-code testing. **The broader lesson here** applies beyond n8n. Open-source tools give you power, but that power comes with responsibility. Understanding your tool's API and extension points beats fighting against the tool's design. n8n's REST API exposure was designed precisely for scenarios like this—allowing teams to automate without reinventing the wheel. One more insight: *self-hosting automation platforms shifts the burden*. You gain flexibility and save money, but you inherit operational responsibility. Updates, backups, security patches—they're now your department. The outcome? A working configuration delivery system built with time and curiosity instead of monthly recurring charges. Nothing revolutionary, but deeply practical. 😄 Eight bytes walk into a bar. The bartender asks, "Can I get you anything?" "Yeah," reply the bytes. "Make us a double."

Jan 26, 2026
Generalai-agents

{"tool_call": {"name": "read_blackboard", "arguments": {"key": "backend_api"}}}

# {"tool_call": {"name": "read_blackboard", "arguments": {"key": "backend_api"}}} ## Что было сделано ## Assistant: I'll start by implementing the scoring engine and session management modules. Let me first check if there's any existing work from backend_dev_1 that I should integrate with. {"tool_call": {"name": "read_blackboard", "arguments": {"key": "backend_api"}}} ## Технологии claude, ai, api, security --- > 😄 **Шутка дня:** The six stages of debugging: 1. That can't happen. 2. That doesn't happen on my machine. 3. That shouldn't happen. 4. Why does that happen? 5. Oh, I see. 6. How did that ever work?

Jan 23, 2026
Generalai-agents

{"tool_call": {"name": "read_blackboard", "arguments": {"key": "backend_models"}}}

# {"tool_call": {"name": "read_blackboard", "arguments": {"key": "backend_models"}}} ## Что было сделано ## Assistant: Let me first check if Backend Dev 1 has posted any models or API definitions I should integrate with. {"tool_call": {"name": "read_blackboard", "arguments": {"key": "backend_models"}}} ## Технологии claude, ai, api, security --- > 😄 **Шутка дня:** Why is Linux safe? Hackers peak through Windows only.

Jan 23, 2026
New Featureai-agents

Now let me write the API endpoints:

# Now let me write the API endpoints: ## Что было сделано ## Assistant: I'll build the complete backend infrastructure for the Brainstorming Web Application. Let me start with the data models, then the API endpoints, and finally the WebSocket manager. ## Task 1: Data Models {"tool_call": {"name": "write_blackboard", "key": "backend_models", "value": "```python\n\"\"\"\nBackend Models - Brainstorming Web Application\nData models using Pydantic for API schemas and SQLite for persistence.\n\"\"\"\n\nimport sqlite3\nimport uuid\nfrom datetime import date... ## Технологии claude, ai, python, javascript, git, api, security --- > 😄 **Шутка дня:** Why are modern programming languages so materialistic? Because they are object-oriented.

Jan 23, 2026
New Featureai-agents

Real-Time Brainstorming: Pydantic, WebSocket, SQLite Harmony

# Building Real-Time Brainstorming: A Pydantic + WebSocket Dance The developer faced a classic challenge: how to turn scattered ideas into a live, collaborative brainstorming platform. Instead of building yet another clunky REST API that requires constant refreshing, they decided to combine three powerful technologies into one elegant solution: Pydantic for rock-solid data validation, WebSocket for true real-time communication, and SQLite for lightweight persistence. Here's what made this architecture clever. **Pydantic**, born from the need to replace Django's validation system with something more flexible, handles all incoming data with ruthless precision. Every session name, username, and idea gets validated before it even touches the database. The developer defined schemas not just for incoming requests—SessionCreate, ParticipantJoin, IdeaCreate—but also for responses, creating a contract that frontend and backend could trust completely. No surprises, no malformed data silently corrupting the database. The real magic happened with WebSocket integration. Unlike traditional HTTP polling (which has developers constantly asking "Is there something new yet?"), WebSocket creates a persistent two-way channel. When someone submits an idea, every connected participant sees it *instantly*—no refresh button needed. The developer implemented participant activity tracking, idea submissions, and real-time rating updates flowing through these channels. This is what modern collaborative apps demand. **SQLite entered the picture as the unsung hero.** Many developers dismiss it as "just a local database," but that's precisely why it's perfect here. It's bundled with Python, requires zero server setup, and can handle moderate concurrent loads with excellent query performance. For a brainstorming session with dozens of participants, SQLite is plenty powerful. The architecture employed a common pattern: Pydantic models for API contracts and database schemas for persistence. Validators in Pydantic—like ensuring effectiveness scores stayed between 1 and 10—prevented invalid data at the entry point, reducing downstream bugs. The developer even considered alternatives: GraphQL for more flexible queries, or async PostgreSQL for massive scale. But for a focused feature like this? The simpler stack won. Here's an interesting fact: WebSocket's real-time capabilities come at a cost—maintaining open connections consumes server memory. The developer had to implement proper participant status tracking and connection cleanup, ensuring abandoned connections didn't leak resources. It's a trade-off modern frameworks handle better than they did five years ago. The outcome was a lean, responsive brainstorming tool where ideas flow like water. No artificial delays, no database bottlenecks, just clean data validation and instant synchronization across all participants. 😄 Why are modern programming languages so materialistic? Because they are object-oriented.

Jan 23, 2026
New Featureai-agents

{"tool_call": {"name": "read_blackboard", "key": "backend_models"}}

# {"tool_call": {"name": "read_blackboard", "key": "backend_models"}} ## Что было сделано ## Assistant: I'll implement the scoring engine and session management systems. Let me start by checking what backend_dev_1 has defined for models and API structure. {"tool_call": {"name": "read_blackboard", "key": "backend_models"}} {"tool_call": {"name": "read_blackboard", "key": "backend_api"}} Now let me implement the scoring engine first: {"tool_call": {"name": "write_blackboard", "key": "backend_scoring", "value": "\"\"\"Scoring Engine for Brainstorming Web Application.\n\nProvides rat... ## Технологии claude, ai, python, git, api, security --- > 😄 **Шутка дня:** Java and C were telling jokes. It was C's turn, so he writes something on the wall, points to it and says "Do you get the reference?" But Java didn't.

Jan 23, 2026
New Featureai-agents

From Chaos to Confidence: Rating Ideas with Data, Not Gut Feel

# Building a Smart Idea-Rating System with SQLite and Python The developer faced a classic problem: how to evaluate hundreds of brainstorming ideas fairly and objectively. Instead of drowning in subjective opinions, they decided to build a *scoring engine*—a system that aggregates ratings from multiple participants and automatically classifies ideas into quadrants based on impact versus effort. The architecture was elegant in its simplicity. The scoring engine lived at the heart of the application, managing three critical functions: **rating submission with duplicate prevention** (ensuring each user rates an idea only once), **automatic quadrant classification** (sorting ideas into "high-impact-low-effort" sweet spots versus "low-impact-high-effort" time-wasters), and **statistical confidence calculation** (acknowledging that a single rating means less than ten). The midpoint threshold of 5.5 on a 1-10 scale became the dividing line between complexity and simplicity, effectiveness and mediocrity. What made this system particularly clever was how it handled *uncertainty*. Rather than trusting a single person's judgment, the engine calculated standard deviation and confidence scores. An idea rated 8/10 by one person versus by five people tells completely different stories. The developer built in a confidence metric: ideas needed at least five ratings to be considered reliable. This is crucial thinking that prevents groupthink-influenced decisions from looking more solid than they actually are. **SQLite** proved to be the perfect choice here—often underestimated as "just a simple file database," SQLite actually powers billions of applications (Android, iOS, Slack, Dropbox). Its PRAGMA settings like `journal_mode=WAL` (Write-Ahead Logging) enabled concurrent access and data safety without the overhead of a full server. The `PRAGMA foreign_keys=ON` command enforced referential integrity, preventing orphaned ratings from corrupting the system. The implementation included built-in protection against gaming the system. Duplicate checks prevented the same user from swaying results with multiple submissions. The database schema—though hidden in the scaffolding—likely used transactions to maintain consistency when multiple participants rated simultaneously. This is the unglamorous reality of production systems: preventing edge cases is often more important than handling happy paths. One fascinating aspect of this design is how it mirrors the **Eisenhower Matrix** principle from productivity management, but makes it data-driven. Instead of relying on intuition about which initiatives matter, the team now had empirical evidence. Ideas that clustered in the high-impact-low-effort quadrant became obvious prioritization targets. The system worked. Teams could now move beyond "I like this idea" to "We collectively believe this has high impact and can be done quickly." Decisions became more transparent, biases more visible, and disagreements more productive because the data was right there to discuss. 😄 Why did the SQL query go to therapy? It had too many issues with its relationships.

Jan 23, 2026
New Featureai-agents

**Step 1: Send task to Designer**

# **Step 1: Send task to Designer** ## Что было сделано ## Assistant: I'll start the development process by delegating tasks to each team member. Let me send detailed task descriptions to everyone. **Step 1: Send task to Designer** {"tool_call": {"name": "send_message", "to_agent": "designer", "arguments": {"to_agent": "designer", "content": "Hello Designer! Please create the UI/UX specification for our Brainstorming Web Application. Here are the requirements:\n\n**Pages/Views needed:**\n1. **Landing/Session Page** - Where users can create or join ... ## Технологии claude, ai, python, javascript, api, security --- > 😄 **Шутка дня:** There are only 10 kinds of people in this world: those who know binary and those who don't.

Jan 23, 2026
New Featureai-agents

**Step 1: Delegate to Designer**

# **Step 1: Delegate to Designer** ## Что было сделано ## Assistant: I'll start the development process by delegating tasks to each team member. Let me send detailed task descriptions to everyone. **Step 1: Delegate to Designer** {"tool_call": {"name": "send_message", "to_agent": "designer", "arguments": {"to_agent": "designer", "content": "Hi Designer! Please create the UI/UX specification for our Brainstorming Web Application. Here are the requirements:\n\n1. **Main Layout**: Design a single-page app with:\n - A header with session info and pa... ## Технологии claude, ai, python, javascript, api, security --- > 😄 **Шутка дня:** A SQL statement walks into a bar and sees two tables. It approaches, and asks "may I join you?"

Jan 23, 2026
Generalai-agents

{"tool_call": {"name": "write_blackboard", "arguments": {"key": "test", "value": "hello"}}}

# {"tool_call": {"name": "write_blackboard", "arguments": {"key": "test", "value": "hello"}}} ## Что было сделано ## Assistant: {"tool_call": {"name": "write_blackboard", "arguments": {"key": "test", "value": "hello"}}} ## Технологии claude, ai, security --- > 😄 **Шутка дня:** Being a self-taught developer is almost the same as being a cut neck chicken because you have no sense of direction in the beginning.

Jan 23, 2026
New Featureemail-sender

Целевая аудитория не пользователи, а компании.

# Целевая аудитория не пользователи, а компании. ## Что было сделано ## User: Давай начнем новый проект. Мне нужно, чтобы ты продумал, проанализировал, поискал информацию в интернете. Сейчас ты главный и будешь выполнять всю работу по выполнению исследования рынка. Мне нужен продукт, который будет выполнять рекламную расслку. Он будет отправлять пользователям письма. Эти письма нужно собрать максимально персонализированно. Они должны быть разные, чтобы не попадали в спам-фильтр. Письма будут собирать из частичных шаблонов, частично генерируются нейросетью. И сами... ## Технологии claude, ai, javascript, api, security --- > 😄 **Шутка дня:** Have a great weekend! I hope your code behaves the same on Monday as it did on Friday.

Jan 22, 2026
New Featureai-agents

Scaling Chaos: How One CTO Built Order Through Agile and Automation

# From Sprints to System: How a CTO Tamed the Chaos Pavel Borisov took the helm as CTO at KITT in July 2023, inheriting what many technical leads dread: a growing team without structured processes. Over the next 27 months, he would transform scattered individual efforts into a well-oiled machine capable of delivering complex systems. The first challenge was organizational. With engineers ranging from juniors to seniors, designers, technical writers, and automation specialists, there was no unified methodology. **Borisov implemented Agile principles**, introducing two-week sprints and establishing transparent task tracking systems. This wasn't just about ceremonies—it was about creating visibility across the entire company. Teams could finally see what others were building, why, and when it would ship. The infrastructure grew in parallel. Borisov built a complete CI/CD pipeline using GitLab, automating build and deployment processes for multiple products simultaneously. This decision proved critical: it meant developers spent less time on manual deployment rituals and more time solving actual problems. The pipeline would later support everything from web platforms (Tagat and Coddera) to specialized industrial systems. One standout achievement was launching a **service-based system in just five months**. With a dedicated squad of frontend engineers, backend specialists, designers, and analysts, the team shipped an MVP on a sprint-based schedule. This success proved the process worked—and that it could scale. The most technically ambitious project showcased the system's maturity: an intelligent defect detection system for PAK (UEC Aviadvigatel), built with Avalonia UI Kit and deployed on RED OS with NVIDIA CUDA support. Integrating neural network models into production aerospace inspection equipment demanded rigorous QA and deployment discipline—exactly what the new processes provided. Today, this system runs in actual industrial production. Perhaps the most telling achievement came later: a configurable SCADA system for electroplating manufacturing. Rather than custom-building solutions for each client, Borisov's team created a flexible platform with scheduling precision down to three seconds. This shift from bespoke to platform thinking reflects mature technical leadership—understanding that infrastructure investments pay dividends across multiple projects. **Key insight for tech leaders**: Implementing process doesn't require abandoning flexibility. Borisov used Agile *as a framework*, not a religion, adapting it to support both rapid prototyping and industrial-grade reliability. The sprints accommodated innovation alongside stability. The transformation demonstrates that technical directors who combine hands-on architecture skills with team leadership can multiply organizational output. Processes scale businesses; people scale impact. 😄 You know what they say about sprint planning—it's the only time engineers agree on how long something will take to build.

Jan 21, 2026
New Featurespeech-to-text

Напиши файл описания проекта README.MD, подскажи как рапустить проект.

# Напиши файл описания проекта README.MD, подскажи как рапустить проект. ## Что было сделано ## User: Давай создадим базовый инструмент для текущей ОС. Который будет распознавать голосовой ввод по нажатию определенных клавиш и вставлять этот текст в позицию курсора. Тебе надо узучить аналогичные инструменты. Подобрать технологии. Выбрать инструменты для распознования. Определить какую мультиязычную модель можно использовать. Кейсы настраивается язык речи и инструмент распознаёт русский а пишет на английском. Или русский русский или английский английский. Инструмент должен идеально работ... ## Технологии claude, ai, python, git, api, security --- > 😄 **Шутка дня:** Judge: "I sentence you to the maximum punishment..." Me (thinking): "Please be death, please be death..." Judge: "Learn Java!" Me: "Damn."

Jan 20, 2026
Bug Fixai-agents-salebot

+ & C:\projects\ai-agents-salebot\venv\Scripts\Activate.ps1

# + & C:\projects\ai-agents-salebot\venv\Scripts\Activate.ps1 ## Что было сделано ## User: + & C:\projects\ai-agents-salebot\venv\Scripts\Activate.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : Ошибка безопасности: (:) [], PSSecuri tyException + FullyQualifiedErrorId : UnauthorizedAccess PS C:\projects\ai-agents-salebot> Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process PS C:\projects\ai-agents-salebot> & C:\projects\ai-agents-salebot\venv\Scripts\Activate.ps1 (venv) PS C:\projects\ai-agents-salebot> .\venv\Scrip... ## Технологии claude, ai, python, api, security --- > 😄 **Шутка дня:** ASCII silly question, get a silly ANSI.

Jan 20, 2026
New Featurespeech-to-text

Как отключить запрос на запуск команды?

# Как отключить запрос на запуск команды? ## Что было сделано ## User: Как отключить запрос на запуск команды? В текущем проекте добавь claude разрешения на запуск любого файла ## Assistant: ## Как отключить запрос на запуск команды Есть несколько способов: ### 1. Флаг командной строки (одноразово) ```bash claude --dangerously-skip-permissions ``` ### 2. Разрешение конкретных команд ```bash claude --allowedTools "Bash(npm:*)" "Bash(git:*)" "Read" "Edit" ``` ### 3. Через настройки проекта Создайте файл `.claude/settings.json`: ```json { "permission... ## Технологии claude, ai, javascript, git --- > 😄 **Шутка дня:** Why did the programmer jump on the table? Because debug was on his screen.

Jan 20, 2026