PurplePrint
A fully offline Android Markdown editor with on-device PDF export.
0
network permissions
The application is designed to work without internet access.
2
adaptive layouts
Tabs on phones and split editor/preview on tablets.
1
local document engine
The parser and PDF renderer run on the device.
01 / Visual evidence
Screenshots and workflow
Split editor and preview
Markdown source and rendered document stay visible together on larger screens.
Print-ready workflow
The document moves from local parsing to Android’s native PDF and print surfaces.
02 / System design
Architecture diagram
Editor
- Jetpack Compose
- Material 3
- Adaptive phone/tablet UI
Document engine
- Block parser
- Inline parser
- AST renderer
Device output
- PdfDocument
- PrintManager
- Android print dialog
PurplePrint has no network dependency: Markdown is parsed into an AST and laid out into a PDF entirely on the Android device.
Evidence
Sanitized report
Offline and privacy controls from the Android build review. Document content and device identifiers are intentionally absent.
MODE: offline-first
PERMISSIONS: network access absent
REDACTION: source document and device metadata removed03 / Verification
Testing methodology
Test parser coverage
Checked block and inline Markdown combinations, empty documents, long lines, and malformed syntax against the AST renderer.
Validate layout output
Compared preview and generated PDF across headings, lists, code, page breaks, and print dialog handoff.
Exercise device states
Verified phone tabs, tablet split view, theme changes, rotation, and offline launch behavior.
04 / Ownership
What I personally contributed
Clear ownership matters in security work. These are the decisions and deliverables I directly handled for this project.
- Sole developer responsible for the native Android architecture and product decisions.
- Wrote the custom block-level and inline Markdown parser and AST model.
- Implemented the PDF layout engine with Android PdfDocument and PrintManager.
- Designed the adaptive Compose UI, themes, permission posture, and offline behavior.