mohammed firdous
blogprojectsopen sourcediagramsexperiencecertifications

Cruddur

·source
Cruddur

Cruddur is a cloud-based micro-messaging app where users share updates, thoughts, and photos that expire after a set time.

Cruddur is a demo microblogging application. I turned it into a production-grade, cloud-native system on AWS. The goal was to build a scalable and cost-effective application, ready for real-world use.

I re-architected the application to be API-driven, with a separate frontend and backend. This separation allowed for better scalability and maintainability. I chose a mix of AWS services to handle everything from authentication to data storage and media uploads, focusing on reliability and keeping operational costs low.

What it is

Cruddur is a microblogging platform with user authentication, feeds, profiles, and direct messaging.

  • Frontend: A React application that provides the user interface.
  • Backend: A Flask API that handles business logic, running on AWS Fargate.
  • Authentication: Amazon Cognito for secure user sign-up and sign-in.
  • Databases:
    • PostgreSQL (on Amazon RDS) for structured data like user profiles and posts.
    • DynamoDB for real-time messaging, using Streams and Lambda to update message group orderings.
  • Media: Amazon S3 for storing user-uploaded images and avatars, with Amazon CloudFront for fast delivery.

Key Technical Details

  • Observability: The system is instrumented for monitoring and debugging with a combination of tools:
    • AWS X-Ray: For tracing requests across services.
    • CloudWatch Logs: For centralized logging.
    • OpenTelemetry (Honeycomb): For distributed tracing and observability.
    • Rollbar: For real-time error monitoring.
  • CI/CD: A complete CI/CD pipeline using GitHub Actions automates testing, building, and deploying the frontend and backend services.
  • Configuration: AWS Systems Manager (SSM) Parameter Store is used for managing secrets and configuration, ensuring that no sensitive data is hardcoded in the application.
  • Networking: An Application Load Balancer (ALB) distributes traffic to the backend services, with health checks to ensure reliability.

Screenshots

Cruddur Screenshot 1Cruddur Screenshot 2Cruddur Screenshot 3Cruddur Screenshot 4

What I Learned

  • Data Modeling is Key: Choosing the right database for the right job is crucial. Using both a relational database (Postgres) and a NoSQL database (DynamoDB) allowed for a more efficient and scalable system.
  • Serverless for the Win: Using services like AWS Fargate for containers and Lambda for specific tasks (like processing uploads) reduces operational overhead and scales automatically.
  • Secure by Design: Implementing a secure upload system using API Gateway and presigned S3 URLs is a robust pattern for handling user-generated content.
  • Local Development Matters: A smooth local development setup using Docker Compose is essential for productivity and for catching issues before they reach production.