How tithean/straight-convertor works
Straight is a temporary, request/response document converter: users select a supported format, upload one file, and download the converted result. The browser fetches backend capabilities, validates the selection, tracks upload/conversion state, and presents the download. The API validates and stages the upload, dispatches an isolated conversion worker, then removes its temporary workspace after delivery. Documented conversion engines include LibreOffice for Office-to-PDF and PDFium plus python-pptx for PDF-to-PPTX. Edges reflect shown source references or README documentation; engine wiring beyond those statements is not inferred.
Main entry points: App.tsx Page flow · conversion_service.py Conversion service · conversions.py Conversion routes · registry.py Conversion registry
Components 21
Browser interface
- Page flow
frontend/src/app/App.tsx - Selection utilities
frontend/src/features/conversion/fileUtils.ts - File dropzone
frontend/src/features/conversion/components/FileDropzone.tsx - Format selector
frontend/src/features/conversion/components/FormatSelect.tsx - Conversion status
frontend/src/features/conversion/components/ConversionStatus.tsx - Conversion state
frontend/src/features/conversion/useConversion.ts - HTTP client
frontend/src/features/conversion/api.ts
HTTP API
- Conversion routes
backend/app/api/routes/conversions.py - App setup
backend/app/main.py
Conversion runtime
- Conversion service
backend/app/services/conversion_service.py - Conversion registry
backend/app/converters/registry.py - Worker process
backend/app/converters/worker.py
Limits and lifecycle
- Runtime settings
backend/app/core/config.py - Request body limit
backend/app/utils/limited_body.py - File validation
backend/app/utils/file_validation.py - Temporary workspaces
backend/app/utils/temporary_files.py
Conversion engines
- Office converter
backend/app/converters/office_to_pdf.py - PDF to slides
backend/app/converters/pdf_to_pptx.py
Other components
- User
- LibreOffice
- PDFium + python-pptx
Connections 25
- User → Page flow: selects file
README.md - Page flow → Selection utilities: validates selection
frontend/src/app/App.tsx - Page flow → File dropzone: renders
frontend/src/app/App.tsx - Page flow → Format selector: renders
frontend/src/app/App.tsx - Page flow → Conversion status: renders
frontend/src/app/App.tsx - Page flow → Conversion state: starts conversion
frontend/src/app/App.tsx - Conversion state → HTTP client: sends request
frontend/src/features/conversion/useConversion.ts - HTTP client → Conversion routes: calls API
README.md - User → Conversion status: downloads result
README.md - App setup → Conversion routes: registers routes
backend/app/main.py - App setup → Request body limit: installs middleware
backend/app/main.py - App setup → Runtime settings: loads settings
backend/app/main.py - App setup → Temporary workspaces: cleans stale files
backend/app/main.py - Conversion routes → Conversion service: invokes conversion
backend/app/api/routes/conversions.py - Conversion routes → Conversion registry: lists formats
backend/app/api/routes/conversions.py - Conversion routes → Temporary workspaces: cleans after delivery
backend/app/api/routes/conversions.py - Conversion service → Conversion registry: finds conversion
backend/app/services/conversion_service.py - Conversion service → File validation: validates upload
backend/app/services/conversion_service.py - Conversion service → Temporary workspaces: stages and removes files
backend/app/services/conversion_service.py - Conversion service → Worker process: starts subprocess
backend/app/services/conversion_service.py - Conversion registry → Office converter: selects converter
backend/app/converters/registry.py - Conversion registry → PDF to slides: selects converter
backend/app/converters/registry.py - Worker process → Conversion registry: dispatches conversion
backend/app/converters/worker.py - Office converter → LibreOffice: converts Office files
README.md - PDF to slides → PDFium + python-pptx: renders and builds slides
README.md