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




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.
