← Portfolio
AUEB · Programming II · March 2026

ChatAUEB — AI Advisor,
Live in Production

AI department guidance system for all 8 AUEB departments — 18-question survey, LLM analysis, personalised recommendation. The desktop app runs live in the browser (via remote-desktop streaming), at 0€/month.

Java 21 Swing Llama-3.3-70B · Groq PostgreSQL / Neon Docker · Fly.io noVNC · Browser Access SHA-256 · PreparedStatement v1.0 · 2023 v2.0 · March 2026
18
Survey questions
8
AUEB departments
70B
Model parameters
0€
Monthly hosting cost
9+1
Developers (v1 + v2)
Summary — for recruiters
Full-Stack Builder & DevOps · Live Production App · AUEB · 2025–26
I took a team Java application and turned it into a production system — migrated from paid OpenAI to free Groq LLM, replaced the university SQL Server with cloud PostgreSQL, containerised with Docker and deployed live on Fly.io with CI/CD.
IMPACT Live at chataueb.fly.dev — operational cost 0€/month. Full security stack: SHA-256, PreparedStatement, .env secrets, AI topic restriction.
Java Docker Fly.io PostgreSQL LLM Integration CI/CD noVNC
01 — Motivation
Problem · Approach · Solution
AUEB has 8 departments with heavy thematic overlap — a hard call to make alone at 18. ChatAUEB closes that gap: questionnaire → LLM analysis → reasoned recommendation, as an objective, always-available first take — not a replacement for human guidance.
LLM = Large Language Model — an AI trained on huge amounts of text to understand questions and generate human-like answers.
ΔΕΟΣ · 01
International, European & Economic Studies
International relations, European integration, multilingualism
ΟΕ · 02
Economics
Macroeconomics, econometrics, public economics
ΔΕΤ · 03 ★
Management Science & Technology
Management, digital innovation, technology
ΟΔΕ · 04
Business Administration
Strategy, human resources, logistics
ΛΧ · 05
Accounting & Finance
Accounting, financial analysis, investments
ΜΕ · 06
Marketing & Communication
Marketing strategy, digital marketing
ΠΛ · 07
Informatics
Algorithms, artificial intelligence, cybersecurity
ΣΤ · 08
Statistics
Statistics, operations research, data analysis

★ My department

02 — User Flow
Browser → Survey → LLM → Recommendation · 6 steps
Browser
chataueb.fly.dev — no install needed
Auth
Register / Login / Guest
Survey
18 questions · min 10 answers
AI Analysis
Groq API · 5–15″ · background thread
Recommendation
Primary + alternative + rationale
Follow-up
AUEB Advisor — free Q&A
AUEB Advisor: free-form Q&A beyond the survey — locked to Greek, on-topic, and injection-safe by system prompt.
03 — Architecture
5-Layer Architecture · Loose Coupling · Separation of Concerns
In plain terms: the app is split into clear layers — screen, coordination, AI logic, business rules, and database — so each part can change without breaking the others.
PRESENTATION
Gui.java  ·  ProgressBar.java
Swing frames, event handling
APPLICATION
App.java
5-step bootstrap, coordination
SERVICE
AIService.java  ·  QueryBuilder.java
Groq API client, prompt assembly
DOMAIN
User.java  ·  Questions.java  ·  Labels.java
Business logic, authentication
INFRASTRUCTURE
ConnectionDB.java  ·  AppConfig.java
JDBC, .env loader, schema bootstrap
Key Data Flows
Recommendation Gui → QueryBuilder → AIService → Groq API → openResponseFrame()
Registration Gui → User.signUp() → SHA-256 → ConnectionDB → Neon
Startup AppConfig → Questions → initSchema() → download() → invokeLater()
04 — AI Integration
Groq API · llama-3.3-70b · Async Execution · Thread-Safe
In plain terms: the app talks to the AI in the background, so the interface never freezes while waiting for a reply.

AIService runs on a background thread — no UI blocking — synchronised via wait/notifyAll, with a hand-rolled JSON parser and zero external dependencies.

AIService.java
Groq HTTP client
HTTP POST to Groq, off the EDT. Manual JSON parsing — zero dependencies. awaitResponse() via synchronized wait/notifyAll.
HTTP POSTJSON ParserThread Safetywait/notifyAll
QueryBuilder.java
Prompt assembly
Assembles the prompt from 18 Q&As + all 8 department profiles. System prompt enforces Greek, professional tone, and blocks injection/off-topic asks.
Prompt EngineeringScope LockSystem Prompt
API Config
# Groq API — OpenAI-compatible, free LPU inference Model: llama-3.3-70b-versatile Max tokens: 1500 Temperature: 0.5 ← balanced creativity/consistency Endpoint: https://api.groq.com/openai/v1/chat/completions # v1.0 → v2.0: OpenAI paid → Groq free (OpenAI-compatible → minimal code changes)
05 — Containerisation & Deployment
Docker Multi-Stage · noVNC · Fly.io · CI/CD · Zero Software Install
In plain terms: ChatAUEB is a desktop app, but it's packaged so anyone can open and use it straight from a browser — nothing to download or install.

Swing app on a virtual display (Xvfb) → x11vnc → noVNC HTML5 — accessible from any browser, zero install.

