A new take on file and link storage

    Hi, Habr! Today we want to briefly introduce you to the project we have been working on for the past 10 months. We are 4 people in a team and we, using ruby ​​and js, created Staply - an application where it is convenient to work together and store anything.


    At the moment, there are a huge number of applications for storing and exchanging data: cloud storage, instant messengers, various services for taking notes, etc. But everyone has a couple of flaws. Firstly, they are convenient only for storing a certain type of information (only files or only text). Secondly, it is terribly inconvenient to collect any data together, since it is often not clear who sent what, where, when and why. Many services try to solve these problems with “add-ons” (the same Dropbox and work chat Evernote shared folders), but we believe that a new interface is needed to eliminate these shortcomings. Therefore, we created Staply.

    about the project

    Staply allows you to create “notebooks” where it is convenient to store anything you want and work together. The interface is divided into two parts: the notes published by the participants of the notebook are displayed on the left side. Files, links, email addresses and other meta data are automatically extracted from notes and moved to the right side.

    Search by notes is implemented non-standard: using filters. With their help, you can display, for example, notes containing files or links. Having found the necessary files / links, you can immediately get to the section of the notebook where they were posted.
    Additionally, we have simplified the structure of the service as much as possible. There is only one level of notebooks and that’s it. Therefore, for example, if I have a notebook for company X, then I am sure that only in this notebook should I look for documents related to this company. Participants are invited by email.

    You can edit your notes at any time. Thus, you can avoid a large number of notes in the notebook - at any time, the notebook will contain only relevant and really important information.
    Staply is already available on all platforms as a web version.

    Used technologies

    Briefly, then:
    Hosting - Amazon Web Services:
    2 EC2 instances - small for the test server, medium - for the working version,
    S3 - for storing data,
    Simple Email Service - for sending email from the application,
    database - MySql (in the RDS cloud )

    To maintain the service in working condition, we tried to avoid a sharp increase in load, gradually increasing traffic, which allowed us to identify bottlenecks in the system and eliminate them in the operating mode, without emergency situations.
    From the very beginning of development, we used Amazon AWS services: - EC2 m1.small instance for the test version and m3.medium for working t2.micro with Haproxy installed for convenient routing and load balancing when adding new instances.
    A server written in Rails is launched in the Passenger + Nginx bundle. After a long search for the optimal server, we settled on it, as the most stable in terms of memory consumption.

    Memory usage in Passenger

    Under the following load:

    The MySql database is launched in the RDS service for daily backups and the ability to quickly increase system power without the need to transfer data, since starting from the earliest beta version, the service was used by clients and there was data in the database, the safety of which we should have provided.

    Simple Email Service (SES)
    Integrates perfectly with Rails with Action Mailer, and provides a free quota of 10,000 messages per day.

    A few words about design

    The entire design of the project is done in the Sketch app from Bohemian coding . We decided to make icons and illustrations in SVG in order to avoid problems with high-expansion displays. We combined all the SVGs into sprites to avoid blinking when the state of the icons changes (for example, when clicking).

    In principle, that's all. We will be glad to hear your ideas and comments.

    Also popular now: