132 comments

[ 2.6 ms ] story [ 209 ms ] thread
Hey.Café is a social network built around communities called cafés. Has lots of formatting options on posts similar to Markdown. It's also really really fast.
Reddit?
Um, more like Twitter and FB had a baby and removed the ads and tracking.
...for now. It's a proprietary, centralised service, so there's pretty much _nothing_ stopping it from doing that in the future ("money left on the table" and all that).

I think for now, the fediverse seems to be the most sustainable alternative to modern social media.

Not entirely. The entire front end is a single JS block, so anyone can re use, but I also am making the entire API endpoints I made open and just working on the documentation now.
Yes I built it, and I hope people like it. It still has a lot of stuff on the roadmap and supports thins like website embeds that I use on my personal site https://anthonys.space and a lot of formatting options for posts, including Pro users able to post really long content.

Still lots to do and lots on the roadmap but suggestions and feedback are helpful.

Oh another key thing is the site is built using a single Javascript block, no trackers and no ads anywhere. Clean as it can be.

Feedback would be to share the roadmap and code :)

I’m trying to figure out what makes this special other than some nice design aesthetic

I totally want to yes, the backend api's are all going to be public shortly. You can see some stuff we are working on and updates here: https://hey.cafe/c/hey and more in the conversation I made 4 days ago with some changes already made. https://hey.cafe/conversation/j8olwfmlbpmlloww4yh4bxfz9
The design IS good :)

But the network is fully centralized, right? Did you consider using a protocol and making something more like Movim, but with your nice design language?

Or is the problem you are trying to solve in a different domain? Like your main concern was that you wanted easily embeddable content?

Easy embeds, but making a no limit API that will be open for any public content.

Also encryption for anything not public.

I've had a theory that a lot of what's broken on the Internet today is a combination of a very large scale of communication and constant influx of new people.

Does weird things when most of the people you are talking to are strangers. I think humans brains are built for villages, for relatively stable relationships. Instead you see a stranger write something, you reply what you think, someone else replies to you, you reply to them. Whether you are agreeing or disagreeing, but there's not a lot of actual conversation, just... reactions. HN has a very nice tone, but I recognize like 3-4 names and couldn't tell you if the person I agree with today was the person I thought was an idiot yesterday.

I think for example the most successful communities on Reddit are either mega-obscure, so that there are very few newcomers, or very strictly moderated (e.g. /r/weightroom) in a way that maintains the culture. Everything else is is more or less a dumpster fire.

Dunno if you've thought anything along these lines.

This is my thought as well. How do you then design for small communities for the web is the hard part.
This resonates with me.

I think technology has vastly outpaced the biological capacity of humans to interact effectively.

We're built for small communities. Tribes, clans, villages, whatever you want to call it. We've technologically advanced to the point where we can interact with the majority of humans on the planet in near real time, but... most of those interactions are driven not by connection, but by just projecting our thoughts onto a symbol we create.

A little yes, the thing with stuff like Cafés that are the groups users can join, the person who creates it can also do moderation and setup a moderation team but everything must still follow the global rules.

This means a lot more users can moderate content besides just the main staff.

> Whether you are agreeing or disagreeing, but there's not a lot of actual conversation, just... reactions.

Could you elaborate on the distinction you’re making between genuine conversations and records of reaction?

Specifically, did you imply that tone and recognition of the other party are factors?

Thats hard, and I got some feedback that I know how to make a few changes around that. I plan to make the picking of a cafe the second option and ability to move content between them so it's not a panic if posting in the correct location.

Also the inputs to create a new conversation on your account from the main feed view at the top to be more inline with what users expect and not a button to open.

It's very different to talk to someone you have a rapport with from talking to a perfect stranger, and I definitely think the recognition matters. You get these weird interactions all the time on the Internet: If I ask someone a question about their reasoning, someone else may very well respond with what they think.

