Giter VIP home page Giter VIP logo

bottlenose-mail-client's Introduction

Hi there ๐Ÿ‘‹

My name is Will Olson and I'm a professional n3rd

By day: I'm an Engineering Manager at Procore Technologies.
But by night: I'm and avid coder, life-long learner, digital nomad, and amateur freediver.

Some more about me:

bottlenose-mail-client's People

Contributors

frankolson avatar gitter-badger avatar nickelliston avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

bottlenose-mail-client's Issues

Show Inbox API endpoint

The front-end client needs a API endpoint for showing the content of existing inboxes.

Describe the solution you'd like

  • inbox is determined by an inbox ID in the path parameters.
  • if an inbox cannot be found, a 404 error is returned

Receive and store emails

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like

  • Utilize SES to receive emails
  • emails should only be processed if there is a matching and unexpired inbox in the DynamoDB inboxes table.
  • emails should be stored using AWS services
    • I am unsure on the most effective data store for this. S3 and DynamoDB both seem like viable options. More research should be done and reported here on the pros and cons of each.

Build Inbox Page

inbox

  • Use the following headers
    • Sender
    • Subject
    • Actions

Extra details

// https://api.bottlenosemail.com/inbox/:inboxId
{
  "inboxId": "string",
  "emailAddress": "string",
  "createdAt": 6546513521321321
}
// https://api.bottlenosemail.com/emails?inboxId=:inboxId
[
  {
    "emailId": "d843bdd6-7c86-43e0-a3e4-0405d08c0f24",
    "emailAddress": "[email protected]",
    "date": "1599696547782",
    "from": "Will <[email protected]>",
    "subject": "Some subject"
  },
  // ...
]

Add support for email attachments

Is your feature request related to a problem? Please describe.
People often send attachments along with their emails. We need to support viewing those attachments

Describe the solution you'd like
When receiving emails, store attachments for viewing with the email. These should be destroyed with the emails when performing the expired inbox cleanup.

Check email address lambda

Is your feature request related to a problem? Please describe.
We should not be storing or processing emails for emails that no longer, or never did, exist. Eventually or SES service will need to define a rule for accepting emails. This ticket is for creating the lambda function that that rule will use.

Describe the solution you'd like
A lambda function that:

  • takes a string (the email address being checked) as an input and checks whether or not there is a matching unexpired inbox
  • returns a boolean value base on that check
    • true ~> matching inbox
    • false ~> no matching inbox, or the matching inbox is expired

Expired inbox cleanup

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like

  • lambda function that deletes all the stored emails of expired inboxes
  • expired inboxes are identified by the expires_at timestamp on each inbox
  • inboxes are kept for future metrics.
  • Daily CloudWatch task is setup to run the lambda function

Setup API Gateway Websockets for real-time inbox updates.

Is your feature request related to a problem? Please describe.
Currently, the only way for the front-end client to check if there are new emails is to constantly poll the back-end with REST API calls. If someone stays on the inbox page long, this could result in A LOT of API calls and lambda usage.

Describe the solution you'd like
Use AWS API Gateway Websockets for real-time inbox updates. This ticket only requires the backend setup to be implemented. Another ticket will be created in order to handle the front-end client consumption.

Create Inbox API endpoint

The front-end client needs a API endpoint for creating new inboxes.

Describe the solution you'd like

  • takes no arguments
  • creates a new inbox
  • inboxes should have the following attributes:
    • id ~ string
    • email_address~ string
    • created_at ~ DateTime string in ISO 8601 format
    • expired_at ~ DateTime string in ISO 8601 format
    • emails ~ Array
  • the emails attribute should be initialized as an empty array

Captcha integration

Is your feature request related to a problem? Please describe.
Humans should be the only ones allowed to create inboxes. If some bot wen to the website and started creating inboxes like crazy we would end up paying A LOT to AWS for storage and lambda usage.

Describe the solution you'd like
Integrate Google's reCaptcha service with the creation of new inboxes.
https://www.google.com/recaptcha/

Additional context
This will require a working front-end client for BottlenoseMail.

Build Show Email Page

show_email

  • Navbar of card with "Back to Inbox" button
  • Email header section
    • Sender
    • Date
    • Subject
  • HTML body section

Extra details

// https://api.bottlenosemail.com/emails/:emailId
{
  "emailId": "d843bdd6-7c86-43e0-a3e4-0405d08c0f24",
  "emailAddress": "[email protected]",
  "inboxId": "d843bdd6-7c86-43e0-a3e4-asdfasdfasdfw", // (WIP)
  "date": "1599696547782",
  "from": "Will <[email protected]>",
  "subject": "Some subject",
  "bodyHtml": "<p>Hi!</p>",
  "bodyText": "Hi!",
}

Show Email API endpoint

The front-end client needs a API endpoint for showing the content of specific email within an inbox.

Describe the solution you'd like

  • inbox is determined by an inbox ID in the path parameters.
  • email is determined by an email ID in the path parameters.
  • if the email or inbox cannot be found, a 404 error is returned
  • an email needs the following attributes:
    • id~ string
    • inbox_id~ string
    • received_at ~ DateTime string in ISO 8601 format
    • from~ string
    • subject~ string
    • body_html~ string
    • body_plain~ string
    • attachments ~ Array of objects

Complete Header

  • Bootstrap Jumbotron
    • Add Title
    • Add Description
    • Button for creating a new inbox (does nothing for now)

CI/CD Pipeline

Is your feature request related to a problem? Please describe.
We need a way to test and deploy our code automatically. Otherwise someone will have to spend a lot of time manually deploying and managing the infrastructure. Infrastructure as Code should be our objective here.

Describe the solution you'd like

  • Changes to the master branch of this should trigger the automated test suite
  • If the automated test suite passes without any failures, the code should automatically be deployed to AWS.

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.