Deferred MVP Features
The Proof of Concept was strictly scoped to validate technical feasibility and the architectural pipeline (Input → Process → Output) within 40 files and ~3000 LOC.
This document tracks which features were deferred from the POC and their current implementation status in the full system.
Implementation Status
Implemented in MVP
These features were deferred from the POC but have since been fully implemented:
| Feature | POC Reason for Deferral | Implementation |
|---|---|---|
| Target Groups | Multi-tenant scoping not required to prove the core data loop | JSON arrays on Category and Knowledge entities, synced from Notion "Default Target Groups" multi-select |
| Notion Sync | Bidirectional sync requires robust retry logic and mapping services | Full bidirectional sync for Knowledge, Categories, Digests, and Subscriptions via NotionSyncService with 4 Notion repositories |
| Search Functionality | Optimization over basic list retrieval | App Home browse and category filtering |
| Digest Entity Persistence | POC returned DTO directly to Slack without database record | Full Digest entity with persistence, statistics, knowledge highlights snapshot, and ManyToMany knowledge links |
| Subscriptions | User opt-in/out adds unnecessary relational complexity | Subscription entity with subscribe/unsubscribe, soft-delete (deactivate/reactivate), unique constraint on (userId, categoryId) |
| Backend Distribution Layer | Generic delivery system too heavy for POC | SlackDigestDeliveryService + SlackMessageTransport with per-user delivery tracking in DigestDelivery entities |
| Scheduled Digest Automation | Cron-based scheduling excluded from POC | DigestSchedulerService with frequency-based scheduling (weekly/biweekly/monthly/quarterly), day/time configuration per category |
| AI Summary System | POC generated ephemeral summaries at digest time only | AI highlights stored in Knowledge.highlight field, lazy-generated during digest creation, KnowledgeHighlightGenerator with fallback |
Partially Implemented
| Feature | What's Implemented | What's Still Missing |
|---|---|---|
| AI Summaries | Single 2-3 sentence Dutch summary per knowledge item, generated during digest | Per-role/multi-audience summaries, summary editing UI, regeneration UI, history/versioning |
| Notion Sync | Bidirectional sync for all entity types | Webhook-based real-time sync (currently uses on-demand API calls) |
Not Yet Implemented
These features remain deferred:
| Feature | Description | Notes |
|---|---|---|
| Prompt Template Entities | Database-backed prompt management with versioning and UI | Currently uses a hardcoded constant (DigestConstants::HIGHLIGHT_SUMMARY_PROMPT) |
| Edit / Delete UI | UI for modifying or removing knowledge items and categories | Backend supports it, but no Slack UI for these operations |
| Advanced Search | Full-text search, filtering by tags/date/category, result ranking | Only basic keyword search exists |
| AI Content Cleaning | Service for cleaning extracted HTML before AI processing | Raw content is used directly |
| URL Validation Service | Comprehensive URL reachability checking with validation states | Basic URL validation exists in ContentExtractionService |
| PDF/RSS/YouTube Processing | Content extraction from non-HTML sources | Only HTML content extraction is implemented |
Architectural Impact of POC Decisions
By deferring these features, the POC codebase remained highly focused:
- Smaller Entities: Category and Knowledge lacked the complex relationships to Subscription, Digest, and DigestDelivery that the MVP added.
- Fewer Handlers: The Slack Bolt app only registered
app_home_opened, basic view submissions, and message shortcuts. - Ephemeral AI Summaries: Summaries were generated at digest-time and included in the DM, but not persisted in the database. The MVP stores them in
Knowledge.highlight. - Hardcoded Prompt: A single Dutch prompt template is embedded in
DigestConstants. The MVP continues using this approach — noPromptTemplateentity was created. - No LLM Dependency for Steps 1–2: Only Step 3 requires an OpenAI API key (or mock mode).
What IS Included from the AI Stack
The following AI components are part of the POC and carry directly into the MVP:
| POC Component | MVP Extension |
|---|---|
AiProviderInterface | Same contract — supports OpenAI and OpenRouter |
OpenAIService | Same implementation with OpenRouter support added |
AiResponseDto / AiOptionsDto / AiMetadataDto | Same DTOs — no changes |
KnowledgeHighlightGenerator (hardcoded prompt) | Still uses hardcoded prompt constant |
Mock mode ($mockMode = true) | Used in E2E tests and local development |