Skip to content

Yappa Knowledge Hub - Project Structure

Last Updated: 2026-02-15


Directory Structure

yappa-knowledge-hub/
|-- .env                          # Environment variables (Slack bot)
|-- .env.example                   # Environment template
|-- .gitignore                    # Git ignore rules
|-- slack-app-manifest.yaml       # Slack app configuration
|-- package.json                  # Node.js dependencies
|-- package-lock.json             # Node.js lock file
|
|-- README.md                     # Main documentation (quick start)
|-- ARCHITECTURE.md               # System architecture & database schema
|-- STATUS.md                     # Current project status
|-- CHANGELOG.md                  # Changelog of fixes/changes
|-- TESTING.md                    # Testing guide
|-- NOTION_INTEGRATION.md         # Notion API setup & configuration
|-- POC_COMPLETE_SUMMARY.md       # POC completion summary
|-- poc-guide.md                  # Complete POC documentation
|
|-- docs/                         # Documentation & internship reports
|   |-- index.md                 # Documentation navigation
|   |-- setup.md                 # Setup instructions
|   |-- slack-app-setup.md        # Slack configuration guide
|   |-- testing.md               # Testing scenarios
|   |-- weekly/                  # Weekly internship reports
|   |   |-- week-01.md
|   |   |-- week-02.md
|   |   |-- ...
|   |-- report/                  # Internship final report
|       |-- index.md
|   |-- Project/                 # Project planning docs
|       |-- PRD.md
|       |-- overview.md
|       |-- backlog.md
|       |-- roadmap.md
|   |-- archive/                 # Archived documentation
|
|-- src/                          # Slack Bot (TypeScript)
|   |-- app.ts                   # Main entry point
|   |-- types/                   # TypeScript type definitions
|   |   |-- index.ts             # Core types and interfaces
|   |-- config/                  # Configuration management
|   |   |-- index.ts             # App configuration
|   |-- utils/                   # Utility functions
|   |   |-- logger.ts            # Logging utility
|   |   |-- helpers.ts           # Common helpers
|   |-- handlers/                # Slack event handlers
|   |   |-- commands.ts          # Slash command handlers
|   |   |-- events.ts            # Event handlers (URL/file detection)
|   |   |-- actions.ts           # Button and menu actions
|   |   |-- submissions.ts       # Modal form submissions
|   |   |-- shortcuts.ts         # Message & global shortcuts
|   |   |-- home.ts              # App Home tab handler
|   |   |-- reactions.ts         # Emoji reaction handlers
|   |   |-- searchModal.ts       # Search modal handler
|   |   |-- dashboard.ts         # Dashboard rendering
|   |   |-- items.ts             # Knowledge item operations
|   |   |-- lists.ts             # Category/list management
|   |   |-- saveModals.ts        # Save modal handlers
|   |   |-- helpers.ts           # Handler utilities
|   |   |-- index.ts             # Barrel exports
|   |-- services/                # Business logic
|   |   |-- knowledge.ts         # Knowledge CRUD operations
|   |   |-- categories.ts        # Category management
|   |   |-- targetGroups.ts      # Target group definitions
|   |   |-- knowledgeHelpers.ts  # Helper functions
|   |   |-- digestFormatter.ts   # Digest formatting
|   |   |-- digest.ts            # Digest generation
|   |   |-- aiSummary.ts         # AI summary generation
|   |   |-- urlScraper.ts        # URL metadata scraping
|   |   |-- homeRefresh.ts       # App Home refresh
|   |   |-- viewTracker.ts       # Modal view tracking
|   |-- api/                     # Express API routes
|   |   |-- slack.ts             # Slack API endpoints
|   |-- i18n/                    # Internationalization
|       |-- nl.ts                # Dutch (Nederlands) translations
|
|-- dist/                        # Compiled JavaScript output (from TypeScript)
|
|-- backend/                      # Symfony API (PHP 8.x)
|   |-- composer.json             # PHP dependencies
|   |-- .env                     # Backend environment variables
|   |-- public/                  # Web root
|   |-- src/
|   |   |-- Controller/           # REST API endpoints
|   |   |   |-- KnowledgeController.php
|   |   |   |-- CategoryController.php
|   |   |-- Service/
|   |   |   |-- Notion/         # Notion API integration
|   |   |   |   |-- NotionClient.php
|   |   |   |   |-- NotionKnowledgeService.php
|   |   |   |   |-- NotionCategoryService.php
|   |   |   |   |-- NotionDatabaseService.php
|   |   |   |   |-- NotionSyncService.php
|   |   |   |   |-- NotionPropertyMapper.php
|   |   |   |   |-- NotionException.php
|   |   |-- Knowledge/             # Knowledge entities (optional)
|   |-- config/                  # Symfony configuration
|   |-- var/                     # Runtime files (logs, cache)
|
|-- tests/                        # Jest tests (Node.js)
|   |-- unit/                    # Unit tests
|   |-- integration/             # Integration tests
|   |-- api/                     # API endpoint tests
|   |-- e2e/                    # End-to-end tests
|   |-- fixtures/                # Test data
|
|-- scripts/                      # Utility scripts
|   |-- check-services.sh        # Service status checker
|   |-- load-demo-data.sh        # Demo data loader
|   |-- setup-tests.sh           # Test environment setup
|   |-- start-bot.sh             # Bot startup script
|   |-- cleanup-project.sh       # Project cleanup script
|
|-- logs/                         # Application logs

