Vadim Kharovuyuk, Java Backend Developer

Updated:
✦ Ask AI about this article
Vadim Kharovuyuk, Java Backend Developer

My name is Vadym Kharovyk. I am a Java Backend developer with eight years of experience in the Spring ecosystem. Today, my main specialization is AI solutions for business in Java: document search, AI assistants, integrations with language models, and connecting services to ChatGPT and Claude.

In parallel with commercial projects, I maintain a technical blog at webscraft.org/blog — I write about real-world cases from my own experience, not just rephrasing documentation.

📚 Table of Contents

⸻

🎯 About Me

32 years old, I work remotely with clients from different countries. I came to IT consciously — after university, I realized I wanted to build products, not just write code according to technical specifications. The first few years involved monolithic Spring Boot applications, databases, and REST APIs. Over time, it evolved to microservices, message queues, and complex integrations with external services. And since 2024, I've been deeply immersed in AI integrations and developing my own SaaS products based on large language models.

Today, I primarily work with the AI stack: vector search, RAG, LLM integrations, and MCP servers — all in Java and Spring. This is a rare combination: most AI solutions are written in Python, and I help companies whose backend is already in Java add AI without a separate service in another language.

At the same time, I am responsible for the full cycle: from architecture design to production deployment with monitoring and support. I think not only about the code but also about scalability, infrastructure costs, end-user experience, and the overall business logic of the product.

The best way to understand a technology is to build something real with it and bring it to production. Theory without practice is just nice words on a resume.

💡 How I Can Help Your Business

Without technical jargon — what you get. Terms in small print for those who want to understand; explanations are in the glossary below.

🔍 AI Search Across Your Documents

Employees ask questions in natural language — "what are the return conditions in the supplier agreement?" — and get an answer in seconds with a link to the specific document. No more hours spent scrolling through folders and searching "where is that file."

Technically: RAG, vector search, pgvector

💬 AI Assistant on Your Website

Visitors get answers to questions about your services or products 24/7 — based on your information. Fewer repetitive questions for support, more leads.

Technically: LLM integration, RAG

🤖 Your Website or Service — Accessible to ChatGPT and Claude

Customers who use AI assistants can find your products, articles, or data directly in the chat — and see links to you. A new channel where there are few competitors right now. How it works in practice — I showed with the example of my own blog.

Technically: MCP server

⚙️ AI in Your Existing Product

Automatic summaries, ticket classification, text generation, analytics — I integrate these into systems that are already working, without rewriting from scratch. The data remains under your control.

Technically: LLM integrations (OpenAI, Claude, local models via Ollama)

🧩 Backend for Web Products

A reliable foundation for your service: authentication, payments, user dashboards, mobile versions. From a simple API to a complete product.

Technically: Java, Spring Boot, PostgreSQL, PWA

⸻

📂 My Product: AskYourDocs

AskYourDocs is a B2B platform for searching corporate documents. A company uploads its contracts, instructions, and regulations, and employees ask questions in natural language and get answers with links to the source.

The key solution is a separate, isolated installation for each client. One company's documents do not physically intersect with another's data, which is important for confidential data and GDPR requirements.

  • Content-based search, not keyword search — finds the answer even if it's phrased differently in the document
  • Answers with sources — the user sees which document the information came from and can verify
  • Data isolation — single-tenant installation for each client

The stack is Java, Spring Boot, Spring AI, PostgreSQL + pgvector.

🌐 webscraft.org AI Infrastructure

My blog is not just articles, but also a working sandbox for AI solutions that I then apply in client projects. Everything runs in production.

  • AI chat for blog articles — answers reader questions based on articles and provides links to sources. RAG on pgvector and Spring AI.
  • Public MCP server — Claude, ChatGPT-compatible clients, and OpenCode can search blog articles directly in chat. Semantic search, rate limiting on Redis, protection via Cloudflare. There are few such implementations in Java so far. Details are in the article about the MCP server for websites.
  • SEO agent — daily collects data from Google Search Console and GA4, analyzes it via LLM with tools (Spring AI tools), and sends reports with recommendations via email.

🤖 New Project: AI Platform for Character Interaction

A full-fledged SaaS platform where users interact with AI characters — psychologists, mentors, companions, comedians, romantic characters, and others. Each character has its own personality, communication style, and long-term memory of the user. Coming soon to production.

