@snowdog/pigeon

1.1.1 • Public • Published

Pigeon

Simple open-source serverless API for sending emails and building forms effortlessly.

Features

  • Simple - Designed to remove the necessity of using Wordpress or another big backend just to have a contact form on the landing page
  • Fast and lightweight - Serverless oriented, no framework, no database or other system-wide requirements
  • Form fields config - You don't have to hardcode your form fields on front-end anymore, get them from API and build UI on the fly.
  • All well-knows SMTP services support - Under the hood, we are using nodemailer and it supports a bunch of well-known SMTP services
  • No Admin Panel - You are not limited by the UI or poor UX, just you and one JS config file
  • Front-end agnostic - Simple REST API can be used by any application

Demo

Demo

Source code

API

POST /

Endpoint used to handle form submits

const form = document.querySelector('#form')
const bodyFormData =  new FormData(form)
axios({
  method: 'post',
  url: '/',
  data: bodyFormData,
  headers: { 'Content-Type': 'multipart/form-data' },
  params: { id: 'myFormId' }
})

GET /

Get configuration of form fields

const { data } = axios.get('/', { params: { id: 'myFormId' } })
console.log(data)
// [
//   {
//     id: 'email',
//     type: 'email',
//     name: 'email',
//     label: 'Email',
//     required: true
//   }
// ]

Config file

Defaults

{
  locale: 'en-US',
  dev: {
    port: 8080
  },
  cors: {
    allowedOrigins: []
  },
  transport: {
    service: SERVICE,
    secure: true,
    auth: {
      user: USER,
      pass: PASS
    }
  },
  forms: {
    default: {
      mail: (params) => ({
        from: 'noreply@test.dev',
        to: 'noreply@test.dev',
        subject: 'Default subject',
        text: Object.keys(params).map(key => `${key}: ${params[key]}\n`).join('')
      }),
      fields: []
    }
  }
}

You can overwrite each part of this config by creating pigeon.config.js.

transport is nodemailer's SMTP transport config object. By default, we are taking ENV variables SERVICE, USER and PASS to hydrate it.

cors is used to set Access-Control-Allow-Origin header acordingly to the settings.

forms object keys are used as IDs in requests params.

For security reasons you shouldn't keep user and password directly in the config file, but for example, keep them as a secret variables if you are using Vercel.

Local testing

To test and expose mailer locally on your machine run yarn dev / npm run dev Development emails are send via ethereal.email service, instead of your desired SMTP transport, to preview sent messages.

Readme

Keywords

none

Package Sidebar

Install

npm i @snowdog/pigeon

Weekly Downloads

1

Version

1.1.1

License

MIT

Unpacked Size

8.96 kB

Total Files

11

Last publish

Collaborators

  • piotr.krusicki
  • robert.wozniak
  • pawel.kajdasz