In a lot of Internet conversation it's like you are correcting people who you disagree with and then expounding what you think is true. That isn't really what conversation is like, I don't think.

In real life, I'm focused on the thing they said that I agree with, and replying to that. On the internet, I'm often replying to the part I disagree with. On the internet, I'll correct a factual mistake immediately. In real life, I try to ignore it if possible so as not to disturb the flow of conversation. In real life, if I'm talking to somebody at all, I'm probably at least open to friendship. On the internet, I usually don't care.
> You get these weird interactions all the time on the Internet: If I ask someone a question about their reasoning, someone else may very well respond with what they think.

Is the question about the other party’s reasoning as in thought process or reasoning as in the argument they’ve written down? I think of arguments as public processes/entities, in that it doesn’t matter who/where critique comes from. But human beings have particular social psychology so there may be ‘effects’ from drive by critique.

> In a lot of Internet conversation it's like you are correcting people who you disagree with and then expounding what you think is true.

Often when I read something I don’t agree with, my mind immediately creates a caricature of the author and I get the impulse to crush/fix them.

Outside of small scale relationships you need vast stores of knowledge that your brain can capture. That's one of the reason the internet and social network exploded because we always seek out to learn something new and internet and social network made it accessible.
I honestly do wonder how well this exobrain concept works. It's great at convincing you that you have knowledge available, but is it the same as actually knowing it yourself?

One of the great benefits of knowledge is the ability to make connections between things you know. If I for example know the Latin words "manus" (hand) and "facere" (to make), and I know the English words "manual", "factory", and "manufacture", I'll probably make a bunch of connections there. I probably won't by merit of having access to a Latin dictionary alone.

If half the things you know are on the level of awareness of an unread Wikipedia article, I don't think you quite get the same benefit.

This is why despite being a huge user of forums in decades past, I've essentially stopped posting anything on the internet. It's not just about the quality of discussion going down, it's just this... emptiness. In the real world, when you are talking to someone, you are exchanging ideas but also getting to know them as a person. That's a lot harder to find these days.

Then combine that with the relentless push to get everyone identifying themselves with a single identity tied to their real name... And the rampant abuse of people who do so... And it's just like... Why?

Making a real human connection requires some level of vulnerability. Someone can't get to know you if you completely hide who you are. But the level of doxxing, and harassing, and trading in personal data to spam you with ads for crap you aren't evenly slightly interested in, that's the price you pay now for being open. And in return, you get to have "discussions" with drive-by commenters who you'll never hear from again and may just be deliberately antagonizing you. Or they may just be bots trying to stir up rage.

Obscure communities solve some of these problems, but they are still open to drive-by trolls and privacy violators. There is simply no space on the public internet where you can find a real community and make real friends without a real risk of being abused by random people outside of that community, using your posts to target you for advertising or harassment.

And this doesn't even get into "likes" and this insane idea of being literally judged for everything you contribute to the community. This isn't how human community works at all. So I've all but opted out of using the internet for anything but consumption.

I wonder if (small?) Discords were/are an answer to this scale/anonymity.
>In the real world, when you are talking to someone, you are exchanging ideas but also getting to know them as a person.

I've seen very personal exchanges take place on Stack Overflow. A user new to everything, a veteran with some spare time - they exchange comments and learn about each other. In some cases they exchange contact information- I'm not privy to what happens after that

Mind you, almost ALL of SO is devoid of that connection - but it still happens.

Wow, I feel this same way and have never had it articulated so well. I have saved your quote for future use when trying to explain this to people. Thank you!
> Whether you are agreeing or disagreeing, but there's not a lot of actual conversation, just... reactions.

It sort of reminds me of when I was in kindergarten, and every child in the class wanted to put in their 2-cents, regardless of how relevant it was to the conversation.

On the forums that I prefer, people tend to stay on topic, and avoid asinine talk. Reddit is full of kindergartners.

