QA testers write raw, unstructured notes during testing sessions. Reformatting those into standardized bug reports with proper structure, severity ordering, and both email and document outputs takes real time and introduces inconsistency. The team needed a tool any member could use, regardless of technical background.
Built a two-interface tool: a Jupyter Notebook for the developer/maintainer and a Streamlit web app for non-technical teammates. The tool accepts raw text or Word documents as input, extracts text and images from .docx files using python-docx, then sends the text to an LLM API with a detailed system prompt that structures bugs into standardized JSON objects.
Post-processing sanitizes formatting artifacts, deduplicates requirement numbers, and orders bugs by severity. Outputs are a plain text email and a formatted Word document with embedded screenshots.
Security was a priority: API keys are encrypted at rest using Fernet symmetric encryption (PBKDF2 with SHA256, 480K iterations). The plaintext key only exists in memory during the session. Images never leave the local machine. Only raw text goes to the AI endpoint.
Deployed internally. Used by QA team for daily bug reporting across multiple test sprints.