4 ms·
Show HN: Collaborate on your YC Application with CRDT-powered forms
Hi HN,
Like many of you here, this is not my first time applying to YC. Each time, my co-founder and I would copy the YC application to google docs to collaborate on it, then we copy it back to submit. This got us thinking - why can't we just collaborate on the YC application in the YC application?
At one point I went down the CRDT rabbit hole and realized collaborative forms would be a great use of CRDTs, so I decided to build this out to an MVP.
If you're curious about CRDTs (Conflict-Free Replicated Data Types) and how they differ from OT (Operational transformation, which is what powers Google Docs) the tl;dr is that OT requires a central server to merge edits from different clients, whereas CRDTs are a data structure with commutative and idempotent operations, that can merge concurrent edits deterministically to always end up at the same final state.
This gives you a bunch of cool properties out of the box. Real time support as clients merge concurrent edits from other clients (usually via some central server). Offline support through deterministic merging of offline edits from multiple clients as they reconnect. P2P support because you can send the underlying operations independent of a server and clients can build up the state themselves.
If you want to dig deeper there are a bunch of CRDT articles posted to HN. Two that I enjoyed reading are [1] by josephg and [2] by jakelazaroff.
CRDTs are also showing up in more software. The Zed editor posted last month uses CRDTs [3] and they have a blog post explaining how it works [4]. Rumor has it that Apple Notes uses CRDTs under the hood.
The CRDT library I used is Yjs [5].
If you want to try out TogetherForm for your YC S24 application, this will generate a unique link with the YC application you can share with your co-founder [6].
I'd love to hear any feedback and suggestions you have. I'm also trying to figure out where to focus my time next:
a. Build out the no-code form builder.
b. Build out a React library (or similar) that allows you to make your forms collaborative by, say, using a special <TogetherForm> component.
One last thing: I know it's a lot to trust a random new product, so here's a Google Doc template for the S24 YC application that you can copy and keep for yourself [7].
[1] https://news.ycombinator.com/item?id=31049883 https://news.ycombinator.com/item?id=31049883
[2] https://news.ycombinator.com/item?id=37764581 https://news.ycombinator.com/item?id=37764581
[3] https://news.ycombinator.com/item?id=39119835 https://news.ycombinator.com/item?id=39119835
[4] https://zed.dev/blog/crdts https://zed.dev/blog/crdts
[5] https://github.com/yjs/yjs https://github.com/yjs/yjs
[6] https://togetherform.com/yc https://togetherform.com/yc
[7] https://docs.google.com/document/d/1zpU14-9zcYGvbxmtLKEbDcsln99Fd6tDfD4UVOGzQL8/edit https://docs.google.com/document/d/1zpU14-9zcYGvbxmtLKEbDcsl...
- davidrichards 3y agoAwesome idea!!
- projectprintlab 3y agoI lean toward the <TogetherForm/> component as I typically find myself going straight to building my own form. This would be especially nice to use with Remix given it is pretty much entirely form-based.
- jasonbw 3y agoNoted, thanks for the input. I think building out a component would also be the more fun work. Beyond the technical challenges there are some interesting UX problems around how you show the user that their form is collaborative, and how they can manage that access. TogetherForm is also written in Remix.
- projectprintlab 3y ago[dead]
- bzmrgonz 3y agoJ, make sure you program the sub url/crumbs to be customizeable for us end-users please. What I mean is this... I want to be able to send a link like this to someone for collaboration.. https://<useraccount>.togetherform.com/<projecname> https://<useraccount>.togetherform.com/<projecname>.
- jasonbw 3y agoit'll probably have to be even more precise than that since you might want to have multiple instance of the project that people can collaborate on. eg group of people A,B,C all collab on project P, but they should each get their distinct version of P, (P1, P2, P3, etc)
- fmyter 3y agoI used to do research on CRDTs and data language-level replication mechanisms, this has to be one of the coolest real-life applications I've seen so far :) Kudos