Launching Papyrs - a new open source, privacy-first, blogging platform on the IC

Hey :wave:

I am launching Papyrs - a new open source, privacy-first, blogging platform that lives 100% on the IC.

It’s my personal project, I use it for my blogging purpose but hope you will like and use it too :crossed_fingers:. For developers, it can be interesting because it includes the Monaco editor to edit the code you showcase in your articles and Excalidraw to sketch diagrams.

Looking forward to your feedback.


I :heart: the style! Congrats!


I absolutely love your design! This is probably my favorite UI I’ve seen thus far on the IC.

P.S. - can we make the NNS like this? :rofl:

1 Like

It was important to me to develop a distinctive design pattern for Papyrs. Therefore your feedback really makes my day. Thanks :pray:

Haha :rofl:. Now that we have rewritten the NNS-dapp frontend in svelte (post) we definitely have the foundation and the will to improve the UI and UX. Maybe not towards such an opinionated design as the one of my personal app, but something comprehensive that look nice both on mobile and on desktop. It is definitely our goal. We might even propose some sneak peak of new UX component and a new “light skin” theme within next few days, stay tuned :wink:.

1 Like

Congrats David! Looks awesome!

for anyone interested, I believe the style is called “neo-brutalism”

Thanks, glad to hear that!

It can definitely be a style called “neo-brutalism” :+1: (also really like the name)


Looks really cool. Definitely gonna use that for the content I write from now :relieved:

Why did you end up developing your own markup solution instead of just using Markdown? You even created a Chrome plugin for the conversion between them. Looks like a lot of extra work.

Could you please extend the II session. Looks like it resets after just 10 minutes or so.


Excellent point :+1:. I do not set any particular maxTimeToLive option to the auth-client at the moment. What value do you suggest?

To be honest, sometimes I also ask myself. I like markdown and creating my own rich text editor library (StyloJS) was tasky and at the end of the day, I end up fixing more issue in that lib than in Papyrs itself :tired_face:.

I did not develop my own markup though, the content is saved in HTML which out of the box opens more possibilities than markdown - i.e. I can extend HTML with Web Components and create rich text elements that can be embedded by the user. So basically in the canister I can save HTML, fetch the content, append it to the DOM and the browser does the rest.

Being said, I could have done this with Markdown too, I could have had extended it and create some sort of parser that render from and to the DOM but with HTML I notably spare the “from”.

I would set some reasonable value (like 1 or 2 hours) as default and then let the user decide what level of security does they need.

Now I see. Thanks!

1 Like

Let’s being with 1 hour if you don’t mind, adding the user custom settings is great idea but that would need a bit more work :sweat_smile:. Let’s iterate from there.

PR ready but not yet deployed. Will do in a couple of days because I had some weird caching issue in the browser recently. Btw. after I’ll deploy, if you would ever land on a weird error message in the browser console (Unexpected token '<'), please let me know? It would mean it would not yet be fully resolved as I expect. Also note, hitting “Refresh” in the browser solves it.

Again thanks for the feedback, excellent idea :+1:

1 Like

Trying to write on Android (Samsung Note 20), the keyboard shows for a fraction of a second and then hides.

1 Like

Absolutely, thanks for the feedback. That’s an issue in my rich text editor Stylo. Probably two event listeners that cancel each other. Will debug and fix it.

Great. I also noticed scrolling on your article sometimes wouldn’t scroll on my phone. Happens after 3 or so scrolls.

Actually, the issue happens on Note particularly and not all mobile devices. I consider devices as mobile if they are touch screen and have no mouse pointer. The Note having a stylus, it did not pass this test - i.e. it has mouse pointer for the stylus. I will extend it to test in addition os (android or ios = mobile too). PR is on the way.

Mmmh I tried on (real devices) MacOS, iOS and Android (oneplus) but couldn’t reproduce it. If you ever have a bit of spare time to debug it, that would be welcomed.

1 Like

Your site looks and feels great. I absolutely love it :clap:

1 Like

Amazing project @peterparker!! That’s the kind of dapp I’m waiting for on IC.

Just tried publishing a small blog post, and it took like 30+ secs to upload. Wonder if that could be optimized?

P.s. would love to make a small donation if there’s an accepting address.

1 Like

Sure,in the future that duration can be improved. It particularly takes time right now because I do most of the work on the client side, if I would defer some work it would speed up the process. Also the first publish is a bit slower than followings as it uploads more files to the IC.

Thanks, happy to hear you like Papyrs and also for spontaneously suggestion of a donation :pray:. At this time it’s all good. Like I wrote in the article, I got small hopes in the future that if there would be a community maybe someday I would be able to generate some revenue with it but, it’s for the future too :wink:

The design reminds me of Cory Doctorow’s blog,

