ProjelerProjects
OmniDoc uygulama simgesi: kalem uçlu bir belge

OmniDoc

Belgelerinizi işlemek için yirmi bir araç. Hiçbiri telefonunuzdan çıkmıyor. Twenty-one tools for working with documents. Not one of them leaves your phone.

Google Play'de · v2.5.2On Google Play · v2.5.2 Android Kotlin tek kişiliksolo
OmniDoc ana ekranı: arama çubuğu ve dört hızlı işlem kutusu
Ana ekranHome Dört hızlı işlem, tek arama çubuğu. Four quick actions, one search bar.
OmniDoc PDF işlemleri kategorisi: birleştir, böl, sıkıştır, düzenle, sayfa düzenle
PDF işlemleriPDF tools Birleştirme, bölme, sıkıştırma, düzenleme. Merge, split, compress, edit.
OmniDoc tarama kategorisi: belge tara, aranabilir PDF, kimlik tara, pasaport tara, OCR
TaramaScanning Belge, kimlik, pasaport ve OCR. Documents, ID cards, passports, OCR.
OmniDoc ayarlar ekranı: dil, sayfa boyutu, açık ve koyu tema seçimi
AyarlarSettings Altı dil, üç tema, Material You. Six languages, three themes, Material You.

Tek bakıştaAt a glance

PDF birleştirmek için bir site, Word açmak için başka bir uygulama, imza atmak için üçüncüsü. Hepsi dosyanızı kendi sunucularına yüklüyor. One website to merge PDFs, another app to open Word files, a third to sign something. Every one of them uploads your file to its own servers.

OmniDoc bu işlerin hepsini tek uygulamada ve tamamen telefonun içinde yapıyor. İnternet bağlantısı, hesap ya da sunucu gerekmiyor. Uygulamada reklam, uygulama içi satın alma ve analitik kütüphanesi de yok — bağımlılık listesinde bunlardan tek bir tane bile bulunmuyor. OmniDoc does all of it in one app, entirely on the phone. No connection, no account, no server. There are no ads, no in-app purchases and no analytics libraries either — not one of them appears in the dependency list.

1Open

Dokuz formatNine formats

PDF, Word, Excel, PowerPoint, TXT, CSV, RTF, Markdown ve EPUB. PDF, Word, Excel, PowerPoint, TXT, CSV, RTF, Markdown and EPUB.

2İşleWork

Yirmi bir araçTwenty-one tools

Birleştirmeden imzaya, taramadan OCR'a altı kategori. Six categories, from merging to signing, scanning to OCR.

3BitirFinish

Cihazda kalırIt stays put

İşlem bittiğinde dosya hâlâ sadece sizin telefonunuzda. When the job is done, the file is still only on your phone.

Ne zamanWhen Şubat – Temmuz 2026 · 92 commitFebruary – July 2026 · 92 commits
EkipTeam Tek kişiOne person
TeknolojilerStack Kotlin 1.9.22Jetpack ComposeHilt 2.50 Room 2.6.1WorkManagerPDFBox-Android Apache POIML KitCameraX
DestekSupport Android 8.0 ve üzeri · altı dil · açık, koyu ve sistem temasıAndroid 8.0 and up · six languages · light, dark and system themes
DurumStatus Google Play'de yayında. İmzalı release paketi 27,6 MB.Live on Google Play. Signed release bundle, 27.6 MB.
01/AraçlarThe tools

Yirmi bir araç, altı kategoriTwenty-one tools, six categories

Sayı yuvarlanmış değil. Uygulamanın kendi kategori rozetleri topluyor: 5 + 5 + 5 + 3 + 2 + 1. The number isn't rounded. The app's own category badges add up: 5 + 5 + 5 + 3 + 2 + 1.

5

PDF işlemleriPDF operations

PDFBox-Android 2.0.27

Birleştirme, bölme, sıkıştırma, içerik düzenleme ve sayfa düzenleme. Uzun süren işler arka planda çalışıyor; uygulamayı kapatsanız da devam ediyorlar. Merge, split, compress, edit content and rearrange pages. Long jobs run in the background — they keep going even if you close the app.

5

DönüştürmeConversion

yedi arka plan işçisiseven background workers

Fotoğraftan PDF'e, PDF'ten fotoğrafa, dosya ve resim biçimleri arası dönüştürme, birden çok dosyayı tek PDF'te birleştirme. Photo to PDF, PDF to photo, conversion between file and image formats, and merging several files into one PDF.

5

TaramaScanning

ML Kit · CameraX 1.4.1

Belge tarama, kimlik kartı ve pasaport okuma, taranmış PDF'e arama yapılabilir metin katmanı ekleme ve görüntüden metin çıkarma. Document scanning, ID card and passport reading, adding a searchable text layer to scanned PDFs, and pulling text out of an image.

3

DüzenlemeMarkup