The project was built entirely by myself — from architecture to deployment. It's not a demo or a pet project, but a full-fledged product with billing, AI memory, semantic search, and real infrastructure on Railway.

What's Inside:

  • Spring AI 2.0 + LLM Integration — OpenRouter as a unified gateway to various models: DeepSeek V4 Flash as the main model, separate models for romantic and provocative characters (sao10k/l3.3-euryale-70b), Gemini for support. Model switching via configuration without code changes.
  • AI Memory and RAG — long-term memory system based on pgvector: extractAllFacts extracts 11 fields from the dialogue in one LLM call, hybrid search via Reciprocal Rank Fusion (vector search + PostgreSQL FTS), semantic and episodic summaries with Caffeine cache.
  • Streaming via SSE — character responses are streamed token by token via Server-Sent Events, a Stop button for interruption, a token queue with typing animation.
  • Billing — WayForPay prepaid integration (the only payment system available in Ukraine without a private entrepreneur status), token-based payment model, FREE/BASIC/PRO subscriptions with different limits, webhook supporting JSON and form-urlencoded.
  • Scenes and Role-Playing Games — scene system with AI-generated plots: tag selection → LLM generates draft → save. Romantic dates, detective investigations, alumni reunions.
  • Telegram Integration — interaction with characters directly in Telegram, account linking, a separate bot for local development to avoid conflicts with the production bot.
  • Moderation and Security — KeywordCrisisDetectionService, character reactions to messages, age verification for provocative content.
  • SEO Optimization — separate SEO controllers for the catalog and character pages, slug routing, JSON-LD structured data, OG tags, sitemap.
  • Infrastructure — Railway (Spring Boot + pgvector PostgreSQL), Docker with G1GC tuning, Cloudinary for images, ngrok for local webhook development.

The entire stack — Java 21, Spring Boot 3, Spring AI 2.0, PostgreSQL + pgvector, Thymeleaf + Bootstrap 5, OpenRouter, WayForPay, Cloudinary, Telegram Bot API — was designed, written, and is maintained by one person.

Vadim Kharovuyuk, Java Backend Developer — 2

🚀 One of the Projects: Kazki AI

Kazki AI is a personalized audio fairy tale service for children, where the child is the main character of the story. Parents enter the child's name, their interests, and favorite characters — the system generates a unique fairy tale and voices it using an AI voice through ElevenLabs.

The project was written entirely by myself — from architecture to deployment. It's not a pet project for a resume, but a live production service with a payment system, subscriptions, push notifications on iOS and Android, and real users.

What's Inside:

  • AI Content Generation — OpenAI generates the fairy tale text considering the child's name and preferences, ElevenLabs voices the result with a natural voice.
  • Payment System — Stripe with a subscription model: different pricing plans, access management, webhook event handling.
  • PWA Without App Store — installable on the home screen, offline mode, push notifications via Web Push API (VAPID) on iOS 16.4+ and Android.
  • Authorization — Spring Security + OAuth2 (Google), CSRF protection, session management via Redis.
  • SEO and Performance — server-side rendering via Thymeleaf, caching at the Redis level, image optimization via Cloudinary.
  • Database — PostgreSQL with a well-thought-out schema: users, fairy tales, subscriptions, push subscriptions, payment events.

The entire stack — Spring Boot, PostgreSQL, Redis, ElevenLabs, Stripe, Cloudinary, PWA — is deployed and maintained in production by one person.

👗 Commercial Project: FashionI

FashionI is an online clothing store with a built-in AI system that I developed to understand customers in natural language. Instead of standard filters and categories — shoppers simply describe what they are looking for: "black dress for a wedding, budget $80, size M".

I implemented a system that automatically finds the right products, selects the appropriate size considering the specifics of each brand, helps with order placement and returns, and also offers personalized recommendations based on browsing history.

What I Solved for the Business:

  • Increased Conversion — I made it so that customers can find the right clothes faster without having to sift through dozens of pages of filters.
  • Reduced Returns — I created an intelligent size selection that considers body measurements and the specific cut of each brand.
  • Support Automation — I set up an AI agent that independently answers questions about orders, delivery, and returns.
  • Effortless Personalization — I implemented recommendations that are automatically generated based on user behavior.
  • Development Cost Savings — I created a unified system that replaces separate modules for search, support, recommendations, and size selection.

