Skip to content

Project Overview ​

What is Yappa Knowledge Hub? ​

Yappa Knowledge Hub (internally "YapHub") is an AI-powered internal knowledge management tool designed for the team at Yappa. It solves the problem of scattered information across Slack messages, emails, notes, and deal updates by providing a centralised system for capturing, processing, and distributing knowledge.

Internship Context ​

DetailValue
InstitutionUCLL University of Applied Sciences
ProgrammeProfessional Bachelor
Duration~13 weeks (3 months)
CompanyYappa
ProjectInternal Knowledge Hub (Kennisverzameltool)
Current StatusMVP Complete

MVP Complete

The system is fully functional with knowledge capture, AI-powered summaries, digest generation and distribution, category subscriptions, and bidirectional Notion sync — all accessible through Slack.

Problem Statement ​

Internal knowledge at Yappa is currently scattered across Slack messages, forwarded emails, notes, deal updates, announcements, and external content. Information shared "in the moment" becomes hard to:

  • Find later — no central search across knowledge sources
  • Contextualise — different teams need different perspectives on the same information
  • Convert into updates — weekly overviews and digests require manual effort
  • Keep curated — no moderation or quality control mechanism

Vision ​

Build a central system that makes internal knowledge:

  1. Easy to capture — low-friction submission directly from Slack
  2. Smartly processed — AI summaries in Dutch for quick context
  3. Actively distributed — periodic digests by thematic list delivered via Slack DM

Core Concepts ​

Category (Thematische Lijst) ​

A curated stream of knowledge items for a specific topic. Each category has a name, description, emoji icon, target groups, and digest schedule configuration (frequency, day, time).

Knowledge ​

A single knowledge item submitted by a user — text, URL, or Slack message. Each item carries metadata, tags, status, and an AI-generated highlight summary.

Target Group ​

Audience labels (e.g., Developers, Marketers, CEO) stored as JSON arrays on categories and knowledge items. Synced from Notion's multi-select properties. Currently metadata — not used for filtering or routing.

Digest ​

A generated report per category, containing all knowledge items for a time period with AI summaries, formatted as Dutch Markdown and delivered to subscribers via Slack DM.

What Was Delivered ​

Technical Stack ​

LayerTechnologyPurpose
BackendPHP 8.2 + Symfony 7.3API, business logic, orchestration
DatabaseSQLiteLocal data storage (Doctrine ORM)
AIOpenAI / OpenRouterAI-powered Dutch summaries
PlatformSlack (Bolt SDK)Primary user interface
SyncNotion APISecondary storage and collaboration
DocsVitePress + MermaidDocumentation site

Entities (5) ​

EntityPurpose
CategoryThematic lists with digest settings and target groups
KnowledgeKnowledge items with AI highlights, tags, Notion sync
DigestGenerated digest reports with statistics and content
DigestDeliveryPer-user delivery tracking with retry support
SubscriptionUser category subscriptions with soft-delete

API Routes (18) ​

DomainEndpoints
CategoriesPOST/GET /api/categories, GET/PUT /api/categories/{id}/settings/digest
KnowledgePOST/GET /api/knowledge
DigestsPOST generate, POST distribute, GET delivery-status, POST retry-failed, GET by category
Notion SyncPOST from-notion, POST categories-from-notion, POST to-notion
SubscriptionsPOST subscribe, POST unsubscribe, GET user subscriptions, GET category subscribers

Services (38 files across 12 directories) ​

DomainServices
OrchestratorDigestOrchestrator, KnowledgeOrchestrator
Digest10 services: generation, formatting, creation, persistence, distribution, delivery tracking, scheduling, highlight generation, date parsing, query
KnowledgeCreation, persistence, query services
SubscriptionFacade + query/persistence split
Notion11 services: sync, repositories, page builder, property extractor, markdown content
AIProvider interface + OpenAI/OpenRouter implementation
ContentContent extraction + HTML parser
TransportMessage transport interface + Slack implementation

What Was Not Built ​

The following were considered during planning but not implemented:

  • Per-role AI summaries — The system generates one summary per item, not multiple for different audiences
  • Prompt template management — Uses a hardcoded prompt constant
  • Knowledge edit/delete UI — Only create and list operations have Slack UI
  • Advanced search — Only basic keyword search
  • PDF/RSS/YouTube processing — Only HTML content extraction
  • Redis, Symfony Messenger — The system is synchronous with SQLite
  • User authentication — Simple bearer token auth (ROLE_ADMIN)

Stakeholders ​

DecisionChoiceRationale
Primary channelSlackWhere the team already works
AI strategyProvider-agnosticFlexibility to switch between OpenAI and OpenRouter
Ingestion UXMessage Shortcut + ModalLowest friction, no commands to memorise
MVP scopeCapture + AI highlights + DigestsHighest value, lowest complexity