File Purposes

Root Documentation Files

FilePurpose
README.mdQuick start guide and overview
ARCHITECTURE.mdSystem architecture, database schema, API endpoints
STATUS.mdCurrent project status, features, next steps
CHANGELOG.mdAll fixes and implementations during POC
TESTING.mdManual and automated testing guide
NOTION_INTEGRATION.mdNotion API configuration and bug fixes
poc-guide.mdComplete POC documentation
slack-app-manifest.yamlSlack app configuration for installation

Slack Bot (src/) - TypeScript

FilePurpose
app.tsMain entry point, initializes Slack app
types/index.tsCore TypeScript type definitions
config/index.tsConfiguration management
utils/logger.tsLogging utility
utils/helpers.tsCommon utility functions
handlers/commands.ts/knowledge slash command handler
handlers/events.tsMessage events, URL/file detection
handlers/actions.tsButton and menu action handlers
handlers/submissions.tsModal form submissions
handlers/shortcuts.tsMessage shortcuts, global shortcuts
handlers/home.tsApp Home tab display
handlers/reactions.tsEmoji reaction handlers
handlers/searchModal.tsSearch modal display
handlers/dashboard.tsDashboard rendering and pagination
handlers/items.tsKnowledge item CRUD operations
handlers/lists.tsCategory/list management
handlers/saveModals.tsSave modal handlers
handlers/helpers.tsHandler utility functions
handlers/index.tsBarrel exports for handlers
services/knowledge.tsKnowledge CRUD operations
services/categories.tsCategory management
services/targetGroups.tsTarget group definitions
services/knowledgeHelpers.tsHelper functions
services/digestFormatter.tsDigest formatting logic
services/digest.tsDigest generation logic
services/aiSummary.tsAI summary generation
services/urlScraper.tsURL metadata scraping
services/homeRefresh.tsApp Home refresh service
services/viewTracker.tsModal view tracking
api/slack.tsExpress API routes
i18n/nl.tsDutch (NL) translations

Backend (backend/)

FilePurpose
composer.jsonPHP dependencies
src/Controller/KnowledgeController.phpKnowledge API endpoints
src/Controller/CategoryController.phpCategory API endpoints
src/Service/Notion/NotionClient.phpHTTP client for Notion API
src/Service/Notion/NotionKnowledgeService.phpKnowledge CRUD in Notion
src/Service/Notion/NotionCategoryService.phpCategory CRUD in Notion
src/Service/Notion/NotionDatabaseService.phpDatabase service abstraction
src/Service/Notion/NotionSyncService.phpSync operations
src/Service/Notion/NotionPropertyMapper.phpNotion <-> PHP mapping
src/Service/Notion/NotionException.phpCustom exception class

Scripts (scripts/)

ScriptPurpose
check-services.shCheck if services are running
load-demo-data.shLoad demo knowledge data
setup-tests.shSet up test environment
start-bot.shStart the Slack bot
cleanup-project.shClean up test files

Import Path Guidelines

Node.js (Slack Bot)

From handlers:

javascript
// Services
import { listKnowledge } from '../services/knowledge.js';
import { listCategories } from '../services/categories.js';
import { getTargetGroupOptions } from '../services/targetGroups.js';
import { formatDigest } from '../services/digestFormatter.js';

// i18n
import nl from '../i18n/nl.js';

// Other handlers
import { handleAppHomeOpened } from './home.js';

From app.js:

javascript
// Handlers
import { handleKnowledgeCommand } from './handlers/commands.js';
import { handleMessageEvent } from './handlers/events.js';
import { handleViewSubmission } from './handlers/interactions.js';
import { handleSaveMessageShortcut } from './handlers/shortcuts.js';
import { handleAppHomeOpened } from './handlers/home.js';

PHP (Symfony)

From Controllers:

php
use App\Service\Notion\NotionClient;
use App\Service\Notion\NotionKnowledgeService;
use App\Service\Notion\NotionCategoryService;

From Services:

php
use App\Service\Notion\NotionClient;
use App\Service\Notion\NotionException;
use Psr\Log\LoggerInterface;

Environment Configuration

Slack Bot (.env)

bash
SLACK_BOT_TOKEN=xoxb-...
SLACK_SIGNING_SECRET=...
SLACK_APP_TOKEN=xapp-...
API_BASE_URL=http://localhost:8000
PORT=3000

Backend (backend/.env)

bash
NOTION_API_KEY=ntn_...
NOTION_VERSION=2022-06-28
NOTION_DATABASE_KNOWLEDGE=306e292a15d58004a8cbc222dcd48bb2
NOTION_DATABASE_CATEGORIES=306e292a15d5805dae13e64bed8519c5
NOTION_DATABASE_DIGESTS=306e292a15d580d7a0f6fe8421baff10

Running the Application

Start Slack Bot

bash
cd /home/ubuntu/yappa-knowledge-hub
npm start
# Bot runs on port 3000 (Socket Mode)

Start Backend API

bash
cd /home/ubuntu/yappa-knowledge-hub/backend
php -S localhost:8000 -t public
# API runs on port 8000

Check Services

bash
./scripts/check-services.sh