Show HN: Desktop app displaying files on a 2D canvas

limandoc.com

40 points by limandoc 3 days ago

Hey all! I always wanted to arrange my text/markdown/pdf files on a 2D canvas and visualize them without opening all the windows. An extra feature I added is also visualizing folders within - so kind of a 3D visualization? It was also important to be an offline desktop app, rather than online tool like Miro or Mural, because once I edit files in Sublime or AdobePDF then I want changes to sync in the canvas right away.

Some technical points and lessons learned: being Android developer helped a lot with this project since I used Kotlin Multiplatform with Compose Desktop renderer (actually skiko). It runs on JVM under the hood, which was exciting at first since I can use the app on all of my Mac/Windows/Linux machines. Right? Wrong. One lesson I learned wasn’t “write once - run everywhere”, it was “write once - test everywhere; repeat”. On the other hand, using Kotlin Multiplatform will allow me easily to port to Android and port the logic to iOS.

Anyways, I released LimanDoc v1.0.3, still in Proof-Of-Concept, so I hope to get some feedback and features you think would be helpful.

I was thinking these features would be great for future releases: - adding a local LLM support to search/summarize your docs, books, videos, etc; - sync on local network (including future mobile apps) - Templates, groups, and better diagram integration like in Drawio.

pilgrim0 3 days ago

Gave it a try on macOS.

My first impression is that it breaks expectations for common operations:

1. Two-finger sideways panning does not work, it zooms erratically; 2. Click and drag pans instead of drawing a selection box; 3. Shift + Click or Cmd + Click does not add item to selection; 4. Two-finger vertical swiping does not zoom when hovering an item; 5. The zoom disregards mouse coordinates, always anchors from the center of viewport;

Still not sure how to select multiple items. I'd recommend you get the fundamentals of navigation/edition right, otherwise it's unworkable. Even for a POC. I can't even explore the scope of built features with excitement because these issues make it super frustrating, makes me wanna give up immediatelly.

Misc:

6. I expected snap to grid; looking for the option but there's no app menu; 7. Adding icons successively stacks them on top of eachother, which is adds repositioning overhead; 8. Very easy to wrongfuly scale small items while attempting to move them; 9. I'm seeing at least 250ms of lag for openning sidebars and getting visual focus feedback;

This last one is tough feedback, please don't take it personally. I want to join the waitlist for notifications of more mature versions. But since you shipped publicly too early, it makes me question if it's worth and the team behind it can actually deliver up to my expectations. In other words, I feel like it jumped the gun. Bad first impresssion for a technical audience.

The bar for minimal UX polish nowadays is very high, all the fundamentals have to be solid, I would gladly trade a thousand features for these solid fundamentals. That's my expectation of a POC: low on features, high on polish.

If it's any conforting, consider that the only reason I bothered to test it and write this feedback (in a rest day with very acute right hand tendinitis) is because I think it's a very cool project idea.

  • limandoc 3 days ago

    This was very important for me, can't appreciate enough for your time trying and reviewing.

    Indeed I have been focusing on features more than optimization, but I also had to spend huge amount of time with the new UI tool. For example I had to revert a lot of macOS features like two-finger panning and zooming because on Windows/Linux I would not receive an y-coordinate events from trackpad... Some key shortcuts I had to implement myself for that reason too.

    I also wished that the sidebar UI lag was the only one :) There are more if high-def images and big PDFs are rendered. The UI optimization will be the primary focus for next two releases.

    Regarding POC - for me it is also a business POC - I primarily want to know if other people will find the idea useful, whether there are alternatives etc. While I'm here I also want to ask what use case would you (if ever) consider using it - personal or work related?

    Also feel fee to reach at info[at]limandoc.com, as for the extensive feedbacks I will give a perpetual license in the (possible) near future. Having feedbacks is primary reason for this PoC.

    • pilgrim0 3 days ago

      I just revisited similar tools to understand better why I feel your tool has more appeal to me than the likes of miro, etc. and I realized I forgot to compliment the good parts. Yours felt way simpler, the ui doesn’t get in the way and that’s a huge plus. I wasn’t greeted with any pop ups, toasts and whatnot. It felt professional like the other software I use, and not a dystopian fragile virtual money grab toy. Those other tools feels enterprisey, thus yucky, cringey. On a subjective level I don't identify with corporate values that’s why I think your tool felt like the very first of its kind I have ever used, because the entire process/context aligned with my values as a hacker, independent researcher. It was a relevant experience for that matter!

      • limandoc 3 days ago

        Signing under the yucky and bloaty corporate part! I try to keep the landing page clean as well, it was quite important for me, as I want to use a tool, rather than a shiny toy. That is why I prefer simple text editors to Notion; it is a must-have for the my app to be compatible with outside software and not a vendor lock-in.

    • pilgrim0 3 days ago

      I would use it for organizing dossiers on a research topic. For collecting thoughts and references for things under my current scope of work. I would use it temporarily and not as a primary storage/organization system. A short term memory aid if you will. In this context the number of canvases I would be creating/destroying would be high. The distinct killer feature for me is just being able to layout multimedia files neatly in the canvas. The neatly part is very important to me, meaning I care deeply about media taking a discrete amount of grid cells and filling them up perfectly. I’m used to CAD and design tools where you have complete control of metrics, alignment and spacing. I wouldn’t care for arrows and labels, this ends up just being yak shaving, hard to maintain and superfluous. Your approach is what I think is an ideal desktop environment. Traditional desktops are worthless because they only have icons and do not layout files like a literal desk top. These canvases have very little value as a document for me in the sense of a permanent storage thing. Since there’s no guarantee I’ll have the app in all my devices at all times. I haven’t investigated how you do it, but in the uncommon case I needed to persist the canvas long term, if it generated a single sidecar text file describing the canvas (like obsidian and excalidraw does) then I could depend on this file and commit it alongside my repos. But I would expect the ability to have multiple of these sidecar files for the same directory tree, hence able to have multiple ways of analyzing the same set of media, reflecting different perspectives and stages of analysis. IME software that require zero commitment for using it are the best. Like text files. It feel like a tool and not a platform. So the idea of always creating a project and things like that is pure cognitive overhead to me. Even apps that are fully local and require no account do feel like a platform when they require some kind of upfront establishments prior to giving access to some or all functionality.

