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>