Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Collaborate on your YC Application with CRDT-powered forms (togetherform.com)
22 points by jasonbw 9 months ago | hide | past | favorite | 8 comments
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

[2] https://news.ycombinator.com/item?id=37764581

[3] https://news.ycombinator.com/item?id=39119835

[4] https://zed.dev/blog/crdts

[5] https://github.com/yjs/yjs

[6] https://togetherform.com/yc

[7] https://docs.google.com/document/d/1zpU14-9zcYGvbxmtLKEbDcsl...




I 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


thanks! there seems to be many use cases of making html forms / form fields collaborative. to name a few:

- forms where you fill in the form but need expert advice for some fields. I'm thinking medical or legal or similar. With a collaborative form you could share the state of your form with them and they can look it over. Current workaround is to do a screen share with them so they can look at what you have.

- gathering information from groups of people, eg rental applications, YC application

- multi-step forms where you have different people do each step and need to coordinate when someone finishes their portion and who should go next.

for data language-level replication it seems like over enough time CRDTs would add a decent overhead, but I assume you could use CRDTs just for replicating and once you knew replication was complete you could convert the CRDT data struct into the simple underlying type?


I 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.


Noted, 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.


J, 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>.


it'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)


Awesome idea!!


This is incredible! Nice work!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: