An open-source web-form app built with Next.js
Express.js and AWS for the REST API and NoSQL database.
Sends SMS to the phone number used for registering
Features · Running locally · Overview · API Routing · AWS Configuration · Authors
- Website
- Next.js App Router
- Amazon Web Services for backend functionality
- The Amplify Framework for AWS integration
- Support for
REST API
, NoSQL DatabaseDynamoDB
, andLambda
functions - Edge runtime-ready
- shadcn/ui
- Styling with Tailwind CSS
- Radix UI for headless component primitives
- Cross Origin Resource Sharing for legitimate requests only
- Zod Typesafe Form Validation ensuring sanitized input is always sent
- AWS Infrastructure
- DynamoDB Streams enables real-time data processing
- EventBridge acts as a pipeline service
- AWS Lambda for processing JSON and filtering required data
- Amazon SNS for sending SMS to the target user
A static site is hosted with a contact form. We use API Gateway
to create an API which makes a PUT
request to our DynamoDB
database after the user clicks Register on the form.
The API sends user records to DynamoDB
which then pushes the record into the DynamoDB Data Stream
.
EventBrige Pipeline
is configured to use DynamoDB
Data Streams as the Event Source
, Filter for INSERT
records in the stream to pick up only new entries. The record data is then pushed to the target Lambda
function.
Lambda
performs the processing on the input JSON
data using Python
to parse the user data and extract the Phone Number, name and other relevant details to send to SNS.
Simple Notification Service
publishes a formatted string with user details as an SMS to the provided number, confirming their registration.
First, run the development server:
npm install
npm run dev
Your app template should now be running on localhost:3000
Warning
This command only starts the webapp. You will need to configure the other services on AWS to get the full functionality.
The REST API
is hosted on AWS using a Lambda function which deploys a Serverless Express.js app
. Source code for lambda function is in the amplify/backend/function/formfunction/src/app.js
Important
The app template which is running on localhost:3000 is using the REST API
hosted on AWS. It has CORS enabled which means your app template will not be able make requests to the REST API
hosted on AWS.
Note
To learn more about the Serverless Express.js app
and how to deploy it, visit the amplify/README.md
AWS Serverless infrastructure is used to send users instantaneous confirmation messages via SMS upon registering for an event on a website contact form.
This infrastructure relies on Eventbridge
and Lambda
for functionality. Eventbridge
creates a pipeline which listens for a new stream to the DynamoDB
table.
The Lambda
function for processing the input JSON
data uses Python
to parse the data and send it to SNS.
Note
To learn more about the Eventbridge
& Lambda
function and how to deploy it, visit the lambda-sns/README.md
This project is created by MLSA KIIT team members:
- Sourasish Basu (@SourasishBasu) - MLSA KIIT
- Swapnil Dutta (@rycerzes) - MLSA KIIT
Version | Date | Comments |
---|---|---|
1.0 | Nov 21th, 2023 | Initial release |
Website/API
- Authentication and Authorization using API Keys
- HTTPS Validation
- Input Validation and Sanitization on server side
- Better Error Handling
AWS Infrastructure
- Actual implementation in production
- Email functionality along with SMS
- SNS Topic so that other notifications can be published to the same numbers
DynamoDB Table with valid entries
SMS Example for a valid Registration