A localized AI-powered internal operations portal for mining incident triage and grounded technical document Q&A using an offline, zero-cost architecture.
# Minetech Assessment — Self-Hosted LLM: Intake Triage + Knowledge Assistant
A full-stack app that serves an open-source LLM via **self-hosted Ollama** (no external APIs) and builds two features on top of it — no OpenAI/Anthropic/Gemini, no money spent. Designed for **MineTech Rwanda**, an AI-native ERP and deep-tech intelligence platform for African mining operations.
1. **Smart Intake Triage** — turn free-text field messages into validated, structured JSON (category, priority, extracted operational fields, drafted reply) shown in a filterable dashboard. Malformed model output is handled gracefully.
2. **Knowledge Assistant** — answer questions with a self-hosted open-source LLM. Retrieves relevant context from a MySQL-backed knowledge base and grounds the answer with citations. Clearly indicates when the answer is not in the knowledge base.
> **Stack:** Node + Express · React + Tailwind (Vite) · MySQL · **Ollama (self-hosted)**
>
> **Generation Model:** Llama 3.2 3B (via Ollama) — runs completely free on local hardware
>
> **Embedding Model:** nomic-embed-text (768-dim) — dedicated embedding model for RAG
---
## 1. Prerequisites
- **Node.js 20+** and **npm**
- **MySQL** (local or remote). The app creates tables automatically on boot.
- **Ollama** installed and running (
ollama.com)
- Pull the models:
```bash
ollama pull llama3.2:3b
ollama pull nomic-embed-text
```
- Verify they're running: `ollama list` should show both models
---
## 2. Install
```bash
# backend
cd backend
npm install
# frontend
cd ../frontend
npm install
```
---
## 3. Configure
```bash
cp backend/.env.example backend/.env
```
Edit `backend/.env` and set your MySQL credentials. Key settings:
```ini
# Server
PORT=4000
# MySQL (update with your credentials)
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=1234
MYSQL_DATABASE=minetech
# LLM Mode - ONLY OLLAMA (self-hosted, no external APIs)
LLM_MODE=ollama
# Ollama Settings
OLLAMA_ENDPOINT=
l …