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