Employee_Feedback_Analyzer: The HR AI Stack That Fits in One Monolith

A Java 21 and SQLite system that turns raw employee complaints into structured signals, then grounds HR answers in policy text without needing a vector database.

8 min read • View on GitHub • More from Hariharan22-hub

A folded employee complaint enters a compact office machine and emerges as a structured HR report. Inside the machine, the note passes through analysis chambers, storage, and policy lookup, showing how a sensitive text blob becomes a usable internal signal.
The project compresses ingestion, analysis, storage, and policy grounding into a single local-first workflow.
Key Takeaways

The strange part is what it does not use

Most enterprise AI tools arrive with the same baggage: a database cluster, a vector store, a separate inference service, and a lot of operational ceremony. This project cuts that stack down to the essentials. It runs on Java 21, Spring Boot, SQLite, and a Java-native retrieval layer, yet still turns workplace feedback into structured signals and policy-grounded responses.

That restraint is the point. The repo is not trying to prove that HR needs more software. It is trying to prove that sensitive internal AI can work with less infrastructure, fewer moving parts, and a narrower blast radius.

One complaint becomes structured data, then two kinds of usefulness: triage for HR and grounded answers from policy text.

Why workplace feedback is a hard AI problem

Workplace feedback is not ordinary support text. It can describe harassment, burnout, compensation anger, manager conflict, or plain confusion, often in language that is emotionally charged and easy to misread. A useful system has to preserve trust for employees while still giving HR enough structure to act quickly.

The repository’s design acknowledges that tension directly. It does not treat anonymity as a cosmetic UI setting. It treats it as part of the data model, alongside the kinds of metadata HR actually needs to separate noise from escalation.

Two interlocked scales balance a masked employee record against a stack of policy documents and an HR dashboard card. Thin threads connect the record to the policy stack, illustrating that anonymous feedback can still drive action when it is grounded in rules rather than identity.
The hard part is not hiding names. It is keeping the record useful after the names are hidden.

The feedback pipeline, from submission to structured signal

The heart of the system is simple to describe and easy to underestimate. An employee submits feedback. Gemini analyzes it for sentiment, emotion, intent, topic, and urgency. The result is stored in SQLite as structured data, not just as a raw string.

// Conceptual flow in the repository
Feedback feedback = feedbackService.submit(employeeText, isAnonymous);
AnalysisResultDto analysis = geminiService.analyze(employeeText);
feedback.setSentimentScore(analysis.sentimentScore());
feedback.setEmotion(analysis.emotion());
feedback.setIntent(analysis.intent());
feedback.setTopic(analysis.topic());
feedback.setUrgency(analysis.urgency());
feedbackRepository.save(feedback);

That order matters. The project does not wait for humans to classify the message later. It front-loads the interpretation so downstream tools can filter by urgency, group by theme, and spot organizational patterns without rereading every complaint.

Privacy by design, but not privacy by default

The anonymous flag gives the system its ethical edge, but it also exposes the hardest tradeoff in the product. HR needs enough context to investigate. Employees need enough protection to speak honestly. A system that is too opaque loses accountability. A system that is too transparent loses trust.

This is why the implementation matters more than the slogan. The data can remain relational behind the scenes, while the HR-facing view masks identity details. That lets the organization preserve continuity in its records without turning the dashboard into a surveillance tool.

DimensionLocal-first designConventional enterprise AI stack
PersistenceSQLite in-processPostgreSQL or managed database cluster
RetrievalJava-native TF-IDF over policy textDedicated vector database and retrieval service
AuthStateless JWT plus RBACBroader auth stack with more integration layers
Feedback handlingStructured metadata at ingestionRaw text inbox with later manual triage
OperationsOne monolith, fewer dependenciesMore services, more coordination overhead

The HR Assistant is really a grounded policy lookup machine

The assistant is not trying to be a universal workplace oracle. It is a retrieval system with a conversational layer on top. The knowledge base lives in text files under the backend resources directory, and the retrieval logic uses Java-side similarity scoring to select relevant policy context before generating an answer.

That design keeps the assistant anchored to the organization’s own documents. When someone asks about leave policy, conduct issues, or escalation rules, the answer is shaped by the policy corpus rather than by the model’s generic memory. In a workplace setting, that distinction is the whole game.

Why the stack feels enterprise-grade without enterprise sprawl

The combination of Java 21, Spring Security, JWT, Hibernate, SQLite, and TF-IDF looks almost understated. It is not flashy. It is durable. The system has clear boundaries, a transactional backend, and a small operational footprint, which is exactly what an internal tool handling sensitive feedback needs.

That compactness is also strategic. A smaller stack is easier to audit, easier to deploy, and easier to keep consistent across environments. In a domain where trust is part of the product, operational simplicity is not a bonus. It is part of the UX.

What this repo optimizes forWhat it avoids
Low operational overheadA sprawling services mesh
Policy-grounded answersFree-form LLM guesswork
Structured triageManual reading of every message
Portable deploymentHeavy infrastructure dependency

What this project is really a model for

Employee_Feedback_Analyzer is less a finished product than a pattern worth copying. It shows how to build small-footprint internal AI tools that are privacy-aware, policy-grounded, and useful before they become complicated. That combination is rare because most teams solve one of those goals at the expense of the others.

The lesson is not that every HR system should be Java plus SQLite. The lesson is that sensitive workflows often benefit from the least dramatic architecture that still respects the problem. Here, the monolith is the feature.