1 Like

Hey there @peterparker
I had to write some articles about my rust library, so I decided to give a try. I was writing them for quite some time, and during this time I was taking notes each time I encounter a bug, an error or any other kind of unexpected or unpleasant behavior. Here are they:

  • sometimes, the title of a document becomes small as normal text; it happened when I:

    • created a document with a title and some text
    • closed the dapp and waited for a couple of days to pass
    • reopened the dapp and tried to edit the title by completely removing it first
  • sometimes the placeholder text for the title and the content are not going away, when you start typing;

  • when it logs you out because of expired II session (IMO, one-hour-lasting session is still not enough, I can spend like a full day working on a single document), it shows you a blank new document instead of the one that you were working on; please fix it, I don’t want to die from heart attack; after that this blank document gets saved “as a draft”, and you have to manually remove it, which is pretty strange, since it’s a blank page, it shouldn’t be saved at all; also, after that it starts it’s pretty long “syncing with cloud” thing, which is a bit annoying when it halts you in a middle of a thought;

  • it would be cool if you could add some kind of highlighted text primitive like this (it’s done with ` in Markdown); I had to imitate this with coloring, which is quite a disaster for technically intense texts;

  • code editor is a little bit buggy - if you put an ampersand (&) into it, save and then try to edit the entry, it will replace the ampersand with &amp; which is incorrect; and, actually, it doesn’t always highlight the syntax as it should - for example, JSON highlighting wasn’t working for me;

  • it would also be great, if you could automatically scroll a page down a little bit, when the cursor is at the last line of the screen;

  • sometimes, when you delete a paragraph, an error message appears “Paragraph is not defined”; it is a minor issue, I’m not sure if it just like an FYI or if there is a real error somewhere;

  • sometimes it is impossible to switch back to normal text, once you’ve started a paragraph as a header - the only way is to start a new paragraph and remove the previous one;

  • it is impossible to add dashes to a title, despite the note that says otherwise;

  • I wasn’t able to publish an article with some canonical URL (but, maybe I just don’t understand what does it mean);

  • I’m still not quite sure how the “publish” button works; should I publish each time I make an update to the text or it will be handled automatically;

The overall experience of working with is positive. I would prefer working with Markdown, I would prefer longer II sessions and more transparent publishing experience, but despite that this web-service is a pretty solid piece of software. Good job!

Hope my feedback will help you with making it even more cool :slight_smile:

My articles are here, if that would help:


Wow @senior.joinu :pray:

I think it is correct behavior. I you completely remove the title, remove all content of the post and add again something, the default will be a paragraph therefore small/normal text. Does that makes sense?

is it still happening recently? I had some issues in my custom rich text editor (repo) but I was hoping that I had solved them with some recent fixes :thinking:.

When the session expires, it shows you a blank document because it cleans the local information for security reason. My idea is that if someone is logged out automatically - because the session expires - there should be no remaining data in the browser. e.g. user might edit document on a shared computer in a library and forgot to sign out.

Being said, I am definitely open to discussion. We can maybe make a difference between “user explicitly sign out” or “session expire”, if you think it should not clean the data and just sign out and display a warning. That would be your expectation?

About duration, it 1h is too short, really not against pushing it longer. What would be your suggestion?

update: just experienced the 1h timeout, disliked it too. should we push to 8h or 12h? enough to make a day?

already supported :wink:. type/hit backtick then whitespace to start or exist a highlight

for bold it’s ** and for italic it’s _ and then whitespace

actually noticed the issue two days ago too in my last article :wink:. opened an issue :point_right: editing existing code with < and > · Issue #27 · papyrs/papyrs · GitHub

solved :white_check_mark: (there was a typo in a replace string function :man_facepalming:)

not sure what you mean here, to me the scroll behaves as I expect

actually it isn’t that a minor issue. can you reproduce it? that would help a lot!

even if the header - paragraph is empty?

you cannot indeed transform a paragraph that contains content but if empty, it should be possible to transform it

you mean the title when you publish a blog post right?

I often use canonical so I’m a bit surprised. What do you mean with “wasn’t able to publish”? there was an error? what canonical url did you use?

If you use a canonical url, the expected result is that the article that gets published has a <link rel="canonical" href="https://..."> element parsed in the <head /> so that crawlers does not index it but only the url provided as canonical - i.e. as original source of the post

Consider “publish” as a “deploy in production” button. At this time at least, it’s up to you to decide when you want to make changes public. It’s like developing a website locally and at some point deciding to deploy the changes to make these available on the web. Does that make sense?

Thanks a ton for the feedback!!! Looking forward to your answers if you got a bit more time.

You articles are also super neat, did you already share them elsewhere (Twitter etc.)? Happy to re-share them.