Holzwege - web based textual annotation with phoenix live view

I do some translating and other things that require close reading with extensive note taking. Ive been using Google Docs for as long as I can remember to store the text and my annotations in a two column format that I can share and collaborate with others on. I’ve finally gotten frustrated with the limitations of doing things that way and since I’ve been really enjoying learning LiveView I decided to start another toy project to see what I could come up with. I’m pretty pleased with the result, considering the time invested (about 4 days), which is accessible here for now: https://holzwege.onrender.com

It’s a very simple “MVP” type prototype, but I’m planning on adding lots of features like exporting annotations in various formats. sharing and hopefully collaborative annotation. As always, let me know what you think, if you would would find something like that useful, and what features you’d like to see.

All the text processing and highlighting logic is in LiveView, i.e. Elixir/Phoenix. There are some Javascript libraries out there to handle detecting, serializing and deserializing the selections but I didn’t really like how any of them worked, so the only javascript is a pretty simple script to detect which text is elected via line-based offsets (honestly pretty naive, haven’t done extensive browser compatibility testing or anything but it seems pretty reliable in FF and Chrome), and then Elixir handles building the markup to wrap each annotation in stylable tags.


Looks interesting and with potential :slight_smile:.

Please keep us informed each time you make progress on the site.


As a side note I have not liked to see my IP being collected by you in clear text. Please bear in mind that when serving the site in Europe you need to comply with GDPR, thus that IP address needs to be anonymized, aka hash it with a salt.

I used Mailinator, that is a public email address provider and misinterpreted the content:

Subject: 	Sign in code for holzwege
To: 	xxxx
From: 	xxxx@holzwege.org
Received: 	Sat Jun 20 2020 22:11:09 GMT+0100 (British Summer Time)
Sending IP: 	50.31.xx.xx

So the IP address is not mine.

My sincere apologies to @tfwright :frowning:


Thanks for checking it out, and thanks for the tip! I’ll get on a fix for that.

I have edited my reply with a correction to my claim about the IP address. I am really sorry to have not paid more attention :frowning:

Once more my apologies.

Not at all! Better to be safe than sorry when it comes to security issues :wink:

And besides, your general concern still applies, I should be asking for consent before storing and using the email address itself.


Just wrapped up a new more fully featured release. Most of it is UX improvements as I’m still actively working toward the “real” features I want to support, but I think I finally have something that resembles a MVP.

Some of the more notable additions:

  • Naming/deleting source texts
  • Markdown support in annotations
  • Exporting annotation lists
  • Go To Line navigation
  • Annotation paging
  • Annotation tags
  • Crash recovery (LiveView: View state recovery)
  • Sharing sources/annotations (still very rudimentary)

Next up:

  • Tag based filtering/exporting
  • Live source sharing/collaborative editing
  • Bulk annotation management
  • Annotation tools (suggestions, bibliography generation)

Some stats:

  • 100 lines of JS
  • 350 lines of LiveView
  • 8 standard CRUD controller actions (mostly around logins)
  • 130 lines of elixir for highlight processing

Now supporting PDFs (powered by PDF.js)!

Demo video

Also added

  • Basic comment system
  • Vastly improved tag/navigation UX (thanks alpine.js)
  • Text display options (currently line number and monospacing)

Still working on algorithms around annotation suggestions/links but that will be my central focus going forward.

Check it out and let me know what you think! I know annotating texts will be a severely niche interest among people on this forum, but it does add some things google docs doesn’t offer, like exporting comments, that might be useful for less academic uses.

1 Like

Hi, you dont consider open sourcing this genius.com variant for us alchemists to collaborate on?

What if we took it to the ethereum blockchain?

1 Like

Just finished support for adding collaborators. This will allow multiple people to add annotations to a single source. If you have enabled the sharing link, anyone viewing the document can add themselves as a collaborator simply by creating an annotation (this requires them to have an account).

I also moved the site to a new TLD: holzwege.app

@Telaia369 I have no plans to open source the entire app at this time, but if you DM me with more info on which aspects are of interest of you, I would consider extracting “general purpose” components.