Giter VIP home page Giter VIP logo

freegenes-js's Introduction

FreeGenes UI

About FreeGenes

FreeGenes is an open registry for genetic parts and a framework for bioengineering.

You can browse the genetic parts on FreeGenes, order genetic part collections, and request that new genes be added to the registry.

Just like the iGEM Parts Registry, the FreeGenes registry makes it easier to engineer organisms through broader availability of genetic parts.

And just like Biobricks, the Freegenes framework simplifies genome building through careful design of the parts available so they can be readily combined with minimal effort.

FreeGenes is different from iGEM in that it further broadens access. While iGEM is difficult for academic institutions and companies to use because it does not include material transfer agreements, FreeGenes provides unambiguous sharing through the Open Material Transfer Agreement (OpenMTA). While iGEM keeps a centralized network that distributes DNA once a year, FreeGenes is designed to continuously distribute DNA globally through a decentralized network of distribution nodes.

FreeGenes is different from the Biobricks framework in its increased efficiency and versatility. While Biobricks only allows you to combine two genetic parts at a time, FreeGenes enables you to combine 10-25 different genetic parts in a single step.

About this Website

This website is an isomorphic web app built using Node.js, React, Express, and GraphQL.

The app's isomorphic nature means it can be rendered either on the client or on the server, which allows it to get the best of both worlds from server-side rendering (SSR) and single-page apps (SPAs). It is a snappy app with powerful frontend capabilities like SPAs and it has excellent performance and SEO characteristics like traditional SSRs.

The app's use of GraphQL means it can make use of extremely versatile querying capabilities, much more so than with REST APIs. This take a bit getting used to but once you get the hang of it you realize just how powerful GraphQL based querying is.

Development and distribution are facilitated by Webpack, Babel, and Browsersync.

Testing is done using Jest, Enzyme and Puppeteer, with continuous integration on CircleCI.

The main code for this website is located in the /src folder.

You can find a live version of this website at freegenes.herokuapp.com.

About the Team

FreeGenes is a project under the BioBricks Foundation.

Within the BioBricks Foundation, Keoni Gandall is the FreeGenes Project Lead, Linda Kahl is the OpenMTA Advisor and Brian Schulz is the BioBricks Foundation Managing Director.

The FreeGenes board is made up of three members: Drew Endy, David Singh Grewal, and Richard A. Johnson.

To learn more about the BioBricks Foundation team and board, visit the BioBricks Foundation website.

Contributing

There are several ways you can contribute to this project.

First, you can contribute to the website by submitting an issue. This can be a bug report, a feature request, or a suggestion for improvement.

Second, you can make an improvement yourself by picking an issue, posting a comment to tell others you are working on it, writing the code, and then submitting a pull request.

Third, you can contribute to the FreeGenes project itself by submitting genes for inclusion in the registry.

License

This project is licensed under the MPL 2.0 License.

freegenes-js's People

Contributors

dependabot[bot] avatar shea256 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

freegenes-js's Issues

/wells - update view with pagination & unique plate identifiers

The wells endpoint currently has 11,000 results.

The navigation and the resource usage could be improved with pagination.

In addition, the page treats plates as unique by "name" when that is not true. We need to use a unique identifier to refer to each plate instead of the name.

Build "edit item" pages & corresponding links

Pages to create:

  • /collections/{uuid}/edit
  • /parts/{uuid}/edit
  • /authors/{uuid}/edit
  • /plates/{uuid}/edit
  • /wells/{uuid}/edit

Buttons to add to item pages:

  • /collections/{uuid}
  • /parts/{uuid}
  • /authors/{uuid}
  • /plates/{uuid}
  • /wells/{uuid}

Buttons to add to list item rows:

  • /collections
  • /parts
  • /authors
  • /plates
  • /wells

/about - craft a quality about page

The FreeGenes project could be communicated more effectively through a more deliberately drafted about page.

This feature would involve spending some time crafting a high quality about page that will more clearly communicate what FreeGenes is all about.

Build "delete item" pages & corresponding links

Pages to create:

  • /collections/{uuid}/delete
  • /parts/{uuid}/delete
  • /authors/{uuid}/delete
  • /plates/{uuid}/delete
  • /wells/{uuid}/delete