çizim · imza · formdrawing · signature · forms

PDF üzerine çizim, metin ve imza ekleme; PDF form alanlarını doldurma; Markdown destekli metin editörü. Draw on a PDF, add text and a signature, fill in PDF form fields, and a Markdown-capable text editor.

2

GüvenlikSecurity

BouncyCastle 1.78.1

PDF'i parolayla şifreleme ve filigran ekleme. Şifreleme kütüphanesi beş güvenlik açığı kapatan sürüme sabitlendi. Password-encrypt a PDF and add a watermark. The crypto library is pinned to a version that closes five known vulnerabilities.

1

OkumaReading

dokuz formatnine formats

Tek bir açma noktası; dosya türünü kendisi anlıyor ve doğru okuyucuya yönlendiriyor. Sistem dosya seçicisinden de paylaşım menüsünden de çağrılabiliyor. A single entry point that works out the file type and hands it to the right reader. It can be called from the system file picker or the share sheet.

OmniDoc dönüştürme kategorisi: dosyaları birleştir, fotoğraf-PDF dönüşümleri, resim dönüştür
DönüştürConvert Beş dönüştürme aracı.Five conversion tools.
OmniDoc okuma ve düzenleme kategorileri: dosya aç, PDF anotasyon, form doldur, metin editörü
Oku ve düzenleRead and mark up Anotasyon, form doldurma, metin editörü.Annotation, form filling, text editor.
OmniDoc güvenlik kategorisi: PDF şifrele ve PDF filigran araçları
GüvenlikSecurity Şifreleme ve filigran.Encryption and watermarking.
OmniDoc dosyalarım ekranı: tür ve tarihe göre filtreleme
DosyalarımMy files Türe, tarihe, ada ve boyuta göre süzme.Filter by type, date, name and size.
02/MahremiyetPrivacy

Gitmeyen veri sızmazData that never leaves can't leak

Sunucu yokNo server

Yükleme diye bir adım yokThere is no upload step

Kimlik kartınızı tarattığınızda görüntü telefonun dışına çıkmıyor. Tanıma da, PDF üretimi de aynı cihazda oluyor. When you scan your ID card the image never leaves the phone. Recognition and PDF generation both happen on the same device.

Takip yokNo tracking

Analitik kütüphanesi yokNo analytics library

Bağımlılık listesinde reklam ağı, analitik ya da telemetri paketi bulunmuyor. Kaç kişinin hangi aracı açtığını ben de bilmiyorum. The dependency list contains no ad network, analytics or telemetry package. I don't know which tool anyone opens either.

BedeliThe cost

Çökme raporu da yokNo crash reports either

Aynı karar bana da bir şey kaybettiriyor: bir kullanıcıda uygulama çökerse haberim olmuyor. Bunu bilerek kabul ettim. That same decision costs me something: if the app crashes for a user, I don't find out. I accepted that knowingly.

03/YöntemMethod

Seksen beş bin satırı elle yazmadımI didn't hand-write eighty-five thousand lines

Bunu saklamak yerine anlatıyorum, çünkü asıl iş kod yazmak değildi. I'd rather explain this than hide it, because writing the code was not the actual work.

01

Hattı kurdumI built the pipeline

Çok ajanlı bir geliştirme döngüsü tasarladım: analiz, çapraz denetim, paralel onarım, derleme, inceleme ve commit. Depoda bu döngünün betikleri ve yapılandırması duruyor; ilk commit'in mesajı doğrudan kurulum adımı. I designed a multi-agent development loop: analyse, cross-audit, repair in parallel, build, review, commit. The repository still holds the scripts and configuration for that loop; the very first commit message is the setup step.

02

Çıkanı denetledimI audited what came out

Üretilen kodu tek tek kabul etmedim; ajanları birbirine denetlettim. Geliştirme kaydında elli beş ajanlı bir denetim, on beş ajanlı bir performans taraması ve on ajanlı bir hata avı oturumu ayrıntısıyla yazılı. I didn't accept generated code as-is; I had agents audit each other. The development log records a fifty-five-agent audit, a fifteen-agent performance sweep and a ten-agent bug hunt.

03

Kendi test botumu yazdımI wrote my own test bot

Arayüzü kendi başına gezen bir Python botu yazdım; telefona bağlanıp ekranları dolaşıyor, açtığı her ekranın görüntüsünü kaydediyor. Yanına dokuz akışlık bir uçtan uca test paketi kurdum. I wrote a Python bot that explores the interface on its own: it connects to the phone, walks the screens and captures every one it opens. Alongside it I set up a nine-flow end-to-end suite.

04

Kararları ben verdimThe decisions were mine

Hangi kütüphanenin kullanılacağı, neyin sökülüp neyin sabitleneceği, neyin yarım bırakılacağı — bunların hiçbiri otomatik değildi. Kod üretmek kolay kısmıydı. Which library to use, what to rip out, what to pin, what to leave unfinished — none of that was automatic. Generating code was the easy part.