zelos 3 days ago

Nice. Kind of like Jef Raskin suggested in The Humane Interface?

https://en.wikipedia.org/wiki/Archy_(software)#Zoomworld

  • limandoc 3 days ago

    This is a great find, thanks! Indeed I had the vision of Zoomworld as described there. The Leaping concept is very intriguing I must say - will play with that for sure

    • alpaca128 2 days ago

      Vim's incremental search experience is basically identical to this Leap concept, just that unfortunately it doesn't come with two dedicated keys on the keyboard. It's been my favorite way to navigate text files for years and one of the reasons I like that editor.

dr_kiszonka 2 days ago

It looks neat. One aspect that I didn't quite get from the clips was accessing "distant" documents. Let's say I work with two files. One file on the very surface and another a few levels deeper. Do I need to zoom in and zoom out all the time to compare the documents? In other words, is there an equivalent of two windows opened next to each other, even if the documents come from two very different locations?

  • limandoc 2 days ago

    There are tabs, like in a browser, so you can have two tabs for your usecase. Perhaps I can work on tab division, like I'm IDEs. I'll be also implementing a search functionality later to find the files and even searching across the content of files.

    However for both files to be visually be on the same level, I am now thinking about shortcuts, where the original document will live in a distant folder (board), and you can view it from other board by creating a reference/shortcut to it. Possibilities are endless!

j0d1 3 days ago

That's really cool! I am working on a diagramming editor and I wondered if I could expand the use cases to include knowledge organization. The challenge is mainly to display a lot of data on a canvas and don't kill the CPU/GPU in the process. How do you handle displaying that much information at once?

  • limandoc 3 days ago

    It is indeed hard to optimize it; I haven't fully utilized the potential myself. For now I have an object pool which allows me to create only one instance of a canvas element. Kotlin also allows me to use coroutines easily, also (potentially) have access to GPU/CPU since this is a desktop app.

    Another thing I tried (still in backlog) is dynamic quality reducer for images and PDFs - sort of like a game engine rendering where zooming out will reduce quality of images. What are you writing your app on? Electron?

ttoinou 2 days ago

Seems nice, but why would we need synchronization between devices ? if the layout is stored in that hidden file, it will be synced with any sync tool like dropbox, google drive etc.

oulipo 3 days ago

Really cool! This would be a nice integration with Obsidian if you had an open / textual format (and possibly open-source it!)

  • limandoc 3 days ago

    Thanks! The text is not stored in a database, rather I just render the markdown files you have on the canvas. Technically, it is also possible to put your whole Obsidian vault into LimanDoc's vault, and all the files from Obsidian will appear in the canvas :)

    • oulipo 3 days ago

      I was thinking more of the reverse, for instance you can include an Excalidraw render inside obsidian, which is nice for mockups, etc

      Perhaps you could do the same with your app?

      • limandoc 3 days ago

        Ah I see now, I will check it out! In near future I will also add a support to render whole web-pages instead, e.g. adding youtube video, blog post, etc. Perhaps adding an excalidraw link there and drawing right within LimanDoc would work... Will keep an eye!

tcper 2 days ago

Great idea, it is very inspiration

mqoca 3 days ago

Any reason why this needs admin rights in windows?

  • limandoc 3 days ago

    Does the installer needs admin rights? Or the app after installing it? One possible answer is that I self-signed the app rather than using 400$ code-signing authority - hence you might get warnings for the installer.

SuperHeavy256 3 days ago

You're onto gold here, my friend.

  • nemosaltat 3 days ago

    I agree! Visualizing a workflow or a project this way seems to have a ton of potential. I already keep most of my knowledge in Obsidian or template folder structures, and this provides a really neat way to visualize it.

    An immediate use case that comes to mind is when I’m sending multiple file “deliverables” to a client— i.e. a quote, a report package, some spec sheets, and a relevant CAD diagram)— I could quickly arrange them on as previews on canvas with arrows to visually communicate how they relate and their relative importance rather using multiple paragraphs to explain the seven attachments.

    • limandoc 3 days ago

      This is a good use-case, thanks! I will be adding arrows quite soon too, but sharing and collaborating externally will take a while, hopefully you have joined waitlist :)

puppycodes 2 days ago

I love this idea but its a mistake not to open source it. Especially at an early stage the feedback and work from dedicated contributors is worth it. Not to be rude or presume but I venture to guess nothing in your source code is actually of proprietary value as the app is pretty simple and I think thats a good thing! You only lose by closing the source at this stage of the game.