Juan Rodríguez

Turcita

This project is a mobile app to allow people to set appointments with professionals like barbers, nails professionals, and many others in an easy way. In order to achieve that the owner need to set his store in the app, set location, opening hours, create categories, services and allow some professionals to link to his store. Each professionals have an availability and services, so the customers can find the store and set appointments with them.
The app was made with Angular, TypeScript, Ionic and Capacitor that allows me to create a nice user experience.
The backend s powered by AWS Lambda functions, enabling serverless architecture for scalability and cost-efficiency. API Gateway is used to manage and secure API endpoints, while DynamoDB hosts the database for storing user data and content. User authentication is handled by AWS Cognito, ensuring secure access to the platform. Also the images of the store and professionals pass a process of moderations using AWS Rekognition to avoid harmul images in the app, normalized and then stored in S3 and distributed with CloudFront. The users can add reviews and those reviews can get a reply so those text are moderated as well using AWS translate and AWS Comprehend
Overall, this project demonstrates some of my abilities to design and implement a full-stack application using modern web technologies and AWS services. This project is composed of 9 stacks that handles each parts of the application, from user authentication to content delivery.
There stacks are:
- Base: for VPC, roles, database, certificate
- Admin: for endpoints associated with admin users
- User: for basic endpoints of users
- Owner: for endpoints associated with admin users
- Profesional: for endpoints associated with admin users
- Customer: for endpoints associated with admin users
- Media: for endpoints associated with media and media moderation
- Notifier: for notifications
- Cdn: for content delivery
The design structure of the application includes important components such as the authentication system, event handling, notifications via firebase and content management, all of which work together to provide a seamless user experience.

URL: turcita.com

Design structure
          
Users AWS Cloud CloudFront turcita.com DynamoDB Rest Api Lambdas Moderator Moderator Notifier Website Assets VPC Cognito User Pool WAF CloudWatch DynamoDB Streams Rekognition Translate Comprehend

CDK / Infrastructure

This code snippet demonstrates how to set up an base stack. It includes the creation of a Cognito User Pool and a User Pool Client with secure configurations suitable for a Single Page Application (SPA). Also, it outlines the steps to create a VPC, security groups, DynamoDB tables, IAM roles.

    
export class BaseStack extends Stack { constructor(scope: Construct, id: string, props: AuthStackProps) { super(scope, id, props); // Step 1: Create a VPC and security groups for the Lambda functions // The VPC will provide network isolation for the Lambda functions, ensuring that they can only communicate with each other and not be accessed from the public internet // We will add Gateway Endpoints for S3 and DynamoDB to allow private communication between the Lambda functions and these services without going through the public internet // Step 2: Create DynamoDB tables for the application // We will create several tables to store different types of data, such as stores, professionals, services, appointments, etc. // Each table will have appropriate partition keys and sort keys to optimize query performance based on the access patterns of the application // Step 3: Create a Cognito User Pool // for this step, we will create a user pool with secure configurations, such as: // - Enabling self sign-up with email verification // - Setting password policies (e.g., minimum length, require symbols, etc.) // - Configuring account recovery options // - Enabling multi-factor authentication (MFA) if needed // Step 4: Create Certifications for https // Step 5: Create an IAM roles for the Lambda functions // These role will have permissions to access the DynamoDB tables and the S3 bucket, as well as any other AWS services that the Lambdas need to interact with like cloudwatch for logging. } }