04/Bir kararOne decision

Çalışan PDF motorunu söküp attımI ripped out a working PDF engine

Proje ilk kurulduğunda PDF tarafı yaygın bir kütüphaneyle çalışıyordu ve sorunsuzdu. Sonra lisansını okudum: kodun kendisi serbest ama onu kullanan uygulamanın kaynağını da açmanızı şart koşuyordu. Ücretli sürümü var, ama bir öğrenci projesi için değil.

Uygulama kapalı kaynak olduğu için bu bir hukuki risk demekti. Çalışan hattı söküp PDF üretiminin tamamını Apache lisanslı başka bir kütüphaneye taşıdım — birleştirme, bölme, sıkıştırma, filigran, şifreleme, form alanları ve aranabilir PDF üretimi dâhil.

When the project was first set up, the PDF side ran on a widely used library and it worked fine. Then I read its licence: the code itself is free, but it requires you to open the source of any application that uses it. There is a paid edition — not for a student project.

Since the app is closed source, that was a legal risk. So I tore out a working pipeline and moved all PDF generation onto an Apache-licensed library instead — merging, splitting, compression, watermarking, encryption, form fields and searchable PDF output included.

Erken ödenen faturaPaying the bill early

Böyle bir bağımlılık ne kadar uzun kalırsa o kadar pahalıya çıkar. Bu yüzden proje hâlâ küçükken karar verdim. A dependency like this gets more expensive the longer it stays. So I made the call while the project was still small.

Artık kütüphane seçerken ilk baktığım şey lisansı. Now the licence is the first thing I check when picking a library.

05/SayılarThe numbers

Ölçülebilen kısmıThe part that can be counted

KodCode 85.257 satır Kotlin, 193 dosya. Tek satır Java yok; tek XML düzeni var, o da ana ekran aracı için. 85,257 lines of Kotlin across 193 files. Not one Java file; a single XML layout, and that one is for the home-screen widget.
ArayüzInterface 39 ekran · 245 bileşen · 33 görünüm modeli · tablette yan gezinme çubuğuna dönüşen düzen 39 screens · 245 components · 33 view models · a layout that turns into a side navigation rail on tablets
TestTests 261 birim testi — son koşumda hepsi geçti. Ayrıca 60 arayüz testi ve dokuz akışlık uçtan uca paket. 261 unit tests — all passing on the last run. Plus 60 interface tests and a nine-flow end-to-end suite.
DilLanguages Altı dil, 1.337 metin. Eksik çeviri sayısı sıfır. Six languages, 1,337 strings. Zero missing translations.
YayınRelease Kod küçültme ve kaynak temizleme açık · 322 satırlık koruma kuralı · başlangıç hızı profili · imzalı paket 27,6 MB · statik analizde sıfır hata Code shrinking and resource cleanup enabled · 322 lines of keep rules · a startup speed profile · signed bundle at 27.6 MB · zero errors in static analysis
GüvenlikSecurity İki kütüphane, toplam yedi bilinen açığı kapatan sürümlere elle sabitlendi. Two libraries pinned by hand to versions that close seven known vulnerabilities between them.
06/Bundan sonrasıFrom here

Değişmeyen söz, yükselen çıtaA promise that stays, a bar that rises

KuralThe rule

Kullanıcı verisi hiçbir sürümde toplanmayacakNo release will ever collect user data

Bu, sonradan eklenecek özellikleri de bağlıyor: bir işlev ancak kişisel veriye dokunarak çalışıyorsa yazılmıyor. That binds everything added later too: if a feature can only work by touching personal data, it doesn't get written.

HedefThe goal

Aynı masaya oturabilecek seviyeGood enough for the same table

Belge tarafında kıyas noktam Adobe ve Microsoft uygulamaları. OmniDoc'u o eşiğe getirmeye uğraşıyorum. Henüz varmadı; yön bu. On the document side, my reference point is Adobe's and Microsoft's apps. I'm working to get OmniDoc up to that level. It isn't there yet; that's the direction.

Ölçünün kaynağıThe source of the measure

Kullanım istatistiği olmadan ilerlemeyi uygulamanın kendisinden okumak gerekiyor. Bir üstteki liste bunun için var. Without usage statistics, progress has to be read off the app itself. That's what the list above is for.

Bu sayılar depodan geliyor. Those numbers come from the repository.

Oraya varmak kullanıcı verisi istiyorsa, vazgeçilecek olan bu kural değil. And if getting there would take user data, the rule isn't what gets dropped.

UygulamaThe app

Telefonunuzda deneyinTry it on your phone

Hesap istemiyor, reklam göstermiyor ve hiçbir dosyanızı dışarı göndermiyor. No account, no ads, and none of your files go anywhere.

Google Play'de açOpen on Google Play