Buttons to add to item pages:

  • /collections/{uuid}
  • /parts/{uuid}
  • /authors/{uuid}
  • /plates/{uuid}
  • /wells/{uuid}

Buttons to add to list item rows:

  • /collections
  • /parts
  • /authors
  • /plates
  • /wells

requests for API changes

Hey Keoni! Below you'll find some questions with regards to the API as well as recommendations / requests for changes.

Thanks for considering!

Endpoint Questions and Change Requests

Auth Test

/auth_test/
I'm a bit confused by this endpoint because it has me wondering whether it is even necessary.

Couldn't one just use one of the existing available endpoints to test whether auth was successful? Like a GET on /collections?

Seems like this would simplify the API.

Parts

First, with this collection, I'd like to request consolidating the available endpoints:

/parts/collection/
This seems to be a violation of the hierarchy.
Shouldn't the /collections/full/{uuid} endpoint really just list the parts available?

/parts/get/{key}/{value}
It's unclear what this does

/parts/next_gene_id
What does this do?

/parts/query_transfers (POST)
What does this do?

Second, /full/ seems redundant
Getting full results should be the default, no?
Perhaps there could be a query parameter that specifies that you only want part of the data
It could look something like this:
/parts?full=false
Then you could make the query parameter a generally available parameter
And it would make the API easier to learn
If this was removed, that would remove two more endpoints

Third, is the /part_modification/ endpoint redundant? Maybe I'm misunderstanding. If that is the case, though, then I'd recommend it'd be removed.

Collections

The same suggestions apply here as with parts

/collections/recurse/{uuid}
Seems like this should use the standard /collections/{uuid} endpoint with a query parameter that indicates that recursion should be executed

/collections/part_status/{uuid}/{key}
What does this do?

/collections/part_status/search/{uuid}/{key}/{status}
What does this do?

/collections/parts_with_confirmed_samples/{uuid} (GET, POST)
What does this do? And why is there a separate POST endpoint for it?

Orders

Pluralize: change the /order/ endpoint to /orders/

Plates

/plates/packet/{uuid}
What does this do?

Wells

/wells/plate_recurse/{uuid}
Isn't this redundant with the /plate/ endpoint?

Files

/files/download/{uuid}
Could this be changed so it's simply /files/{uuid} to fit in with the REST conventions?

/files/upload
Could this be changed so it's simply /files (POST) to fit in with the REST conventions?

Plateset

Pluralize: change the /plateset/ endpoint to /platesets/

Distribution

Pluralize: change the /distribution/ endpoint to /distributions/

Institution

Pluralize: change the /institution/ endpoint to /institutions/

Material Transfer Agreement

Could this be shortened to just /agreements/?

Also is there a reason this needs to have its own endpoint instead of being an item in the file collection? This file could be specially surfaced in some way using the UI.

Shipment

Pluralize: change the /shipment/ endpoint to /shipments/

Address

Pluralize: change the /address/ endpoint to /addresses/

Parcel

Pluralize: change the /parcel/ endpoint to /parcels/

Containers

/containers/str/{uuid}
I imagine it returns the results in a different way?

/containers/down_tree/{uuid}
What does this do?

/containers/temperature/{uuid}
Is this asking for only the temperature?

/containers/tree_view/
Is this necessary because the response is not JSON?

/containers/up_tree/{uuid}
What does this do?

/plates - update view with unique plate identifiers

The plates view currently assumes each plate has a unique name but this is an invalid assumption.

In reality, the name is only unique for the type of plate. And each plate in the plates list is a particular instantiation of a plate type.

So we need unique identifiers that are relatively short and readable to refer to each plate.

/ - design a quality home page

Home Page

Collections

One of the things we should probably have on the home page is a list of all of the collections available.

This is the first view that one can have into the FreeGenes library.

If you're going to discover bioparts, you're probably going to start by looking through the collections.

Having these collections on the home page will be nice because it will help people get intrigued and will "show not tell" what the FreeGenes project really is.

Once someone clicks through to a collection, they'll be able to browse through the bioparts within it.

It'll probably also be useful to surface the total number of bioparts within the collection.

Top Bioparts

Maybe there should be another section that lists out the top bioparts that people are interested in.

This way, people can use the top bioparts as an interesting entry point for discovery.

Users

We could also include a list of organizations currently using FreeGenes.

This could include logos and potentially even testimonials.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.