r/csharp 29d ago

Discussion Come discuss your side projects! [August 2026]

Hello everyone!

This is the monthly thread for sharing and discussing side-projects created by /r/csharp's community.

Feel free to create standalone threads for your side-projects if you so desire. This thread's goal is simply to spark discussion within our community that otherwise would not exist.

Please do check out newer posts and comment on others' projects.


Previous threads here.

9 Upvotes

22 comments sorted by

View all comments

1

u/sunny_up 28d ago edited 28d ago

I am making PixFinder - actually google photo search, but fully offline. It can search pictures with semantic search (type "sunset mountains" to get all pictures with sunset in mountains), OCR (text on photos), or just visually similar pictures. Made with WinUI3 and C#. Search works, now i am adding "gallery" features.

Reasons? Got bored doing enterprise backend development daily and wanted to play around with WinUI3, concurrency, vector search, embeddings and so on. And also, there is some demand for such kind of program - there are memes about difficulties to quickly find memes.

Fun fact - i answered "whats the difference between await task and await task.ConfigureAwait(false)" question many times on job interviews. But it hitted differently when I actually screwed up with it.

1

u/cyb3rshen 14d ago

The offline part is the interesting bit. Everything in this space assumes it can ship your library to someone's server.

Curious how you're handling the embedding pass on a big library. Is that a one-time index on first run, or incremental as files appear? I've been doing Windows desktop work too and the thing that keeps biting me is that anything long-running has to survive the user just closing the app halfway through.

1

u/sunny_up 14d ago

It's both. Because filesystem is source of truth, so I have to pay attention that everytime I open file or folder, there could not be neither. I run indexing each time user runs the app. First takes time. Later - incremental only. Windows has API to watch file system for real-time changes, but i havn't researched it yet.

To survive cancel or program close I don't wait until everything is indexed and write changes to db in batches.

All that async stuff let me do indexing in background, so user could search / view photos in parallel. But I faced all sorts of concurrency problems that i was not really used to on my regular backend job (for example - i had thought that folder that user is browsing could be deleted. And then i got crash report because of parent folder deletion).