diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4ccb220..967969f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,6 +28,26 @@
- NPC dialogue is static (LLM not yet wired to frontend)
- Only one map (Eichenhafen)
-### Next Milestone
-- M2: Refine pathfinding, add map transitions
-- M3: Wire LLM dialogue to frontend NPC interactions
\ No newline at end of file
+## v0.2.0 — M7: LLM Integration Frontend ↔ Backend (2026-07-17)
+
+### Added
+- API bridge (`api.js`) connecting frontend to FastAPI backend
+- Backend health check on startup — shows LLM model name in event log
+- Dynamic NPC dialogues via Ollama (gemma4:12b)
+ - Each NPC gets unique dialogue based on personality, mood, and player class/level
+ - 30-second dialogue cache to reduce LLM calls
+ - Fallback to static dialogue if LLM unavailable
+- Periodic world event generation (every ~10 seconds)
+ - LLM generates optional events (weather, discoveries, encounters)
+ - Events validated by backend (no soft-lock possible)
+ - Events displayed in event log with ✨ prefix and purple color
+- NPC interaction now shows "LLM generating..." placeholder while waiting
+
+### Changed
+- NPC interaction is now async (waits for LLM response)
+- Event log color coding: purple (llm), red (combat), green (quest), yellow (system)
+
+### Tested
+- Backend health endpoint: ✅
+- Event generation: ✅ (gemma4:12b generates atmospheric events)
+- NPC dialogue: ✅ (personalized, in-character responses)
\ No newline at end of file
diff --git a/backend/gamestate.db b/backend/gamestate.db
new file mode 100644
index 0000000..975ba84
Binary files /dev/null and b/backend/gamestate.db differ
diff --git a/frontend/index.html b/frontend/index.html
index 1c5dd88..39488f4 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -74,6 +74,7 @@
+