chore: archive v1.0 milestone
Archived: - milestones/v1.0-ROADMAP.md (full phase details) Updated: - MILESTONES.md (new entry for v1.0) - PROJECT.md (requirements → Validated, Current State added) - ROADMAP.md (collapsed to one-line with archive link) - STATE.md (reset for next milestone) v1.0 Docker Control via Telegram shipped: - 5 phases, 12 plans, 5 days - Telegram bot with keyword commands - Docker socket integration via n8n Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
+36
-36
@@ -6,66 +6,66 @@ A Telegram bot that lets you manage Docker containers on your Unraid server. Con
|
||||
|
||||
## Core Value
|
||||
|
||||
When you get a container update notification or notice a service is down, you can immediately investigate and act from your phone through a natural conversation.
|
||||
When you get a container update notification or notice a service is down, you can immediately investigate and act from your phone.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Validated
|
||||
|
||||
(None yet — ship to validate)
|
||||
- [x] Send a message to the bot and receive a response — v1.0
|
||||
- [x] Check container status ("status") — v1.0
|
||||
- [x] Start a container by name — v1.0
|
||||
- [x] Stop a container by name — v1.0
|
||||
- [x] Restart a container by name — v1.0
|
||||
- [x] Update a container (pull new image, recreate) — v1.0
|
||||
- [x] View container logs with configurable line count — v1.0
|
||||
- [x] Bot only responds to your Telegram user ID — v1.0
|
||||
|
||||
### Active
|
||||
|
||||
- [ ] Send a message to the bot and receive a response
|
||||
- [ ] Ask about container status ("how's Plex doing?")
|
||||
- [ ] Start a container by name
|
||||
- [ ] Stop a container by name
|
||||
- [ ] Restart a container by name
|
||||
- [ ] Update a container (pull new image, recreate)
|
||||
- [ ] View container logs with configurable line count (default 50)
|
||||
- [ ] Bot only responds to your Telegram user ID
|
||||
(None — v1.0 complete, define new requirements for v1.1)
|
||||
|
||||
### Out of Scope
|
||||
|
||||
- Taking over Unraid notifications — keep existing notification system, this bot is for control
|
||||
- Deploying new containers — manage existing only, not create new ones
|
||||
- Natural language understanding — simple keyword matching sufficient for v1, Claude API adds complexity
|
||||
- Proactive monitoring/notifications — bot is reactive (you ask, it answers) for v1
|
||||
- Natural language understanding — simple keyword matching sufficient, Claude API adds complexity
|
||||
- Proactive monitoring/notifications — bot is reactive (you ask, it answers)
|
||||
- Resource queries — "what's using the most memory?" deferred to future version
|
||||
|
||||
## Current State
|
||||
|
||||
**Shipped:** v1.0 (2026-02-02)
|
||||
**Tech stack:** n8n workflow + Telegram Bot API + Docker socket
|
||||
**Files:** n8n-workflow.json (~3,200 lines), README.md
|
||||
|
||||
## Context
|
||||
|
||||
**Environment:**
|
||||
- Unraid server with Intel N100 CPU, 32GB RAM
|
||||
- n8n already running and mostly unused — will use as orchestration layer
|
||||
- Multiple Docker containers running various services (Plex, Sonarr, etc.)
|
||||
- n8n container with Docker socket access
|
||||
- Multiple Docker containers (Plex, Sonarr, lldap, etc.)
|
||||
|
||||
**Current workflow:**
|
||||
- Unraid sends notifications when container updates are available
|
||||
- Currently need laptop/desktop to act on updates or troubleshoot
|
||||
- Want to be able to respond immediately from phone
|
||||
|
||||
**User scenarios:**
|
||||
1. Get update notification → open Telegram → "update plex" → done
|
||||
2. Notice service not responding → "check sonarr logs" → see errors → "restart sonarr"
|
||||
3. Curious about system → "what containers are running?" or "what's using the most resources?"
|
||||
|
||||
## Constraints
|
||||
|
||||
- **Platform**: Must run on Unraid (Docker-based deployment)
|
||||
- **Orchestration**: Use n8n for workflow orchestration (already running)
|
||||
- **Matching**: Keyword/substring matching for container names
|
||||
- **Auth**: Single user only — verify Telegram user ID
|
||||
- **Logs**: Support configurable line count, default to 50 lines
|
||||
**Constraints:**
|
||||
- Platform: Unraid (Docker-based)
|
||||
- Orchestration: n8n (already running)
|
||||
- Matching: Keyword/substring with exact-match priority
|
||||
- Auth: Single user via Telegram ID
|
||||
- Logs: Configurable line count, default 50, max 1000
|
||||
|
||||
## Key Decisions
|
||||
|
||||
| Decision | Rationale | Outcome |
|
||||
|----------|-----------|---------|
|
||||
| Use keyword matching over NLU | Simple substring matching works well, Claude API adds complexity for v1 | ✓ Good |
|
||||
| Use n8n for orchestration | Already running, handles Telegram webhooks, reduces new infrastructure | — Pending |
|
||||
| Manage existing containers only | Keeps scope focused, deployment is complex and rarely needed from mobile | — Pending |
|
||||
| Single user auth via Telegram ID | Simple security model, only one person needs access | — Pending |
|
||||
| Use keyword matching over NLU | Simple substring matching works well, Claude API adds complexity | ✓ Good |
|
||||
| Use n8n for orchestration | Already running, handles Telegram webhooks | ✓ Good |
|
||||
| Manage existing containers only | Keeps scope focused, deployment rarely needed from mobile | ✓ Good |
|
||||
| Single user auth via Telegram ID | Simple security, only one person needs access | ✓ Good |
|
||||
| Static curl binary mount | Hardened n8n image lacks package manager | ✓ Good |
|
||||
| Exact match priority | Prevents substring collisions (plex vs jellyplex) | ✓ Good |
|
||||
| Default to :latest tag | Prevents Docker API from pulling all tags | ✓ Good |
|
||||
| HTML escape logs | Log content may contain <tag> text | ✓ Good |
|
||||
| Text menu over keyboard | Native Telegram node replyKeyboard had issues | ✓ Good |
|
||||
|
||||
---
|
||||
*Last updated: 2026-01-31 after removing NLU from v1.0 scope*
|
||||
*Last updated: 2026-02-02 after v1.0 milestone*
|
||||
|
||||
Reference in New Issue
Block a user