Stickerlandia lets you collect Datadog stickers by completing Datadog certifications, trading with others, and through various other exciting mechanisms. Users can bring their Stickerlandia account to Datadog events and receive high-quality physical stickers for their gadgets.
This application serves a dual purpose:
- A fun community engagement platform
- A reference application demonstrating modern architectural patterns
As a reference application, Stickerlandia showcases platform adaptability by design. We've gone to significant lengths to ensure that all components can be retargeted idiomatically to different platforms - from AWS serverless to Azure Functions to Kubernetes to simple Docker deployments. This adaptability reflects the increasingly common need for applications to run across diverse environments while leveraging each platform's native strengths.
- Collect stickers through certifications and achievements
- Track your collection of digital stickers
- Trade stickers with other community members
- Redeem physical stickers at Datadog events
- Multi-platform deployment capabilities for cloud and on-premises environments
- Consistent architecture across all deployment targets
Comprehensive documentation is available in the docs.
For deployment options and platform-specific configurations, see the deployment guide.
Stickerlandia follows a microservice architecture that can run in various configurations across different types of modern infrastructure:
- Cloud-native serverless
- Cloud-native container orchestration
- Self-hosted container orchestration
Each deployment model uses appropriate components optimized for the specific platform - from database selection to queue technology and load balancing. This platform-specific optimization allows Stickerlandia to maintain consistent functionality while leveraging the unique capabilities of each environment.
- User Management: .NET-based service for identity and authentication
- Sticker Award: Go-based service for sticker assignment management
- Sticker Catalogue: Java/Quarkus-based service for sticker catalog management
- Message Broker: Kafka or Azure Service Bus for event distribution
- Databases: PostgreSQL for structured data
- Authentication: JWT-based authentication
| Service | Description | Documentation |
|---|---|---|
| User Management | Manages user accounts, authentication, and profile information. Handles user registration, login, and JWT token issuance. | API Docs |
| Sticker Award | Manages the assignment of stickers to users. Tracks which users have which stickers and handles assignment/removal based on criteria like certification completion. | API Docs |
| Sticker Catalogue | Manages the master catalog of available stickers. Handles sticker metadata, images, and provides catalog browsing functionality. | API Docs |
| Web Backend | Backend for Frontend (BFF) service handling OAuth 2.1 authentication and API proxying. | README |
| Web Frontend | React/Vite single-page application. | |
| E2E Tests | Playwright-based end-to-end tests. | README |
Stickerlandia is fully instrumented with Datadog's observability and analysis tooling, showcasing best practices for modern application monitoring and performance optimization.
We use mise-en-place for tool and task management.
mise trust && mise install # Install tools
mise run env:setup # Configure .env, necessary for most of the rest of the tasks!You can use mise to work with Docker locally:
mise run compose:deploy:local # Start services (build from source)
mise run compose:deploy:release # Start services (prebuilt GHCR images)
mise run compose:dev # Start with hot reload
mise run compose:down # Stop servicesOr deploy to AWS in the cloud:
mise run aws:deploy:local # Deploy to AWS (build containers locally)
mise run aws:deploy:release # Deploy to AWS (prebuilt GHCR images)
mise run aws:info # Show AWS stack outputs
mise run aws:down # Destroy all AWS stacksRun mise tasks to see top-level tasks, or mise tasks --all to see service-specific tasks:
//sticker-award:aws:deploy Deploy to AWS
//sticker-award:build:docker-dev Build dev container
//sticker-award:build:local Build Go binary
//sticker-catalogue:aws:deploy Deploy to AWS
//sticker-catalogue:build:local Build Java package
//user-management:aws:deploy Deploy to AWS
//user-management:build:local Build .NET solution
...
Using mise's monorepo support, each service defines a consistent set of tasks (like build:local, aws:deploy) that roll up to the top-level orchestration tasks.
Access the app at http://localhost:8080.
If you startup the entire application locally, database migrations are applied to the user service and two default users are created:
- User
- Email address: [email protected]
- Password: Stickerlandia2025!
- Admin User
- Email address: [email protected]
- Password: Admin2025!
For detailed setup instructions, see the environment setup guide.
Note
For bigger, more serious microservice architectures, at some point its likely you'll have
to give up the ability to docker-compose your whole stack.
Contributions are welcome! Please see our contributing guidelines for more information.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.