How It Works for the Customer:

  1. The customer writes a natural language query via the chat on the website.
  2. The AI understands exactly what is needed: category, color, size, budget.
  3. The system shows precisely the products the shopper is looking for.
  4. If necessary, it helps with size selection and completes the order.

I independently designed the architecture of the multi-agent system, configured the interaction between agents, implemented semantic search for accurate query understanding, and brought the project to a fully working state.

⸻

🛠️ Technology Stack

AI — Main Specialization

  • Spring AI — integrating LLMs into Spring applications, tools / function calling
  • RAG and Vector Search — pgvector, embeddings, chunking, hybrid search (vector + full-text)
  • MCP — servers for Claude, ChatGPT, and other AI clients (Streamable HTTP, STDIO)
  • LLM Providers — OpenRouter, OpenAI API, Gemini, DeepSeek
  • Local Models — Ollama, LM Studio (for private data without the cloud)
  • Response Streaming — Server-Sent Events
  • ElevenLabs — speech generation (Text-to-Speech)

Backend

  • Java 21 — primary language
  • Spring Boot — production applications of any complexity
  • Spring Security — authentication, OAuth2, JWT, CSRF
  • Spring Data JPA / Hibernate, JdbcClient — working with relational databases
  • Spring MVC / REST API — building HTTP interfaces
  • Spring Cloud — microservice patterns

Databases

  • PostgreSQL + pgvector — primary database, including for vector search
  • MySQL — an alternative for certain project types
  • Redis — caching, sessions, rate limiting

Message Queues and Asynchronicity

  • Apache Kafka — stream data processing, event-driven architecture
  • RabbitMQ — asynchronous queues for microservices

Frontend and PWA

  • Thymeleaf — server-side rendering with SEO
  • JavaScript, HTML, CSS, Tailwind
  • PWA (Service Worker, Web App Manifest)
  • Web Push API / VAPID — push notifications on iOS and Android

Payments and Integrations

  • Stripe, WayForPay — subscriptions, webhooks
  • Telegram Bot API
  • Google Search Console API, GA4 API
  • Cloudinary — media storage and image optimization

DevOps and Infrastructure

  • Docker — containerization
  • Railway / Render — deploying production applications
  • Cloudflare — CDN, protection, AI crawler control
  • GitHub Actions — CI/CD pipelines

💼 What I Do for Clients

Over eight years of commercial development, I've developed an approach that works equally well for early-stage startups and mature businesses with legacy systems. From small REST APIs to full-fledged SaaS platforms with AI integrations, billing, and thousands of users.

Starting with Architecture, Not Code

Before writing the first line, we analyze the business problem, identify potential bottlenecks, and choose a stack for the specific case. Monolithic Spring Boot or microservices — depends on the scale and team, not on trends. I don't impose over-engineering where a simple solution suffices, and I don't simplify where a serious architecture is needed.

Full Cycle Without Gaps

Designing the database schema, REST API with documentation, authentication via Spring Security and OAuth2, integrations with payment systems (WayForPay, Stripe), Telegram Bot API, external AI providers. Deployment via Docker on Railway, VPS, or the client's own infrastructure. The client receives a finished product, not a set of components that still need to be assembled.

AI Integrations as Part of the Product

Since 2024, I've been integrating large language models into commercial products: document search with pgvector, response streaming via SSE, long-term memory for personalization, multi-model strategies via OpenRouter, MCP servers for connecting to Claude and ChatGPT. I pay special attention to ensuring the AI honestly says "not found" rather than fabricating an answer, and that client data doesn't leak where it shouldn't. AI is not a buzzword on a resume, but concrete technical solutions that are already working in production.

Performance Built-In from the Start

Caching at the Caffeine or Redis level, optimization of SQL queries and indexes in PostgreSQL, asynchronous processing of heavy operations, HikariCP tuning for controlled database load — all of this is incorporated into the architecture from the beginning. Not as "optimization" after the system crashes under load, but as part of the design from day one.

Maintainable Code

The code I deliver is readable a year later without the author present. Clear package structure, separation into layers (controller → service → repository), separate DTOs and mappers, constants instead of magic strings, explicit logging for debugging in production. Test coverage for critical paths — because maintaining the project after launch will be up to you or another developer.

Portfolio of works — webscraft.org/portfolio

