ShareYourCloning is a web application to generate molecular cloning strategies in json format, and share them with others. It is the first brick in the construction of Genestorian, a web application to manage collections of plasmids, strains and cell lines.
You can find a demo video of the application at https://www.youtube.com/watch?v=n0hedzvpW88
If you just want to try the application, the easiest way is to go to the hosted version at: https://shareyourcloning.org/.
If you want to quickly set up a local instance of the application using docker, you can clone this repository, and from the root directory call:
# see docker-compose.yml
docker-compose up
The application should be running at http://localhost:8000.
This uses the provided docker-compose.yaml
and config.json
files in this repository.
You can use the image manulera/shareyourcloning, and use docker-compose.yaml
as a starting point. The important information to know is that:
docker-compose.yaml
file.docker pull manulera/shareyourcloning
docker run -p 8000:8000 manulera/shareyourcloning
New codespace
Repository
select manulera/ShareYourCloning
Create codespace
docker-compose up
Open in Browser
to navigate to your own version of the ShareYourCloning appIf you want to run a dev server locally, or run the site without using docker, you can see how to set up the backend and frontend in their respective repositories:
The code of the backend is here: https://github.com/manulera/ShareYourCloning_backend
The backend is a web API built with FastAPI. For information on what it does, and how to install it and what it does see this.
The code of the frontend is here: https://github.com/manulera/ShareYourCloning_frontend
The frontend application is built with react, and it is the "family tree builder" that you will see in your browser. For more info on what it does and how to install it see this
Recombinant DNA technology is used in a variety of research and industry fields to generate new DNA molecules by combining fragments of existing ones. This means that every molecule in a laboratory collection was created by "cutting and pasting" the sequences of existing molecules.
The aim of this application is to provide a web interface to document the generation of new DNA molecules from existing ones, and to export this information to share it with others. You can imagine it as a family tree builder, where there are two kinds of entities:
entities
.sources
, which are experimental steps that take 0 or more entities
as an input, and generate a single output. There can be two kinds of sources
:
Sources
without a parent entity
: They represent the source of a DNA molecule received externally (e.g., a plasmid received from a collaborator or from Addgene) or a naturally occurring sequence (e.g., given by an assembly identifier and genome coordinates).Sources
representing cloning steps combining existing entities
to generate new entities
: They contain references to the input and output DNA sequences, the method name (digestion, ligation, etc.) and the minimal information to do the cloning step in silico.See the figure below for an example of PCR-based gene targeting, in which a fragment of a plasmid is amplified by PCR with primers that contain 5' extensions homologous to target sequences in the genome. Cells are then transformed with the PCR fragment, which integrates into the genome through homologous recombination.
You can see how the workflow of cloning happens in the app in this video
The data model is built using the LinkML framework, and can be accessed in this repository.
For an example of the data model to represent an homologous recombination, you can see this json file.
From the json, you can see how wvery entity
(a sequence) comes from a source
, and every entity
can be the input of another source
. The application frontend provides an interface where the user can specify a source
(with or without inputs). This source
is sent to the backend in a POST
request, where the step encoded in the source
is executed, and the output entity
is returned and displayed in the frontend. When multiple outputs could come out of a source
(for example, a restriction enzyme digestion), the user can select which one of them is the desired output. Then the user can use the output entity
as an input for a new source
, and so on.
If you are interested in contributing, check the contribution guidelines.
Thanks to @ikayz for initial improvements to the frontend.
Thanks to @joyceykao for discussions on how to approach UI/UX and users interview.
Thanks to @maratumba for recommending the usage of FastAPI and for giving some general guidelines for the development of the backend and hosting.
Thanks to the whole Open Life Science organising team and community, which were incredibly helpful in setting the foundations of this project. Special thanks to @DimmestP, who mentored @manulera during the program OLS-4.