{"id":19454688,"url":"https://github.com/mlsakiit/registration-validator-sms","last_synced_at":"2025-06-18T19:37:12.906Z","repository":{"id":207612853,"uuid":"719678343","full_name":"MLSAKIIT/Registration-Validator-SMS","owner":"MLSAKIIT","description":null,"archived":false,"fork":false,"pushed_at":"2023-11-25T17:26:30.000Z","size":1449,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-08T00:58:01.421Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MLSAKIIT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-16T17:13:44.000Z","updated_at":"2023-11-23T15:03:23.000Z","dependencies_parsed_at":"2023-11-23T16:24:57.989Z","dependency_job_id":"bd8275da-df61-406e-ab0c-5090dc76ff9a","html_url":"https://github.com/MLSAKIIT/Registration-Validator-SMS","commit_stats":null,"previous_names":["mlsakiit/registration-validator-sms"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MLSAKIIT%2FRegistration-Validator-SMS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MLSAKIIT%2FRegistration-Validator-SMS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MLSAKIIT%2FRegistration-Validator-SMS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MLSAKIIT%2FRegistration-Validator-SMS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MLSAKIIT","download_url":"https://codeload.github.com/MLSAKIIT/Registration-Validator-SMS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240646972,"owners_count":19834711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T17:11:36.741Z","updated_at":"2025-02-25T10:24:37.118Z","avatar_url":"https://github.com/MLSAKIIT.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://nextf0rm.vercel.app/\"\u003e\n  \u003cimg alt=\"Next.js 13 and Express.JS\" src=\"./assets/banner.png\"\u003e\n  \u003ch1 align=\"center\"\u003eRegistration Validator SMS\u003c/h1\u003e\n\u003c/a\u003e\n\n\u003cp align=\"center\"\u003e\n  An open-source web-form app built with Next.js\u003cbr\u003e\n  Express.js and AWS for the REST API and NoSQL database.\u003cbr\u003eSends SMS to the phone number used for registering\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\"\u003e\u003cstrong\u003eFeatures\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#running-locally\"\u003e\u003cstrong\u003eRunning locally\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#overview\"\u003e\u003cstrong\u003eOverview\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#api-routing\"\u003e\u003cstrong\u003eAPI Routing\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#aws-configuration-for-sns\"\u003e\u003cstrong\u003eAWS Configuration\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#authors\"\u003e\u003cstrong\u003eAuthors\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n## Features\n\n- **Website**\n  - [Next.js](https://nextjs.org) App Router\n  - [Amazon Web Services](https://docs.aws.amazon.com/) for backend functionality\n  - The [Amplify Framework](https://docs.amplify.aws/) for AWS integration\n  - Support for `REST API`, NoSQL Database `DynamoDB`, and `Lambda` functions\n  - Edge runtime-ready\n  - [shadcn/ui](https://ui.shadcn.com)\n    - Styling with [Tailwind CSS](https://tailwindcss.com)\n    - [Radix UI](https://radix-ui.com) for headless component primitives\n  - [Cross Origin Resource Sharing ](https://aws.amazon.com/what-is/cross-origin-resource-sharing) for legitimate requests only\n  - [Zod](https://zod.dev) Typesafe Form Validation ensuring sanitized input is always sent\n- **AWS Infrastructure**\n  - [DynamoDB](https://aws.amazon.com/dynamodb) Streams enables real-time data processing \n  - [EventBridge](https://aws.amazon.com/eventbridge) acts as a pipeline service \n  - [AWS Lambda](https://aws.amazon.com/lambda) for processing JSON and filtering required data\n  - [Amazon SNS](https://aws.amazon.com/sns) for sending SMS to the target user\n\n### Tech Stack\n![Node.js](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white)\n![Express.js](https://img.shields.io/badge/Express.js-white?style=for-the-badge\u0026logo=express\u0026logoColor=black)\n![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![React.js](https://img.shields.io/badge/React.js-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB)\n![Next.js](https://img.shields.io/badge/Next.js-000000?style=for-the-badge\u0026logo=nextdotjs\u0026logoColor=white)\n![Amplify](https://img.shields.io/badge/Amplify-fc3f05?style=for-the-badge\u0026logo=aws-amplify\u0026logoColor=white)\n![API Gateway](https://img.shields.io/badge/API%20Gateway-8A2BE2?style=for-the-badge\u0026logo=amazon-api-gateway\u0026logoColor=white)\n![DynamoDB](https://img.shields.io/badge/DynamoDB-2d2dba?style=for-the-badge\u0026logo=amazon-dynamodb\u0026logoColor=white)\n![Lambda](https://img.shields.io/badge/Lambda-FF9900?style=for-the-badge\u0026logo=aws-lambda\u0026logoColor=white)\n![Eventbridge](https://img.shields.io/badge/eventbridge-purple?style=for-the-badge\u0026logo=awsorganizations\u0026logoColor=white)\n![SNS](https://img.shields.io/badge/SNS-crimson?style=for-the-badge\u0026logo=amazonsimpleemailservice\u0026logoColor=white)\n\n## Overview\n\u003cimg alt=\"AWS Architecture\" src=\"./assets/architecture-overview.png\"\u003e\n\nA 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 \u003ckbd\u003eRegister\u003c/kbd\u003e on the form.\n\nThe API sends user records to `DynamoDB` which then pushes the record into the `DynamoDB Data Stream`.\n\n`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.\n\n`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.\n\n`Simple Notification Service` publishes a formatted string with user details as an SMS to the provided number, confirming their registration.\n\n## Running locally\n\nFirst, run the development server:\n\n```bash\nnpm install\nnpm run dev\n```\n\nYour app template should now be running on [localhost:3000](http://localhost:3000/)\n\n\u003e [!WARNING]\n\u003e This command only starts the webapp. You will need to configure the other services on AWS to get the full functionality.\n\n## API Routing\n\nThe `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`](./amplify/backend/function/formfunction/src/app.js)\n\n\u003e [!IMPORTANT]  \n\u003e The app template which is running on [localhost:3000](http://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. \n\n\u003e [!NOTE]\n\u003e To learn more about the `Serverless Express.js app` and how to deploy it, visit the [`amplify/README.md`](./amplify/README.md) \n\n## AWS Configuration for SNS\n\nAWS Serverless infrastructure is used to send users instantaneous confirmation messages via SMS upon registering for an event on a website contact form.\n\nThis infrastructure relies on `Eventbridge` and `Lambda` for functionality. `Eventbridge` creates a pipeline which listens for a new stream to the `DynamoDB` table.\n\nThe `Lambda` function for processing the input `JSON` data uses `Python` to parse the data and send it to SNS.\n\n\u003e [!NOTE]\n\u003e To learn more about the `Eventbridge` \u0026 `Lambda` function and how to deploy it, visit the [`lambda-sns/README.md`](./lambda-sns/README.md) \n\n## Authors\n\nThis project is created by [MLSA KIIT](https://mlsakiit.com) team members:\n\n- Sourasish Basu ([@SourasishBasu](https://github.com/SourasishBasu)) - [MLSA KIIT](https://mlsakiit.com)\n- Swapnil Dutta ([@rycerzes](https://github.com/rycerzes)) - [MLSA KIIT](https://mlsakiit.com)\n## Version\n| Version | Date          \t\t| Comments        |\n| ------- | ------------------- | --------------- |\n| 1.0     | Nov 21th, 2023   | Initial release |\n\n## Future Roadmap\n**Website/API**\n- [ ] Authentication and Authorization using API Keys\n- [ ] HTTPS Validation\n- [ ] Input Validation and Sanitization on server side\n- [ ] Better Error Handling\n  \n**AWS Infrastructure**\n- [ ] Actual implementation in production\n- [ ] Email functionality along with SMS\n- [ ] SNS Topic so that other notifications can be published to the same numbers\n\n## Usage\n\n\u003cp align=\"center\"\u003e \n  \u003cimg src=\"https://github.com/MLSAKIIT/Registration-Validator-SMS/blob/f29507912629613b2ca8ac423484c0b7d6409029/assets/form.png\" /\u003e\n   \u003cbr\u003e\u003cb\u003eRegistration Form template\u003c/b\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e \n  \u003cimg src=\"https://github.com/MLSAKIIT/Registration-Validator-SMS/blob/f29507912629613b2ca8ac423484c0b7d6409029/assets/registrations.png\" /\u003e\n   \u003cbr\u003e\u003cb\u003eDynamoDB Table with valid entries\u003c/b\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e \n  \u003cimg src=\"https://github.com/MLSAKIIT/Registration-Validator-SMS/blob/f29507912629613b2ca8ac423484c0b7d6409029/assets/ss.png\" /\u003e\n   \u003cbr\u003e\u003cb\u003eSMS Example for a valid Registration\u003c/b\u003e\n\u003c/p\u003e\n\n----\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlsakiit%2Fregistration-validator-sms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmlsakiit%2Fregistration-validator-sms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlsakiit%2Fregistration-validator-sms/lists"}