# Designing mergePDF: A Minimalist SOC-Style PDF Tool > By Johnathan Belcher — July 7, 2026 — 7 min read Some projects start as quick convenience scripts and quietly grow into something bigger. mergePDF started that way: a small Python utility to stitch together PDFs for school, work, and the occasional bureaucratic mess. Over time it became clear that tools only matter if people can actually use them, so I gave the CLI tool a proper interface that stayed clean, minimal, and accessible without losing the hacker aesthetic I like building around. ## Starting Point: A Simple PDF Merge Engine The original script kept things small: validate input files, load each PDF, append pages in order, write a merged output file, and return a summary of files merged and pages written. ## Why Streamlit Streamlit hits a useful balance between speed and flexibility for building fast Python GUI prototypes. It offered drag-and-drop uploads, instant local hosting, rapid iteration, and straightforward packaging. ## Designing the SOC Aesthetic I wanted a tool that felt like it belonged in a SOC workflow: dark surfaces, high contrast, neon accents, monospaced typography, and a console-style output area that reads like a log stream — matte black background, deep gray panels, cyan accents, JetBrains Mono typography, subtle glow on interactions, squared edges, and a minimal layout. ## Building the Controller Layer Keeping the GUI "dumb" was one of the best architectural decisions. The controller layer handles file validation, temporary workspace management, calling the merge engine, and returning structured output to the interface. The GUI orchestrates, the engine executes, and the controller bridges the two — the same design pattern used in LinuSec: isolate logic, isolate interface, connect with a thin controller. ## Security and Reliability Notes As a local-first PDF merge tool, uploaded files are written to a temporary workspace, processing stays local to the running environment, and output is generated from validated inputs in order. ## The Final Result The finished app is small, fast, and pleasant to use: drop in PDFs, run merge, and get clear progress feedback from a console-like status stream. The architecture leaves room to grow — the engine can gain features, the controller can add workflow controls, and the UI can evolve independently. ## What's Next Planned features include PDF splitting, page rotation, metadata editing, compression, a multi-page GUI, and desktop packaging. Links: [GitHub Repo](https://github.com/JohnB-LWF/MergePDF) · [Live App](https://mpdfapp.streamlit.app/)