Assistente AI conversazionale che guida gli artigiani nella scoperta del proprio talento. Chat interattiva con suggerimenti personalizzati per percorsi formativi.

Production-ready RAG-powered orientation platform for artisan vocational training.
Generic chatbots give generic answers. IncluDO Guide is built around a different premise: a structured knowledge base of artisan training paths, a custom vector store with cosine similarity search, and a prompt factory with pedagogical constraints that guarantee focused, relevant recommendations — never more than two courses per session.
The result is an AI assistant that stays on topic, remembers the conversation, and guides users through a domain it actually knows.
User message
│
▼
Session Manager
(anonymous session creation + server-side history persistence)
│
▼
RAG Pipeline
(query → cosine similarity search → top-k chunks from vector_db.json)
│
▼
Modular Prompt Factory
(system prompt + retrieved context + conversation history + pedagogical constraints)
│
▼
GPT-4o-mini
(response generation)
│
▼
Telegram-style UI
(streaming response + session continuity)
Key architectural decisions:
sessions.json, with configurable TTL and background pruning/api/admin/ingest endpoint with token auth and rate limiting, not manual file edits| Layer | Technology |
|---|---|
| Frontend | React 19, Vite, Framer Motion, Vanilla CSS |
| Backend | Node.js 20+ (ESM), Express 5 |
| AI | OpenAI GPT-4o-mini + Text-Embedding-3-Small |
| Storage | Custom JSON vector store + session persistence |
| Deployment | Vercel (frontend) + Coolify/DigitalOcean (backend) |
| Testing | Vitest (backend integration + frontend UI) |
# 1. Clone and install
git clone https://github.com/simonecamerano/includo-guide.git
cd includo-guide
cd server && npm install
cd ../client && npm install
# 2. Configure environment
cp server/.env.example server/.env
# Fill in OPENAI_API_KEY and ADMIN_INGEST_TOKEN
# 3. Seed the vector store
cd server && ADMIN_INGEST_TOKEN=your_secret node scripts/seed.js
# 4. Start backend (terminal A)
cd server && npm start
# 5. Start frontend (terminal B)
cd client && npm run dev
| Variable | Description |
|---|---|
OPENAI_API_KEY |
OpenAI API key for chat completions + embeddings |
ADMIN_INGEST_TOKEN |
Shared secret for /api/admin/ingest |
SESSIONS_DIR |
Filesystem path for session persistence |
SESSION_TTL_MS |
Max inactivity time before session expiry |
SESSION_PRUNE_INTERVAL_MS |
Background prune interval |
MAX_SESSION_MESSAGES |
Max messages retained per session window |
INGEST_RATE_LIMIT_WINDOW_MS |
Admin ingest rate-limit window |
INGEST_RATE_LIMIT_MAX |
Max ingest requests per window |
POST /api/chat// Request
{ "message": "I'm interested in woodworking", "sessionId": "sid_abc" }
// Response
{
"reply": "...",
"history": [...],
"sessionId": "sid_abc"
}
If sessionId is omitted, the server generates a new anonymous session and returns it in the response. Empty or missing message returns 400.
POST /api/admin/ingestSynchronizes courses.json with the vector store. Requires x-admin-token header. Protected by token authentication, payload validation, and rate limiting.
curl -X POST https://your-backend/api/admin/ingest \
-H "x-admin-token: your_secret" \
-H "Content-Type: application/json" \
-d @courses.json
GET /api/healthReturns server status. Used for external monitoring.
# Backend integration tests
cd server && npm test
# Frontend UI tests
cd client && npm test
Tests cover API status codes, AI response logic, session initialization, component rendering, and accessibility roles.
| Layer | Platform | Notes |
|---|---|---|
| Frontend | Vercel | Static deploy, zero config |
| Backend | Coolify + DigitalOcean | Docker-based, persistent volume for sessions.json |
The backend requires a persistent filesystem for session stability. See DEPLOYMENT.md for full configuration details.
The platform is domain-agnostic. To deploy it for a different knowledge base:
courses.json with your own catalogserver/src/prompts/ to reflect the new domainnode scripts/seed.js to rebuild the vector storeThe RAG pipeline, session management, and API layer require no changes.
Simone Camerano — AI workflow engineer and full stack developer.
© 2026 IncluDO Project