⸻

📝 Technical Blog

Together with the team, we maintain a technical blog at webscraft.org/blog — we write about real development cases, new tools, and approaches that we use in practice. Not a rehash of documentation, but concrete solutions from live projects. Main topics — RAG, vector search, MCP, Spring AI, and local models.

If you have a technical question, want to discuss project architecture, or simply don't know where to start — write directly, I respond personally.

⸻

🎯 Development Approach

Over eight years, I've seen the same problems across various projects. Not technical ones — organizational. Development starts without a clear architecture, the first release is delayed, and then half the time is spent on refactoring instead of new features. My approach is built around preventing this.

Problem: "Let's build it first, figure it out later"

The most common scenario is a project starting without database design and architecture planning. Three months later, it turns out the schema can't handle real-world data, and adding a new feature means rewriting half the code. I always start with data modeling and defining system boundaries — even if the client wants to "just launch quickly."

Problem: Microservices for the sake of microservices

A two-person team builds a distributed system with five services, Kafka, and separate databases — because "that's the right way." As a result, 90% of the time goes into infrastructure, not the product. For an early-stage startup, a well-written monolith on Spring Boot is often the better solution. Microservices emerge when there's a real need, not from day one.

Problem: AI for the sake of AI

"Let's add a chatbot" — without understanding what questions it should answer and from what data. The result is a bot that confidently makes up answers or repeats generic phrases. I start by asking what business problem the AI solves, what data it works with, and how to verify its answers are correct. Sometimes the honest answer is that AI isn't needed here; regular search or filters would suffice.

Problem: Performance as an afterthought

"Let's make it work first, then optimize" — a classic that comes at a high cost. N+1 queries in Hibernate, missing indexes, lack of caching — all these are easily addressed at the architecture stage and very difficult to fix in production under load. Redis, proper indexing, asynchronous processing of heavy operations — I build these in from the start.

Problem: Code only the author understands

A year later, the developer who wrote the system no longer works at the company. A new developer spends weeks trying to figure out what's going on. Readable code, clear structure, documentation of critical decisions — this isn't about perfectionism; it's about maintenance cost.

Good architecture isn't what looks beautiful on a diagram, but what's easy to change when business requirements shift.

⸻

📖 Glossary

In short — for those who want to understand the terms on the page.

  • LLM — Large Language Model: ChatGPT, Claude, Gemini, and others. The "brain" that understands questions and formulates answers.
  • RAG — A method to make AI answer based on your documents, not general knowledge: the system first finds relevant snippets, then the model answers based on them and cites the source.
  • Vector Search (embeddings) — Search by meaning, not exact words: "cancel subscription" will find a document about "terminating a plan." Details in the article Embeddings in Simple Terms.
  • MCP — A standard through which AI assistants (Claude, ChatGPT, etc.) connect to external services: your website, database, CRM. How it works using a blog as an example — in the article on MCP server.
  • pgvector — An extension for PostgreSQL that allows for vector search within a regular database, without a separate expensive system.
  • Spring AI — A library for integrating AI into Java applications on Spring.

⸻

❓ FAQ

What is your main specialization?

AI solutions on Java and Spring: document search (RAG), vector search, LLM integrations, and MCP servers. Plus, full-cycle Backend development on Spring Boot: authorization, payments (Stripe, WayForPay), PWA, and Web Push.

Can AI be added to an existing Java product?

Yes, and that's my main specialization. AI functionalities are integrated into an existing Spring application without a separate Python service and without rewriting the system.

Can my website be connected to ChatGPT or Claude?

Yes, via an MCP server: AI assistants will be able to search your products, articles, or data and provide links to your site. I did this for my own blog — here's how it works.

Is it safe to share corporate documents with AI?

It depends on the architecture. For confidential data, I set up isolated installations for each client, and if necessary, work with local models where data never leaves your infrastructure.

Do you take on commercial projects?

Yes. I consider AI integrations, Backend development, technical consulting, and full-cycle web product development. Contact me to discuss details.

How much does development cost?

It depends on complexity. A simple REST API — from $200, a full-fledged product with authorization, payments, and PWA — from $1000. I always provide a detailed estimate after analyzing requirements.

Where can I see your code?

github.com/VadimKharovyuk

⸻

📬 Contacts

If you have a project or questions — write to me: