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.
🚀 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:
- The customer writes a natural language query via the chat on the website.
- The AI understands exactly what is needed: category, color, size, budget.
- The system shows precisely the products the shopper is looking for.
- 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
⸻
If you have a project or questions — write to me: