Solvo - Spread the knowledge ============================ [TOC] Solvo aims to be a peer to peer application that helps people share their textbook solutions in a easy and visual appealing way. Forget about handwritten ugly scans and paywalls by sharing your knowledge with other people. Features -------- - [ ] Markdown - [ ] Latex Equations - [ ] Syntax Highlighting - [ ] Diagrams in SVG Protocols --------- - [ ] IPFS (?) - [ ] BitTorrent(?) - [ ] WebTorrent(?) Client App Mockups ------------------- - #### Solution Editor - Basic Markdown editor. The "+" FBA opens a dialog to insert Diagrams, Equations and others ![](https://vectr.com/14ngp/bDfqT28AN.svg?width=270&height=420#center) - #### Solution Preview - Rendered preview of solution. The FBA open the "Upload to the network" dialog. ![](https://vectr.com/14ngp/bDfqT28AN.svg?width=270&height=420&select=apvs670CV#center) - #### Upload to the network - Here the user must provide some metadata to its solution. Wouldn't it be nice a book searchbox? ![](https://vectr.com/14ngp/bDfqT28AN.svg?width=270&height=420&select=a8fAi2bsr#center) Network Behaviour - Torrent Version ----------------------------------- ### Get solutions - **Client**: Finds a nearby **Server** - **Client**: Sends a *solution* request - **Server**: *Replies with a list of best rated (seeds/peers) solutions.* - **Client**: *Receives the above list* - **User**: *Chooses one of the list* - **Client**: *Requests the choosen solution* - **Server**: *Sends back the torrent information* - **Client**: *Start torrenting the file* - **User**: [Surprised Pikachu Meme Here] ### Upload solutions - **Client**: *Finds a nearby **Server*** - **Client**: *Uploads a solution to some question* - **Server**: *Start seeding the solution and send to **Client** the Torrent info* - **Client**: *May also seed their sent solutions* - **Server**: *Tell other **Servers** to start torrenting this file too and update their databases* ### Syncing the network - **Server**: *Receive a request from another **Server** to start torrenting a file and update its database* - **[Stop Condition]:** If the **Server** already updated their databases to this particular solution hash, just ignore the request. - **[Recursion]:** Otherwise the **Server** must update its database and start torrenting the file, as well tell other servers to update and and torrent. Server API ------------- - ### GET /books/:isbn/questions/:question #### returns ```json ``` - ### POST /books/:isbn/solutions/:question/ Uploads a new solution to server. #### request parameters ``` author: Author's name. Ex: "<johndoe@someplace.org>" license: Solution's license. Ex: "Creative Commons 0" payload: Markdown text/plain data ``` - ### POST /diagrams/:category/:sub-category/:name/ Uploads a new diagram to server. #### request parameters ``` name: Diagram's name. category: Diagram's category. Ex: "Physics", "Mathematics" sub-category: Ex: "Electrodynamics", "Geometry" author: Author's name. Ex: "<johndoe@someplace.org>" payload: SVG image/svg+xml data ``` <style> img[src*='#center'] { display: block; margin: auto; } </style>