Giter VIP home page Giter VIP logo

assayplate's Introduction

AssayPlate

Plan experiments with this Assay Plate web app!

This is primarily a MERN stack demo that showcases many common features of a full-stack app (responsive frontend, stateless authentication, public API, etc.). I summarized my learnings from building this demo on my website.

Notable Features:

Frontend:

  1. user authentication -- each user can save multiple plates to the cloud.
  2. common editing features including input validation, unsaved changes warning and restoration to previous save.
  3. intuitive, reactive GUI
    • draggable assay plate (allows editing big plates on smaller screens)
    • invalid input is allowed when editing for planning purposes
    • mobile friendly in landscape (soon in portrait, too)

Backend:

  1. more input validation! Comprehensive input validation... hopefully.

API

Users can edit and save multiple plates at once through interfacing with our API. Postman works great!

API documentation is available here

assayplate's People

Contributors

peter1357908 avatar

Watchers

 avatar

assayplate's Issues

Backend optimizations

  • finer-grained update of individual wells (to save bandwidth)
  • update multiple MongoDB documents in batch (rather than doing it one at a time in the backend logic). This includes batch-deleting dead references as in GetPlatesAndUsername().
  • do not send redundant info like each well's _id
  • Document API with Postman

Low return-on-investment features

  • search wells/plates by name
  • "Undo" feature in frontend. Use Redux?
  • offline version. "log in to save your current plate"
  • turn log-in & sign-up into Dialogs for a true SPA experience.
  • better representation of protein, possibly with autocomplete.
  • even more backend protection (e.g., against DOS and storage abuse)
  • allow editing multiple plates on frontend and saving multiple at once (make "all plates" variants of "reset, download, upload" buttons).
  • allow displaying multiple plates in the workspace
  • make FormLabel work (mui/material-ui#40860)
  • Select and edit multiple cells at once (like how the premium feature here works: https://mui.com/x/react-data-grid/cell-selection/)
  • Allow changing a plate's nRow and nCol
  • Customizable color themes
  • Highlight column and row when hovering over a well
  • Allow zooming in and out on the plates. https://www.npmjs.com/package/react-zoom-pan-pinch
  • set proper length limits for reagent and antibody. Set limit on concentration precision in backend. Requires more specification from the users.
  • deselect a well (allow no selection)
  • do not send plaintext password in signup request
  • migrate to TypeScript
  • automatically ask frontend to invalidate token upon seeing invalid token
  • change input validation logic on frontend? E.g., allow only numbers for Reagent and Concentration (with Reagent having a prefixed R)?
  • store only non-default wells (to save database space and bandwidth)

Frontend optimizations

  • a more efficient way to present the dropdown menu? Maybe don't use the entire cache as the options?
  • a more modular way to add a confirmation dialog to multiple different buttons that either proceed or cancel the action?
  • put constant styles into CSS files
  • update state only when necessary. More examples of "instead of onDrag, onStop"? (maybe don't control input fields entirely; only update state on submit?)
  • modularize TopBar.jsx

High return-on-investment features

  • introduction in login and signup page; link to this repo, API documentation, and peterish.com notes.
  • Allowing deleting account
  • responsive hamburger top bar menu (for mobile). Reference: https://javascript.works-hub.com/learn/how-to-create-a-responsive-navbar-using-material-ui-and-react-router-f9a01
  • make a popup suggesting to go landscape on mobile (and make signup & login better in landscape)
  • make plate draggable on mobile (turned out to be an issue with react-draggable)
  • add loading indication (will be useful if we migrate back to servers that need to take 30s to wake up after inactivity...)
  • save plate(s) to file, and load plate(s) from file
  • "do not prompt again" (e.g., plate deletion).
  • "save and continue with current action" in confirm dialogs
  • Highlight modified wells (and plateName)

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.