I wonder if there is a community for scheduled group video/voice chat rooms about an interesting topic. You could show up to just listen, or participate. Is that how clubhouse is supposed to work? (I couldn't figure it out from their website copy)

I gave you money because I adore this concept. Don't rush the features too much. Already had one fun conversation (with you?) about Star Trek.

Oh, and if you need infrastructure advice (I don't think you do, at least not yet), I would be happy to help.

Oh yes thanks! I also due to your café found out I need to make a change when still set to private so the admin gets an alert to approve members.
I only wish I could see some of that website without JavaScript.

Is it indexable? Can I find public posts using search engine such as DDG?

Sorry I missed this, yes google does index it and I have a JSON API that I am making more public, so in reality a text based version of the site can be made, heck maybe a old school terminal interface fairly easily.
Hey! I was just curious about two things:

- what's the privacy policy?

- how can one request data / delete their account?

congrats on your launch!

Adding an account delete feature just not done yet, more info can be found on https://wave.hey.cafe as the kinda policy area and docs.
I have no tracking, no analytics, what you see on the site is what's stored in the Database.

I can't stand sites that are tracker heavy so I chose to never add that type of stuff.

Please make the links real links so I can ctrl+click/middle click to open them in a new tab
Some are, some are internal as the application is a one page script.
I will be working on that. :)
(comment deleted)
Does not work without JS :(
Indeed. All the forums I've used don't need JS to function.
That is the one down side I built the entire thing as one JS block, so without JS there is absolutely nothing, but it also includes no external JS or anything, it's just inline and it's got no tracking or analytics at all on the client end.
This makes it much less like a traditional forum. That changes things, as I now would have to trust the JS, to run it in my browser on my machine. The parent comment merely states a fact and expresses their disappointment. That is not something to downvote. Maybe the JS crown is a bit too allergic here? It is a perfectly valid concern and would be a reason for me as well to not use it, unless I took a lot of time to check the JS source. Even then, the JS might change over time. I would have to read all of it again and again to really be sure nothing nefarious is going on.
This is the reason all modern systems sandbox JS. The amount of people that run with JS off is a tiny tiny fraction of a percent on the web.
That sandbox still leaves a lot of things accessible inside the browser though. APIs, which the site does not even need, but are provided by default by the browser. If I had a browser, which asked me for every new API (for example: "making requests to a server, first party, third party) access and the JS gave me a sound reasoning, of why this needs to happen, then perhaps I could trust it more. We have that partially, for things like location access, camera and microphone, but those are only very few things. I would also like to be able to specify, whether JS for one website (not only in general, but also that) is able to access my fonts list and stuff like that.

If we had this kind of control, then we could create generic profiles and go into the direction of Tor browser in terms of disappearing in the crowd when it comes to fingerprinting. Then we could share these profiles with other less tech-savy users to protect them as well.

Good luck getting any normal user not using JS, but also "for things like location access, camera and microphone" all listed stuff asks for permission before use by the OS/browser, or at least it does on any modern browser.
I even said, that we already have that sort of control for camera and microphone. You present those things in a way, as if you think, that I did not mention them as already existing. As if you have to lecture me about them existing in a modern browser. I did never claim that they did not for camera or microphone. Your comment feels agressive to me and seems to hint, that you did not parse my previous comment correctly.

What the "normal user" does, is not really my main concern. There could be a switch to "expert mode" or whatever. The "normal user" doesn't even know, that a website consists of HTML, maybe CSS, and maybe JS. They are so far behind in basic knowledge, that I think it would be hopeless to demand such decisions from them. They just don't know how the Internet works. They are merely users.

> There could be a switch to "expert mode" or whatever.

That would require building 2 completely different apps that work completely differently.

There is no CSS, no resources that are loaded in, all the structure and style and everything is generated as it's needed so that the server does not need to parse and create pages that end up using and spending a lot of resources when under load. This way the server only gives the JSON data out and the website parses and generates everything.

Can't do that without Javascript, just like an Android or iOS app can't work without using a front end language to generate the view that you interact with.

Pssh, who wants forum content of all things to be accessible with search engines? Get with the times, man! If it's not rendered client-side and completely inaccessible in contexts outside of an entire browser stack, nobody will take it seriously in 2022! I mean, we might as well go back to cuneiform and clay tablets, and other things with permanence!
It's fully accessible by search engines and Google has rendered JS pages for almost a decade now. Pages are being indexed just fine by search engines as long as they act like a client and modern ones do.
Does it integrate with existing Internet Standards for social networks like ActvityPub or XMPP?
Oh thats a good idea never though of that. It's got a really simple json backend api where you can request users and stuff, and feeds will follow shortly, it's all built just need documentation.

https://endpoint.hey.cafe/api/conversation_info?query=utdtls...

I didn't check if you implemented it but making sure Atom is in the mix for good support in RSS readers would be a fantastic add.
I am adding RSS feeds shortly it's in my todo, I can already read them and will provide RSS and JSON outputs for feeds and user info and more.
Pro tip: use RSS for podcasts because almost nothing in that space supports Atom, but shun RSS and use Atom in all other cases, because it’s the strictly superior format (RSS lacks a couple of features, uses terrible date formats, and is encoding-ambiguous in a few places like title and body that causes clients to guess whether you’re writing plain text or HTML, and occasionally guess wrong) and everything supports both.
The nice thing is I can add many formats, just rewrite the JSON in a version thats better for the use case.
Have you considered showing the add comment UI for non-logged in users, and then sending them to the register flow if they comment?
Good idea, I did add a comment to the top of the page that will take them back but I think adding a dummy comment and new conversation field is a good idea.
Some suggestions: add an index or search engine to find existing cafes if there isn't one already. Also, provide a more terse way of navigating posts that isn't basically a single item fill the whole screen. (Something I like about HN and old reddit is that it's easy to navigate a lot of content because you can fit a lot of things on your screen at once.)
Yes, adding to my list a compact mode, and a search is on the explore area, but I plan to move that to the header with drop down feedback as you type.
Love the ideas from this company, not a fan of the UI of Hey or Hey.Cafe. It is verbatim Twitter, rounded corners, giant fonts, lots of negative space, exactly opposite of what I gravitate towards. It is...I don't know how to explain it, garish and flimsy. I understand this is a problem with me and I don't mean to dilute the effort. I am very much impressed by the concepts and ideas from Hey. Kudos.
Thanks. I know it's not for everyone, and the differences are huge once using especially the groups and longer form content and uploads. But it's not a design everyone will love.

Thats why I am making a open API that will be free to use with no limits so anyone can do anything they want as far as clients go.

(comment deleted)
Well done - I’m working on something broadly similar for similar reasons. How do eventually plan to monetize to keep it ad-free?
You can get Pro and that gives larger quality images and the ability to upload files like videos. It also gives larger content, but over time I will allow others to make longer content also. Just need to get some real usage under the belt to see what kind of resources it uses up.

https://wave.hey.cafe/pro

Can I run my own node? If not, then I don't care (although a forum interface would I think be vastly superior to the usual news feed interface).

Edit: this is not meant to be dismissive, it's just that the main problem with social media right now is centralization. I'm simply not interested in jumping from one centralized option to another.

It may have been somewhat curt but the essence stands: if "social" networking is to have a future the controls should be in the hands of the individual contributors, not in those of a few site owners. Even if your ideas align with current site owners this may change in the future, either because of an ownership change or because you change your mind. Even if you disagree with the people currently being censored and "de-platformed" you should realise that the same fate will await those who you agree with when the zeitgeist changes - as it has been doing forever and will keep on doing whether you like it or not.

So, to the author a repeated question: will it be possible to self-host this system? Does it support federation or are there plans to do so in the near future? The time is ripe for a robust distributed discussion platform to compete with the onslaught of "alternative" centralised social networking services which each seem to have their few minutes of (in)fame but mostly end up in the same situation as the entrenched actors they were meant to replace.

Is centralization really the problem, though?

I feel like in a lot of ways, something like Mastodon isn't much better than Twitter, should it somehow take over. Sure you have a lot of servers, but they all run the same software and approach the problem in the same way. It's a decentralized monoculture replacing a centralized one.

How many servers they are run on really doesn't matter. What we need is multiple different paradigms. This, even if it's just one guy running one server, is a step in the right direction.

What I'd most of all like is something that lets the visitors own their own posts while still allowing some form of communication. Dunno, like something combining RSS and a forum.

I plan on making things extremely open like the API with no limits at all. The front end is just one JS block of code so really easy to modify and make a custom version. I like the idea of running your own instances but I find that never works well on the user side for consistency, but offering an open API for anyone to make a client they like is where I want to see it go.
> Sure you have a lot of servers, but they all run the same software and approach the problem in the same way.

The 'servers' are simply endpoints within a federated network. You can have a frontend "app" interoperate with those endpoints while exposing a different UX, perhaps one that's more old-school BBS- or forum-like.

Or you can have endpoints that expose a slightly diverging logic, perhaps building on other web standards (such as WebMention) for their analogs of the BBS-like "reply", "topic", "thread" etc. But since these are all part of one Fediverse, interoperability across endpoints will be preserved.

> What I'd most of all like is something that lets the visitors own their own posts while still allowing some form of communication.

This can happen if the visitor owns a server and makes their posts available from there via Fediverse standards. The posts can then either be federated directly (if allowed), or "mentioned" (like a trackback) on other servers.

ActivityStreams is the "RSS" like standard in the Fediverse, which can be implemented entirely statically, with no "active" server-side logic whatsoever. ActivityPub is the active "push" part of the standard, which enables "post" workflows from users; the server itself can also use ActivityPub to "push" its content to a federated endpoint in the network, which removes any propagation delays introduced by polling.

I guess I don't really see the point of the Fediverse. Like wouldn't it be a lot easier if you could just host your stuff on your server? It just seems so convoluted, and right now the only on-ramps are incredibly bloated.
If you host stuff on your server following Fediverse standards you're a de-facto part of the Fediverse. A user can then input your server in a generic "social" Fediverse app and interact with it as if with a mainstream social network. Federation across servers is just the next step, and there can be any number of independent federated "networks" - this concern lies outside the Fediverse proper.
Why go through a fediverse app though?
(comment deleted)
Firefox user. If I hit the Register button at the top of the home page, then it back, the register/login buttons disappear and I can't get them back without refreshing the page.
Oh, never seen that one before, I will see what I can find and fix that.
Congrats! Love to see people bringing new ideas to the chat/forum space.

Can you talk about the FE/BE architecture. I know you said it's a single block of JS... all hand-rolled? What's the server and database, etc?

Sure. Database is really standard, media is stored on B2 and the backend is made easy so I can scale up the servers as I need really quickly. I am going to post some images over on Hey.Café of the usage here, but I am seeing only a few percent points of usage with 300k+ requests at the moment.

The JS is separated on my end to files for editing and on push to GitLab it compresses it down on the server that hosts the frontend.

Each backend endpoint is a $5 server on vultr, the front end one is also just a $5 server and the database us a $10 one but it's seeing little load.

What’s the plan for supporting this financially? If it grows at some point it will be too expensive to be a side project for someone to pay for. But usually when the ads come in but the site mentions no ads.

So will there be paid memberships? Sponsorships of some sort?

You can get what's called Pro. Thats what lets you setup communities and groups and allows for larger content and higher quality media. This is my second large social network and the first was online for almost 10 years. It's extremely lightweight as all the generation and everything is all client side so the server just stores DB data and provides JSON payloads.
At that point some form of analytics will be necessary. I appreciate the ethos behind this nonetheless.
Server side and the little bit I need I can get from the DNS end like country and stuff. I don't plan on adding anything user side that slows things down or makes it a mess.
I will need be adding anything like analytics user side, or tracking of any kind. I want the services to be ad free for everyone and larger features for Pros. I hope this can make it a project that can run into the future. It just had over 200K request in a few minutes and the server load is under 3% for under $50 a month and it is easy to scale.
Nice work, it's lightweight and fast to load. A few notes after using it for a bit...

1. There's far too much white space and unnecessarily large headers. Reading content in cafes seems to be the heart of the site, however, this is what I see when opening a cafe on my 1920x1080 monitor - https://i.imgur.com/1j0exRM.png. There's literally not a single piece of content for a returning user to read without scrolling.

2. Something weird is happening with post times. I saw a comment that was posted -666 seconds ago, which snapped to 3 minutes ago after refreshing.

3. The background color is too light and it blends with the discussions, making it difficult to visually separate them. Here is the existing background - https://i.imgur.com/wVr0RYs.png and a darker one to add more structure - https://i.imgur.com/U5sekNI.png.

4. Overall I find the content a little hard to read. I prefer sites with discussion titles (Reddit/HN/forums) as they help to summarize an entire post or image in a few words. Without them I need to spend too much time reading each discussion trying to parse what it's about and if it's relevant to my interests.

Thanks this all helps a lot. I am adding it to my feedback document and I will make some changes. The time thing sounds like the JS failed to connect for a second to the backend endpoint, thats what tells the site what the timestamp is now for it to calculate times.
First, nice job! Looking through it now. Also, maybe this is just me, but I'd drop the "Followers" "Following" language. It wreaks of "big" social media and all that comes with it. If I had to choose, I'd go with "Connections" or something intentionally banal. But, again, may be just me. I just hate social media and all its "ways."
That I like! I agree completely! Added to my notes thanks.
This is a lot harder to name than it might first appear.

Also, I apologize for being pedantic, but... "reeks," not wreaks.

I am ashamed (Masters in writing)
Hey, I still f** up basic things in just being a human being, no need to feel bad. Just thought I'd point it out in case you were unaware, not because I thought you were incapable of spelling it Right.
I love the feedback, I have so many improvements to make and changes in my todo list. This is the kinda help I was really looking for and it will make things better.

Thanks everyone!

Bro stop spamming your stuff on HN and figure out how to use fucking padding. All of our posts are slammed left and it looks like there's CSS missing.
What are the pros and cons of say the Pokemon Cafe compared to a Pokemon reddit or a Pokemon discord or a Pokemon fanwiki? Is there a certain usecase where it shines?
Not entirely but the rendering of media and full conversations. I plan on adding chat channels to Cafés so you can have chat rooms within them also.

Each café is made by someone and they can have moderators. Things can be private or features locked down from public or even other members, so for example our own updates one only allows comments and reactions from members except admins who can post the updates.

What are the privacy settings? I don't want people to know my email or even my name (that is still an alias but still)
Don't need to use your real name, and the email is ONLY shown in settings and on account info API requests IF it's your account, nobody but you will ever see it.
Some technical review from impressions.

You’re loading about 430KB of JavaScript. That’s quite a lot to parse and execute (yeah, less than many sites, but judging by the functionality it could probably be under 20KB for people just reading the site—code splitting, and all that). Gzipped, it’s over 70KB. Feeding it through Terser to minify the code (which achieves much more than just joining the lines), you can trivially cut it down to about 370KB with no breakage, and treating it as a module (so that it can mangle top-level names) reduces it to 230KB/50KB, which would execute distinctly faster, except for the minor matter that everything will break because event handlers are routinely expressed as strings, including function names (and that’s probably the biggest reason why you should separate event handlers from markup).

You’re reimplementing various things that the browser provides, badly. A few examples:

• <a href='javascript:…'>. This is always bad. Either use a link with a meaningful non-JavaScript href that will work with things like Ctrl+click/open in new tab and possibly add a click handler that will event.preventDefault() and do something different for the current tab (though for general navigation in SPAs it’s normally easier to attach just one “in-app link” interceptor on the document root), or use a button with a click handler.

• <div onclick>/<span onclick>. This is almost always bad (use an element with click semantics, such as a link or a button), and always bad if the element is not focusable by keyboard (e.g. by the tabindex="0" attribute). When it’s <span onclick="javascript:appSwitchPage('/conversation/xjbjpgpqrpvutlf8wcgz1gt50')">, well, that’s even worse than <a href="javascript:appSwitchPage(…)">. Your approach there should be closer to <a href="/conversation/xjbjpgpqrpvutlf8wcgz1gt50" onclick="event.preventDefault();appSwitchPage(this.href)">, though again I say one root link interceptor is generally a better approach.

• History management: you’ve implemented your own back button, a strange choice in general (why not use the browser’s like everyone else? For some sorts of apps, an up button that takes you to the parent in a hierarchy can make sense, but I can’t immediately think of any reasonable case for a back button), but your history management also just interacts badly with the browser’s own, with your back button adding a new history entry, and clobbering history when the native back button is used.

• Page loading: every time you load a page, you use your own loading spinner, and don’t cache various things that reasonably could be. This is a massive regression in experience from the traditional MPA/server-generated HTML approach, where you tend to stay where you are, with only a small indicator that things are happening, until it’s ready and changes over. The end result of all of this is that this site feels much slower to load than it should, and that every load is painful and very disrupting. I’m in Australia, by the way, so add about 150ms on to whatever you may be used to—though the responses seem to be slow enough that latency doesn’t dominate it.

Other issues:

• Relative time display looks to be anchored to when you loaded the page/app, not when you loaded a particular view/page. This leads to times being wildly wrong, including future times (“-1234 seconds ago”). The problem looks to be the way settings_timestamp is used.

• The style of the code leads me to be concerned about injection attacks; in most places, the client is mixing template markup and responses from the server as raw HTML, thereby trusting the server to protect against malicious markup. I tried creating an account with values like <script>alert("xss")</script> for name/alias/bio/whatever, name netted me a crash on ...

Thanks for the feedback.

The payload includes icon's and SVG data that I am slowly removing to lower it's size. The entire app is all in the one block.

History management the back button was added on request and based on mobile usage, it should be fine with the default browser button but I will take a look.

The links I totally get, as everything is generated as it's needed that can be changed over and I will take a look at that.

The time is based on the servers time as clients can be all over the place and I am not tracking where users are and timezones, I have never seen times jump all over the place so I will take a look as the timestamp is provided in the same request as the data so it should be updated as the content is loaded.

The inputs are sanitized and rendered as HTML characters, it just appears to be a bug with the render back as regular characters on edit so that users don't see the HTML characters in the text input, but that would be only on the user who made the content that it would do anything, but I will add rules to remove that type of tag server side also. For example what you gave turns into.

&#60;script&#62;alert(1);&#60;/script&#62;

It just turns back to normal characters when you bring it up to edit the input as the one who set it.

I will use all this and make some changes, the links where not on mind mostly to the expectation it would mostly be used in an app capacity.

If it works like a forum in the classic sense, why can't I at least get some basic content with JS disabled?
presumably that places a greater burden on the server?
I'd imagine not - a javascript frontend is still hitting an API, after all. A dynamically generated, static frontend (eg, HTML and some CSS) is something that can be trivially cached, too.
Assuming it's static. If there is any post hiding, or filtering based on filters/search etc that might not be cached.
The backend load is almost nothing, everything is done client side for rendering, on the fly generation of the CSS and more. There is no CSS in the document, it's all rendered as it is needed and modified as it's needed. This also allows for colours based on percentages and OS set colours or modes like light and dark without having both loaded in the page.

It also means rich embeds and more like videos, tweets, articles and formatting.