← Back to work
PythonPySide6FastAPITelegram BotGemini AILive in Production

Arsip Surat Masuk: Automated Mail Archiving System

A Telegram bot, desktop app, and web archive working together to log incoming government mail, with Gemini Vision OCR auto-filling every record.

Role

Full-Stack Developer (Solo Project)

Timeline

2026

Platform

Desktop (Windows) + Telegram Bot + Web

Arsip Surat web archive, accessible to staff over the office network

The Problem

I handle incoming mail for government social assistance programs (Sembako and PKH) at my office. Every letter needs to be logged: date, letter number, subject, sending agency, then filed and cross-referenced against past correspondence so anyone can later check whether it's been replied to. Done by hand, a batch of 20 letters took me 1-2 hours.

Build a system that takes a photo of a letter and turns it into a fully logged, properly filed archive entry, with as little manual typing as possible, and make it usable from wherever staff happen to be: at their desk, on their phone, or away from the office entirely.

How It Works

The system runs on a dedicated office PC that I've turned into a small always-on server, with three ways in.

Telegram bot intake: staff sends a letter photo and the bot replies with extracted fields (record details redacted)

Telegram Bot Intake

I, or another staff member, send a photo of an incoming letter straight to a Telegram bot. The bot forwards it to the server, which runs it through Google Gemini Vision for OCR and extracts the letter date, number, subject, and sending agency automatically. Access is whitelisted: only registered Telegram accounts can use the bot, since it touches government correspondence.

Desktop app for reviewing extracted letter data before saving

Desktop App for Direct Review

A PySide6 desktop app gives me a faster path for batch work: pick a single file or an entire folder, and each one gets OCR'd and queued for review. Extracted fields show up in an editable form before anything is saved, so OCR mistakes get caught instead of silently entering the record.

Web Archive for the Whole Office

Other staff don't need to install anything. They open the server's IP address in a browser and get a searchable, filterable view of every archived letter, including reply status, without touching the bot or the desktop app at all.

Design Approach

Status Visible at a Glance

The most common question staff ask is "has this been replied to yet?" Reply status is colour-coded across every view (bot reply, desktop table, web list) so it never requires opening a record to check, with text labels alongside colour for anyone checking on a low-quality monitor or with colour blindness.

Color With Meaning, Not Decoration

Blue is reserved for primary actions and navigation, red only ever appears on destructive actions like delete, and everything else stays neutral. The interface had to read as "government office," not consumer software, so I avoided playful colour, illustration, or gamification.

Structured Filing, Automatically

Every saved letter is filed into tahun/program/jenis surat/nomor - perihal on disk, generated automatically from the extracted fields. Staff never decide where a file goes; the system decides for them, consistently, every time.

Outcome

<10 min
Time for 20 Letters
Down from 1-2 hours of fully manual logging and filing
3
Intake Channels
Telegram bot, desktop app, and web archive, all writing to one archive
Live
Status
Running daily on a dedicated office server, used by multiple staff