put a context/background folder per deck #13

Closed
opened 2026-04-01 19:15:10 +00:00 by despiegk · 4 comments
Owner

image

at left side

is the background folder only

let users

  • upload (drag drop, folders & files)
  • move content
  • create/delete dirs

accept pdf and .md only

this will manage the context as used for creating slides

![image](/attachments/c72ee858-be0a-40e9-9369-d7a3c3dea6d8) at left side is the background folder only let users - upload (drag drop, folders & files) - move content - create/delete dirs accept pdf and .md only this will manage the context as used for creating slides
2.7 MiB
Author
Owner

Implementation Spec for Issue #13: Per-Deck Background/Context Folder Panel

Objective

Add a left-side panel to the Slides tab that lets users browse, upload, and manage background/context files (.md and .pdf) organized in per-deck subfolders under <deck_path>/content/background/. These files provide contextual information for AI slide generation.

Current State

The system already has:

  • A content/background/<subfolder>/*.md file structure
  • find_background_folders() and read_background_content() in discovery module
  • deck.listBackground and deck.readBackground RPC methods
  • A checkbox-based background folder selector in the "Create Slide" modal

What is missing:

  • No file upload support (no multipart endpoints)
  • No .pdf file handling in background content (only .md)
  • No folder creation/deletion RPC methods
  • No file delete/move operations
  • No dedicated UI panel (background only in Create Slide modal)

Requirements

  • Collapsible left-side panel on Slides tab showing background folders/files
  • Tree-view of content/background/ with folders and files
  • File upload via drag-and-drop and file picker (files and folders)
  • Restrict uploads to .md and .pdf only
  • Create and delete directories
  • Delete individual files
  • Move files between folders (drag-and-drop)
  • PDF text extraction for AI context
  • OpenRPC spec updated with all new methods

Implementation Plan (5 Steps)

Step 1: Extend hero_slides_lib — Add BackgroundFile struct, PDF text extraction, folder CRUD functions, file save/read/delete/move operations

Step 2: Add RPC handlers — New bg.* methods: listFiles, createFolder, deleteFolder, deleteFile, moveFile, uploadFile, readFile

Step 3: Background panel UI (HTML + CSS) — Left-side collapsible panel with tree view, drop zone, action buttons

Step 4: Background panel JavaScript — Tree rendering, folder CRUD, file upload (drag-drop + picker), file preview, file move

Step 5: OpenRPC spec & tests — Update spec, add unit tests for library functions

Acceptance Criteria

  • Background panel on left side of Slides tab
  • Tree view of folders and files
  • Create/delete folders
  • Upload .md and .pdf files (picker + drag-and-drop)
  • Reject non .md/.pdf files
  • Delete individual files
  • Move files between folders
  • PDF text included in AI context
  • Panel collapsible
  • All RPC methods in openrpc.json
  • Tests pass, project compiles
## Implementation Spec for Issue #13: Per-Deck Background/Context Folder Panel ### Objective Add a left-side panel to the Slides tab that lets users browse, upload, and manage background/context files (`.md` and `.pdf`) organized in per-deck subfolders under `<deck_path>/content/background/`. These files provide contextual information for AI slide generation. ### Current State The system already has: - A `content/background/<subfolder>/*.md` file structure - `find_background_folders()` and `read_background_content()` in discovery module - `deck.listBackground` and `deck.readBackground` RPC methods - A checkbox-based background folder selector in the "Create Slide" modal What is missing: - No file upload support (no multipart endpoints) - No `.pdf` file handling in background content (only `.md`) - No folder creation/deletion RPC methods - No file delete/move operations - No dedicated UI panel (background only in Create Slide modal) ### Requirements - Collapsible left-side panel on Slides tab showing background folders/files - Tree-view of `content/background/` with folders and files - File upload via drag-and-drop and file picker (files and folders) - Restrict uploads to `.md` and `.pdf` only - Create and delete directories - Delete individual files - Move files between folders (drag-and-drop) - PDF text extraction for AI context - OpenRPC spec updated with all new methods ### Implementation Plan (5 Steps) **Step 1: Extend hero_slides_lib** — Add `BackgroundFile` struct, PDF text extraction, folder CRUD functions, file save/read/delete/move operations **Step 2: Add RPC handlers** — New `bg.*` methods: `listFiles`, `createFolder`, `deleteFolder`, `deleteFile`, `moveFile`, `uploadFile`, `readFile` **Step 3: Background panel UI (HTML + CSS)** — Left-side collapsible panel with tree view, drop zone, action buttons **Step 4: Background panel JavaScript** — Tree rendering, folder CRUD, file upload (drag-drop + picker), file preview, file move **Step 5: OpenRPC spec & tests** — Update spec, add unit tests for library functions ### Acceptance Criteria - [ ] Background panel on left side of Slides tab - [ ] Tree view of folders and files - [ ] Create/delete folders - [ ] Upload `.md` and `.pdf` files (picker + drag-and-drop) - [ ] Reject non `.md`/`.pdf` files - [ ] Delete individual files - [ ] Move files between folders - [ ] PDF text included in AI context - [ ] Panel collapsible - [ ] All RPC methods in openrpc.json - [ ] Tests pass, project compiles
Author
Owner

Test Results

  • Total: 44 (42 unit + 2 doc-tests)
  • Passed: 44
  • Failed: 0

Project compiles cleanly. All existing tests pass after changes.

## Test Results - **Total**: 44 (42 unit + 2 doc-tests) - **Passed**: 44 - **Failed**: 0 Project compiles cleanly. All existing tests pass after changes.
Author
Owner

Implementation Summary

Files Modified

Library (hero_slides_lib)

  • src/types.rs — Added BackgroundFile struct
  • src/discovery.rs — Extended to count/read .pdf files; added find_background_files() function; PDF text extraction via pdf-extract
  • src/deck.rs — Added 7 new functions: deck_list_background_files, deck_create_background_folder, deck_delete_background_folder, deck_delete_background_file, deck_move_background_file, deck_save_background_file, deck_read_background_file
  • src/lib.rs — Re-exported all new types and functions
  • Cargo.toml — Added pdf-extract = "0.8" dependency

Server (hero_slides_server)

  • src/rpc.rs — Added 8 new JSON-RPC methods: bg.listFolders, bg.listFiles, bg.createFolder, bg.deleteFolder, bg.deleteFile, bg.moveFile, bg.uploadFile (base64), bg.readFile

UI (hero_slides_ui)

  • templates/index.html — Added left-side background panel with two-column layout in Slides tab
  • static/css/dashboard.css — Added all panel styles (tree view, drop zones, file rows, folder rows)
  • static/js/dashboard.js — Added full panel logic: folder CRUD, file upload (picker + drag-and-drop), file preview, file move between folders, panel collapse/expand

Test Results

  • 44/44 tests passed (42 unit + 2 doc-tests)
  • Project compiles cleanly

Notes

  • File upload uses base64 encoding within JSON-RPC (no multipart needed)
  • PDF text extraction gracefully falls back if extraction fails
  • Only .md and .pdf files accepted (validated server-side)
  • Panel auto-shows when a deck with background content is selected
## Implementation Summary ### Files Modified **Library (`hero_slides_lib`)** - `src/types.rs` — Added `BackgroundFile` struct - `src/discovery.rs` — Extended to count/read `.pdf` files; added `find_background_files()` function; PDF text extraction via `pdf-extract` - `src/deck.rs` — Added 7 new functions: `deck_list_background_files`, `deck_create_background_folder`, `deck_delete_background_folder`, `deck_delete_background_file`, `deck_move_background_file`, `deck_save_background_file`, `deck_read_background_file` - `src/lib.rs` — Re-exported all new types and functions - `Cargo.toml` — Added `pdf-extract = "0.8"` dependency **Server (`hero_slides_server`)** - `src/rpc.rs` — Added 8 new JSON-RPC methods: `bg.listFolders`, `bg.listFiles`, `bg.createFolder`, `bg.deleteFolder`, `bg.deleteFile`, `bg.moveFile`, `bg.uploadFile` (base64), `bg.readFile` **UI (`hero_slides_ui`)** - `templates/index.html` — Added left-side background panel with two-column layout in Slides tab - `static/css/dashboard.css` — Added all panel styles (tree view, drop zones, file rows, folder rows) - `static/js/dashboard.js` — Added full panel logic: folder CRUD, file upload (picker + drag-and-drop), file preview, file move between folders, panel collapse/expand ### Test Results - 44/44 tests passed (42 unit + 2 doc-tests) - Project compiles cleanly ### Notes - File upload uses base64 encoding within JSON-RPC (no multipart needed) - PDF text extraction gracefully falls back if extraction fails - Only `.md` and `.pdf` files accepted (validated server-side) - Panel auto-shows when a deck with background content is selected
Author
Owner

Implementation committed: e7ee4d5

Browse: e7ee4d5

Implementation committed: `e7ee4d5` Browse: https://forge.ourworld.tf/lhumina_code/hero_slides/commit/e7ee4d5
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_slides#13
No description provided.