Technologies used, in plain terms:
Docker — packages the app so it runs identically anywhere, no "works on my machine" surprises.
CI/CD — every code push is automatically tested and deployed live, no manual steps.
TLS/SSL — encrypts the connection so no one can read the data in transit.
REST — the standard way the app and server exchange requests over the web.
JSON — a simple text format for exchanging data between systems.
WebSocket (WS) — a connection that stays open for real-time, two-way communication.
Infrastructure Architecture
User
Browser HTML5
HTTPS
Fly.io Docker Container
noVNC
HTML5
websockify
TCP→WS
x11vnc
VNC server
Xvfb
Virtual display
Java Swing
ChatAUEB
REST/JDBC
Groq API
llama-3.3-70B
Neon DB
PostgreSQL
start.sh: Xvfb :99 → fluxbox → java -jar chataueb.jar → x11vnc → noVNC → Port 6080
Stage 1: builder
eclipse-temurin:21-jdk-jammy
Maven build → fat JAR. jlink custom JRE with 11 required modules. Reduction ≈650 MB → ≈95 MB (−85%).
MavenjlinkCustom JRE95 MB
Stage 2: runtime
debian:bookworm-slim
Copy custom JRE + JAR + start.sh + noVNC. apt install: xvfb x11vnc fluxbox. Port 6080 → Fly.io TLS.
Xvfbx11vncnoVNCFly.io
fly.toml — Deployment Parameters
Region
ams (Amsterdam)
VM
shared-cpu-1x 512 MB
Cost / CI-CD
0€/month · auto-deploy on push
06 — Database
Neon PostgreSQL · Serverless · SSL/TLS · v1→v2: University SQL Server → Cloud

v1.0 ran on AUEB's SQL Server — a university-infra dependency. v2.0 moved to Neon PostgreSQL (serverless, free tier, SSL mandatory) — zero code changes required.

SQL Schema
-- Auto-created on startup (initSchema) CREATE TABLE IF NOT EXISTS users ( username VARCHAR(100) PRIMARY KEY, pass VARCHAR(64) NOT NULL -- SHA-256 hex, never plain text ); CREATE TABLE IF NOT EXISTS answers ( username VARCHAR(100) REFERENCES users ON DELETE CASCADE, question_idx INT, -- 0–17 answer_idx INT, -- 1–6 PRIMARY KEY (username, question_idx) );
07 — Security
Multi-Layer Security Stack · Authentication · Transport · Database · AI Scope
In plain terms: passwords are never stored as readable text, all database queries are built safely against injection, secrets stay out of the codebase, and the AI is locked to stay on-topic.
Domain Mechanism Implementation
AuthenticationPassword HashingSHA-256 hex (64 chars) — plain text never stored
Secrets.env ManagementAPI keys via .env only — excluded from Git and Docker image.
DatabaseSQL InjectionPreparedStatement everywhere — zero string concatenation in SQL.
TransportSSL/TLSsslmode=require in the JDBC URL, via jdk.crypto.ec in the custom JRE.
ResourcesResource Managementtry-with-resources on every Connection and Statement.
AI SafetyScope LockSystem prompt rejects off-topic queries and prompt injection attempts.
InputValidationEmpty credentials, duplicate usernames, minimum 10 answers required for AI query.
08 — Evolution
v1.0 → v2.0 · Full upgrade of architecture, infrastructure & security
v1.0 — Initial Build
OpenAI API (paid)
AUEB SQL Server (infrastructure dependency)
Local execution only
Basic Swing UI
No .env management
9-person team
v2.0 — Production Ready
Groq API — free, LPU hardware, OpenAI-compatible
Neon PostgreSQL — serverless cloud, SSL required
Browser access via noVNC · Fly.io production
Dark theme, card-based layout, chip-style choices
SHA-256 + .env + PreparedStatement security stack
GitHub Actions CI/CD — auto-deploy on git push
09 — Team
v1.0 Team · 9 members · + v2.0 Solo Upgrade
Student IDNameContribution
8220035Σπήλιος Δημακόπουλοςv1.0: Core functionality, AI · v2.0: Full upgrade — UI/UX, PostgreSQL/Neon, Docker, noVNC, Fly.io, CI/CD, Security
8220092Έρνολντ ΜουλάιRepository management, database
8220116Εμμανουήλ ΠαπαγιάννηςCode coordination, GUI
8220019Σταύρος ΒλάχοςQuestionnaire design
8220225Νικόλαος ΣινάνιDomain model, quality assurance
8220132Αθ.-Παν. ΣακκάτοςInfrastructure classes, architecture
8220231Άντζελα ΝτάσιAUEB department information
8220015Ευγενία ΒέκιουAUEB department information
8220141Παύλος ΣταμάτηςDevelopment and integration
10 — Roadmap
Current Limitations & Future Extensions
Current Limitations
Single user — Java Swing does not support concurrent sessions Mobile UX — degraded experience due to VNC scaling Password Reset — no email-based recovery AI Non-determinism — temperature=0.5, results vary
Proposed Extensions
HighSpring Boot + React — native multi-user web app HighEmail authentication & password recovery MediumRAG (AI searches official documents before answering) with official AUEB documents MediumUsage analytics dashboard LowMultilingual support
Reflection
What I took away — looking back
From group project to production. v1.0 was a 9-person coursework deliverable. Eight months later I rebuilt it solo for v2.0 — the steepest learning curve in this portfolio: backend, AI integration, infra and security, end to end.
Swing has limits — that was the point. Java Swing isn't built for this kind of UI. Making it work over a browser via noVNC, instead of switching stacks, was a deliberate constraint to deepen Java expertise — and the trade-off was worth it.
Free-tier doesn't mean compromise. Groq + Neon + Fly.io proved a fully-featured, secured, CI/CD-deployed AI app can run at 0€/month — it reshaped how I weigh infra cost before reaching for paid services.

ChatAUEB v2.0 proves a production-ready AI app — real users, cloud database, CI/CD, full security stack — can run at zero monthly cost on free-tier services alone.

The entire v2.0 upgrade — infrastructure, UI/UX, security and deployment — was rebuilt solo, end to end.

Spilios Dimakopoulos · Java 21 · Groq · Neon · Docker · Fly.io · v2.0 · March 2026
✓ EMAIL COPIED