Own product · 2015–2026
Inkiostro
An email and print service between prisoners and their families. I ran it for ten years in three Italian prisons, then rebuilt the whole system from scratch.

The service
Families write to a prisoner by email, from anywhere. Every morning the messages are printed, taken into the prison and handed out. Prisoners reply on paper, on sheets that carry a QR code; the sheets are scanned and the replies go out as email.
I ran it at C.C. Velletri from 2015 to 2024, at C.C. Latina from 2017 to 2025 and at Regina Coeli in Rome from 2025 to 2026: the software, the mail servers and the day-to-day running of the service.
The rewrite, October 2025 – January 2026
Ten years of running the service showed me exactly where the time went: records kept in Excel, credit running out halfway through a print, disputed page counts, renewals typed in one at a time, scans with unreadable codes. I rewrote the whole system around the operator's day.
- Prints ready every morning. Incoming mail is read, converted (attachments and phone photos included), split when it is too long and laid out as PDFs, batched per prison on its own schedule.
- Replies that send themselves. Scanned sheets are matched by their QR codes and sent as email; in tests about 8 in 10 went through without help. For the rest, a keyboard-first screen suggests the prisoner, the address and the domain.
- Credit you can check. A ledger with a running balance for each prisoner. Credit left over is held and released on renewal; help replies and bounced mail are not charged.
- Renewals in one go. The operator uploads the prison's statement of debited accounts as a PDF or a photo. Italian OCR and fuzzy name matching turn each line into a contract, shown for review before import.
- Several prisons on one system, each with its own price tiers, print schedule and staff roles.
Tested and ready
The new system has been finished since January 2026. It was tested with real archive data but has not been used for live mail yet. From the tests:
- 649 prisoners and 2,704 contacts imported from the old Excel archive
- 659 mailboxes read in about 30 seconds, with no errors
- 362 PDFs produced in 13 minutes by six workers in parallel
- 250 test emails with 150 attachments, in 22 languages
- outgoing mail passing SPF, DKIM and DMARC checks at Gmail
How it's built
About 46,600 lines of Haxe in 145 files, compiled to a Node.js server and framework-free browser clients in plain JavaScript, with the interfaces in HTML5 and CSS3. MySQL, PM2 and nginx on a Linux server, with my own mail stack (Postfix, Dovecot, OpenDKIM). PDFs with WeasyPrint, QR codes read with zbar, OCR with Tesseract.
Parts of the document pipeline are open source as haxe-doc-pipeline.




