Hey HN, I'm Nathan, one of the seven-person team building Uselink, a tool that hosts the HTML docs Claude or Codex generate and lets you edit them and control who sees them after they're published.
It started as an internal tool. Our team write a lot of internal docs with AI now, like RFCs, architecture docs, reports. We had a client who didn't want to join our Notion workspace just to read our work, and our team never liked Google Docs because of the complex of formatting. So we started using AI to output the doc as a standalone HTML page and hosting that instead. People we shared with kept asking how they could do the same, so we turned it into a product.
The obvious question is why this isn't just TiinyHost or GitHub Pages or surge.sh. Those host a static file and stop there. The whole point of Uselink is that we keep working on the file after it's published:
> You can edit the published doc in place, without redeploying
> We wrote the HTML editor ourselves rather than using GrapesJS
> Readers can comment on a published doc with no account. Comments anchor to specific paragraphs. Anonymous identity is cookie-based, rate-limited per IP, and the owner can moderate or turn comments off per doc.
> Access control: password protection, expiry dates, and invite-only access by email.
> View tracking, so you can see who opened it.
On the implementation: the backend is Kotlin + Micronaut with Postgres. The part that took the most care was HTML sanitization. People paste raw Claude HTML artifacts, so we sanitize server-side before public render, stripping scripts, iframes, event handlers, and unsafe URLs while still allowing basic styling. We aren't sure if he sanitization rules are too tight or too loose here!!
Hey HN, I'm Nathan, one of the seven-person team building Uselink, a tool that hosts the HTML docs Claude or Codex generate and lets you edit them and control who sees them after they're published.
It started as an internal tool. Our team write a lot of internal docs with AI now, like RFCs, architecture docs, reports. We had a client who didn't want to join our Notion workspace just to read our work, and our team never liked Google Docs because of the complex of formatting. So we started using AI to output the doc as a standalone HTML page and hosting that instead. People we shared with kept asking how they could do the same, so we turned it into a product.
The obvious question is why this isn't just TiinyHost or GitHub Pages or surge.sh. Those host a static file and stop there. The whole point of Uselink is that we keep working on the file after it's published: > You can edit the published doc in place, without redeploying > We wrote the HTML editor ourselves rather than using GrapesJS > Readers can comment on a published doc with no account. Comments anchor to specific paragraphs. Anonymous identity is cookie-based, rate-limited per IP, and the owner can moderate or turn comments off per doc. > Access control: password protection, expiry dates, and invite-only access by email. > View tracking, so you can see who opened it.
On the implementation: the backend is Kotlin + Micronaut with Postgres. The part that took the most care was HTML sanitization. People paste raw Claude HTML artifacts, so we sanitize server-side before public render, stripping scripts, iframes, event handlers, and unsafe URLs while still allowing basic styling. We aren't sure if he sanitization rules are too tight or too loose here!!
You can see a published doc here without an account, and comment on it: https://uselink.app/@nathan/casecraft-k4b3h7j0
To create your own you need an account. The free tier covers 3 docs.
This is the first time I've posted here. Happy to answer anything!