# webapp_124
Minimal **FastAPI**-based PDF print-cost calculator with optional ink-coverage adjustment.
This project is part of **Studio EinsZwoVier**, a collaborative environment.
Everyone is invited to contribute improvements. See the [source code](https://forgejo.petau.net/aron/124-webapp).
---
## Features
- **Landing Page**: Overview of all available tools and links.
- **Cost Calculator**: Calculate print and material costs for posters and large-format prints.
- **Docmost / Wissenssammlung**: Shared knowledge library for manuals and documentation.
- **Local Chatbot**: Access your own Large Language Models via Open WebUI and Ollama.
- **Matrix Server**: Collects print jobs and payments.
- **Administration**: Manage the Docker stack via Portainer.
- **Automatic Updates**: Watchtower updates all containers every 24 hours and cleans up old images.
---
## Getting Started
### Prerequisites
- Docker & Docker Compose installed
- Optional: local network access to `einszwovier.local` for local services
if the server is moved, replace with new host
---
### Run the Stack
```bash
docker-compose up --build -d
graph TD
%% --- Subgraphs for clarity ---
subgraph WebApp ["Studio EinsZwoVier - Internal Web Pages"]
LP[Landing Page
studio-einszwovier.local]
About[About Page
/about]
CostCalc[Cost Calculator
/cost]
Mailto[Contact Email
mailto:einszwovier@gvb-gymnasium.de]
DocmostPage[Wissenssammlung
Docmost @ :3000]
ChatbotPage[Lokaler Chatbot
:8080]
end
subgraph MatrixServer ["Matrix Server"]
MatrixSrv[Matrix Server
Collects print jobs & payments]
end
subgraph DocmostServer ["Docmost Server"]
DocmostSrv[Docmost Server
Manages manuals & docs]
end
subgraph AdminPanel ["Administration"]
Portainer[Portainer Admin Panel
:9000]
end
%% --- Landing page links ---
LP --> About
LP --> CostCalc
LP --> Mailto
LP --> DocmostPage
LP --> ChatbotPage
LP --> Portainer
%% --- Cost Calculator workflow ---
CostCalc --> PDF[PDF Upload]
PDF --> Quote[Generate Quote]
Quote --> MatrixSrv
%% --- Docmost workflow ---
DocmostPage --> DocmostSrv
%% --- Chatbot workflow ---
ChatbotPage --> Ollama[Ollama AI Server
:11434]
ChatbotPage --> OpenWebUI[Open WebUI
:8080]
%% --- Optional styling for clarity ---
classDef internal fill:#e3f2fd,stroke:#90caf9,stroke-width:1px;
classDef external fill:#fff3e0,stroke:#ffb74d,stroke-width:1px;
class LP,About,CostCalc,Mailto,DocmostPage,ChatbotPage internal;
class MatrixSrv,DocmostSrv,Ollama,OpenWebUI,Portainer external;