Pinhole
A private AI image generator that runs on your own computer. Pick a model, type, Generate.
- merged pull requests
- 231
- Rust crates in the workspace
- 8
- Rust tests
- ~800
- first commit to v1.0.0
- 3 days
- Rust
- Tauri 2
- React 19
- TypeScript
Builder, engineer, maker. A decade of tinkering, building and studying the art of code — the last 3+ years professionally. By day I build ERP software at Data Design; by night I ship local-first desktop apps, plugins for the Omarchy desktop and fast websites for small businesses.
2 ~/work
A desktop app, three plugins on the Omarchy marketplace and a handful of libraries and tools — most of them from the last few weeks, most of them in daily use.
A private AI image generator that runs on your own computer. Pick a model, type, Generate.
YouTube in the Omarchy bar. Search and play through mpv — no browser, no account.
Your week on Omarchy as a shareable card — and nothing ever leaves your machine.
A fork that ships Linux CUDA builds and locks down the server — Pinhole's engine.
100% hand-written · no LLMs
A Go library that solves Sudoku the way people do — and brute-forces the rest in a millisecond.
3 ~/sites
I design, build and host websites for small businesses and creative people in Montenegro. Hover a window to scroll through the live site.Keep scrolling — each window flips through its live site.
01 / client
A bilingual site for a career-change mentor — one she edits herself.
A bilingual website for Montenegrin career mentor Jelena Rajković, built with Next.js 16 and Payload CMS, with a blog, free resources and private analytics.
02 / client
A literary magazine with a custom editorial desk, built for poets.
Žilet is a Montenegrin magazine for literature, art and culture. I built its custom CMS, reader accounts and comments with Next.js 16, Drizzle and Postgres.
03 / client
Clean lines, precise work — a fast static site for a drywall company in Podgorica.
A bilingual static website for GIPS PROJECT, a drywall company in Podgorica, with a 26-photo gallery, local SEO and atomic, symlink-swapped deploys.
4 ~/blog
How I built dgudovic.com — Omarchy themes, kinetic type, zero-JS page transitions and a perfect Lighthouse score from a small VPS.
5 ~/about
day job · since 2024
I work on TiramisuERP, the cloud ERP that more than 1,000 companies in Montenegro, Serbia and Bosnia and Herzegovina run on — sales, finance, HR, payroll, retail and restaurants, built on PHP and Laravel.
More about melocal-first
Pinhole, OmaJuke and OmaWrapped make no network calls they don’t need. Privacy is a feature you can test, so I test it.
tested
OmaLint ships 336 tests for 2.5k lines of Python. Pinhole’s full CI run generates a real image on Windows and Linux, end to end.
agentic
I fully embrace AI: agents implement in parallel worktrees while I design, review, decide — and own the result. The exception: Sudoku, 100% hand-written.
honest
My READMEs say what’s untested and what’s missing. Telling the truth about software is part of shipping it.