A completely functional, server-less, ticket service. Powered by AWS, this useful, fast service can be accessed at Requestr.org. Built from an Engineering perspective you can find the design document, demo video, and more below.
Requestr Quick Look (5min)
Requestr Features Demo (23min)
Don't want to watch the video? Log into either of these demo accounts at www.request.org/LogIn to poke around. Make tickets, groups, change permissions, and get acquainted with the service:
Username: mwatson
Password: DemoDemo3!
Username: ddare
Password: DemoDemo13!
Requestr Design Document
Goals
The goal of this project was to make a functional ticket service that would be completely server-less, leveraging the power of AWS Services. My personal goals were to demonstrate my skills with AWS Services as well as my skills as a Software Engineer. I wanted to demonstrate my ability to create full services from scratch in very little time and demonstrate the skills that I have picked up from my time in the industry as a Software Engineer. I wanted Requestr to allow for any team or group of people who needed a platform to request and approve features, tasks, etc... to be able to do so with a fast service and easy to use UI.
Context
Requestor allows users to create an account, create groups, add other users to these groups, post tickets in their groups, manage roles in their groups, and manage tickets in their groups. The main idea here was, of course, for the entire program to be server-less, only using AWS services. With this in mind it would have been very easy to implement the entire system just saving groups and ticket info in a DynamoDB database and constantly querying or updating those entries through an Api Gateway. I wanted the design for this to instead be more ticket focused. A ticket's info is valuable and relevant up until it has been archived. I decided to mirror the life of a ticket using a state machine through AWS Step Functions. Each group created on Requestr would still be saved in a DynamoDB database, but each group would then have a corresponding state machine that each ticket made in that group would run on. Each ticket's info is stored only within whatever state it is currently on in the state machine and eventually when a ticket is archived, its execution in the state machine is terminated. In summary, groups created on Requestr are saved to a DynamoDB database while ticket's entire lifecycle is represented as executions of a state machine. The State Machine built through AWS Step Functions can be found in the system architecture diagram below.
System Architecture Diagram (Please zoom in to view each part)
Use Cases
Use Cases: Change Name, Change Password, View Profile, Recover Password
- The first three of these just validate a session with AWS Cognito and if the user provides a valid password corresponding to their username, they can just provide the new password or new name and Cognito will change them.
- When a use clicks on their profile Cognito just checks that they have a valid session (i.e. they have logged in) and if the they do, it just returns all their info to be displayed.
- Recover password just has Cognito send a new verification code to the on-file email through AWS SES
Timeline
To model a Software Engineering environment I gave myself 2 months of real time to complete the entire project. I planned for about 200 actual work hours (i.e. 25 work days) with the first 50 hours going towards front end design and implementation and the last 150 hours going towards the AWS engineering and integration.
​
In the end I reached the end of the whole project in 123 hours (i.e. 15 work days). With the front end design and implementation taking about 40 hours and the AWS engineering (creation, testing, integration) taking the rest; about 83 hours.
API Reference
API Documentation for the project can be found here.
Requestr AWS Tech Demo (14min)
This project was built entirely from scratch on my own with the idea in mind of mimicking a Software Engineering scenario of having a deadline. I gave myself two months to complete the project and finished with time to spare. I logged all hours spent working and finished in about 123 hours which equates to roughly 15 working days or 2 weeks.
​
Requestr is a simple request and approval ticketing service. Create groups for your team project, workflows, or for anything that needs a ticketing service. Each group can have unlimited number of members and all members can create tickets. You can make some members of the group power users (Admins) and they can approve, deny, and archive tickets. All tickets have a comment section for quick communication between requestors and power users. Groups can be public - Everyone can see all tickets - or private - Only power users and the requestor can see individual tickets.
​
The system is completely server less and runs through AWS services like Api Gateway, Lambda, DynamoDB, Step Functions, Cognito and more. Requestr is fast, lightweight, and completely functional as a ticket service.
The website is currently live and fully functional at www.requestr.org
123 hours logged working on this project.
Frontend: Developed with TypeScript & React.
Backend: Developed with AWS Services including CDK, API Gateway, Lambda, DynamoDB, Step Functions, S3, SNS, SES, CloudFront, Route53, CloudWatch, Cognito, IAM
Built entirely from scratch on my own.