Show HN: A simple Markdown note app with templates and PDF support
panto.appA lightweight note-taking app built with Go + HTMX, featuring nested pages, templates, shared spaces, and OCR to make scanned PDFs searchable. The web app uses responsive design to make it scale to desktop or mobile.
Hi HN! I’m the creator of Panto and wanted to share why I built it.
I was having a hard time finding a simple replacement for Evernote where I could keep my notes organized and make scanned PDFs searchable. There are tools that do this, but none that felt simple or fast enough. At the same time, my software team was looking for a Confluence replacement. Markdown would have been enough for us, and we never needed the heavy “wiki” layer. That’s why Panto includes shared spaces for team documentation but keeps everything much simpler than a full wiki.
Panto is built with Go + HTMX and focuses on speed, minimalism, and predictable performance. It uses server-rendered HTML with small sprinkles of interactivity via HTMX, and no frontend framework. Notes are stored in a nested tree with no depth limit, revision history can be scrubbed through with a timeline-style UI, and there’s a lightweight server-side OCR pipeline so PDFs become searchable.
Most of the time I write plain Markdown pages, but I added templates for cases where structured, repeatable data is useful. Templates are composed of typed fields (text, numbers, checkboxes, files, etc.). Unlike an object-based note tool like Notion, where you build structure as you go, Panto templates are designed to be defined up front when you know the shape of your content.
I’d really appreciate feedback on the architecture, performance, and any rough edges you encounter. Happy to answer questions about how it works internally.
The OCR for scanned PDFs is a killer feature! I'm curious about the technical architecture - are you using Tesseract for OCR, or a different engine? Also, how do you handle multi-language documents or handwritten text?
Regarding the template system with typed fields - this sounds similar to structured note-taking systems like Tana or Notion databases. How do you balance the flexibility of freeform Markdown with the structure of templates? Can users mix template-based and freeform notes seamlessly, or do they exist as separate entities in your data model?
Hey badmonster, Yeah, Tesseract was a quick way to get a first version, so I'm using that now. From what I can tell it should be good for multiple languages, but not very good at handwriting. This is something I'd like to improve in the future.
There's one other main difference with how I'm handling PDFs. I'm not using a PDF client for viewing, I convert every page into a full-size image and thumbnail and use those in the page display. That gives me more control over the user interface and I think that it is a nicer experience, especially on mobile when you want to zoom in.
The data model did take a few iterations to get something that felt right. I landed on everything being a field. When you create a page in a space with no templates, it will automatically make a default template with one field: a markdown block. Everything being a field means that images and PDFs are also fields, and I can search everything within one table.
If you want to see what I mean on a demo page: https://www.panto.app/share/3fb92532-0383-400c-ac4d-384370c6...
Awesome!
Thanks!