As we kick off the notification program inside Cuculi, we are designing AI microservices that engineers can depend on to deliver psychologically informed nudges with the precision of a concierge team. The blueprint below turns that moonshot into a shared and testable architecture.
Explore the collaboration space
Dive into the evolving research notes, prompt experiments, and visual artifacts that complement this article: Google Doc Blueprint, Gemini Design Companion, and Claude Artifact Walkthrough.
A Technical Blueprint for AI-Powered Microservices to Drive User Engagement in a Social Dining Application
Hyper-personalized nudges are the antidote to broadcast fatigue. When every notification distills intent, timing, and tone, members stop feeling marketed to and start feeling guided. That shift requires a service mesh that can perceive context, infer intent, and produce psychologically tuned copy in real time—all while remaining observable, auditable, and maintainable by a lean team.
Strategic Foundation: A Modern Architecture for Personalized Engagement
Generic, broadcast-style notifications are increasingly ineffective, leading to user fatigue and abandonment. The alternative is hyper-personalization—context-aware, psychologically informed nudges that guide behavior toward valuable outcomes.1 Modern recommendation engines fuse AI, NLP, and vector search to deliver real-time personalization that drives satisfaction and business metrics.3
The foundation of this personalization is understanding user intent—the motivation behind each action, not merely the action itself.45 By inferring intent, the system can craft intuitive, high-signal experiences that increase loyalty and conversion. This architecture translates those principles into a production-ready stack tailored for a social dining product.
Architectural Paradigm: LLM-as-a-Microservice
Treat each large language model interaction as a discrete microservice, encapsulated behind a well-defined API. The LLM-as-a-Microservice pattern decouples experimental AI work from stable application code, enabling rapid evolution of prompts, model selections, and guardrails without destabilizing the broader platform.6
- Encapsulation: Each service owns its prompts, retries, and post-processing, isolating LLM complexity from the rest of the system.6
 - Composability: Lightweight REST contracts allow intent, recommendation, and targeting agents to orchestrate sophisticated workflows.6
 - Independent Deployment & Scalability: Teams can A/B test prompts, swap models, and ship updates independently—critical for fast-paced AI iteration.67
 
The trade-offs—additional network hops and distributed-system complexity—are mitigated through strong observability, contract testing, and infrastructure automation.
System Infrastructure: A Serverless-First Deployment on AWS
The Deployment Decision: AWS Lambda vs. Containerized Flask
Two deployment paths dominate Python microservices: serverless functions (AWS Lambda) and containerized Flask workloads on ECS or EC2. Lambda's pay-per-use economics, automatic scaling, and managed infrastructure make it ideal for sporadic, event-driven workloads such as engagement nudges.911
| Feature | AWS Lambda | Containerized Flask (ECS/EC2) | 
|---|---|---|
| Cost Model | Pay-per-invocation and duration; no idle costs.11 | Always-on instance spend regardless of traffic volume.11 | 
| Scalability | Instant scaling from zero to thousands of concurrent executions managed by AWS.9 | Requires configuring auto-scaling groups, load balancers, and container orchestration. | 
| Maintenance Overhead | No server management; AWS handles patching and runtime updates.9 | Teams manage EC2 instances, container runtimes, and orchestration policies.10 | 
| Cold Start Latency | Possible cold starts mitigated with provisioned concurrency.11 | Warm instances deliver consistent response times but incur idle costs. | 
| Developer Experience | Testing requires tools like AWS SAM to emulate the cloud runtime.1118 | Familiar local development flows but more complex deployment pipelines.12 | 
| State Management | Stateless execution encourages externalizing shared data.11 | In-memory state is possible but complicates horizontal scaling. | 
Because notifications trigger on discrete events or timed checks rather than constant traffic, dedicated Lambda functions per microservice maximize cost efficiency and alignment with Cuculi's engagement rhythms.
System Architecture Overview
Amazon API Gateway fronts each microservice endpoint, providing routing, authentication, rate limiting, and throttling before requests reach their Lambda handlers.141516 MongoDB Atlas anchors the data layer, storing operational documents alongside embeddings so retrieval and personalization happen inside a unified datastore.2122
                    The AI-Powered Engagement Engine
Boosting user retention for a social dining app with psychology-driven microservices.
Microservice Journey
User
Social Dining App
AI Agent Microservices
(Python / Lambda)
MongoDB Atlas
Intent Service: The Strategist
Analyzes user activity to decide the \"why\" and \"when\" for each notification. It is the routing brain that picks the nudge moment.
User Recommendation: The Friend
Crafts personalized event suggestions by pairing vector search with a friendly, FOMO-aware tone.
Event Targeting: The Networker
Surfaces the most compatible audience for each event, ensuring invitations feel exclusive and relevant.
Profile Completion: The Host
Encourages new members to finish onboarding with warm, value-driven nudges.
The Psychology of Engagement
Urgency & Scarcity
Limited availability triggers FOMO and faster action.
Personalization
Specific matches demonstrate that the app understands each diner.
Social Proof
Highlighting friends and community momentum reinforces trust.
Mitigating Serverless Challenges
Cold starts introduce latency when Lambda functions scale from zero. Provisioned Concurrency eliminates the delay for latency-sensitive services, while scheduled warmers suffice for background tasks.11 Local development parity improves through AWS SAM, which emulates Lambda and API Gateway locally for test-driven workflows.18
                    Dependency management relies on Lambda Layers for shared libraries (e.g., pymongo, langchain-mongodb) and function-specific deployment bundles assembled via SAM or the Serverless Framework.19
                
The Data Layer: Powering Semantics with MongoDB Atlas Vector Search
MongoDB Atlas' flexible document model stores evolving user profiles, event catalogs, and embeddings in a single operational plane.2122 Embeddings live alongside their narrative context, eliminating synchronization overhead with separate vector databases.21
Data Modeling and Enrichment
                    Enriched narratives dramatically improve semantic retrieval. Raw profile attributes transform into persona stories before embedding, producing higher-quality matches.2324 Below are representative schemas for the users and events collections.
                
{
  "_id": "ObjectId('...')",
  "name": "Alex Johnson",
  "created_at": "ISODate('...')",
  "profile_info": {
    "dietary_preferences": ["vegetarian"],
    "favorite_cuisines": ["Italian", "Mexican"],
    "profile_completion_percentage": 75
  },
  "activity_history": {
    "last_login": "ISODate('...')",
    "recent_events_viewed": ["ObjectId('...')"]
  },
  "user_persona_narrative": "Alex is a social diner who prefers vegetarian options...",
  "user_persona_embedding": [0.012, -0.345, ..., 0.987]
}
                {
  "_id": "ObjectId('...')",
  "title": "Neighborhood Pasta Making Class",
  "description": "Learn to make fresh pasta from scratch!",
  "location": {"type": "Point", "coordinates": [-73.987, 40.748]},
  "time": "ISODate('...')",
  "tags": ["cooking class", "italian", "social"],
  "spots_left": 5,
  "attendees": ["ObjectId('...')"],
  "event_narrative": "This is an intimate, hands-on cooking class...",
  "event_narrative_embedding": [0.543, 0.123, ..., -0.654]
}
                Implementing Vector Search
- Generate Embeddings: Use consistent embedding models (OpenAI, Voyage AI, Hugging Face) to ensure vectors share the same semantic space.2627
 - Store Embeddings: Persist vectors within the corresponding MongoDB documents for unified access.21
 - Create Vector Indexes: Define Atlas Vector Search indexes specifying field, dimensions, and similarity metric.25
 - Query with 
$vectorSearch: Combine semantic similarity with filters such as geography or recency for hybrid search experiences.2228 
This approach keeps recommendations accurate, low-latency, and always in sync with the freshest behavioral data.4142
The AI Agent Microservices: A Deep Dive
| Service Name | Endpoint | HTTP Method | Request Payload | Success Response | 
|---|---|---|---|---|
| Intent Service | /nudge/intent | 
                                POST | {"userId": "...", "triggerEvent": "app_opened_no_rsvp"} | 
                                {"nudgeType": "event_recommendation", "targetService": "/recommendations/user"} | 
                            
| User Recommendation | /recommendations/user | 
                                POST | {"userId": "..."} | 
                                {"notificationText": "Foodie alert! A sushi making class is happening near you tonight. Only 3 spots left!"} | 
                            
| Event Targeting | /targeting/event | 
                                POST | {"eventId": "..."} | 
                                {"userIds": ["...", "...", "..."]} | 
                            
| Profile Completion | /onboarding/profile-completion | 
                                POST | {"userId": "..."} | 
                                {"notificationText": "Welcome, Alex! Complete your profile to get personalized event matches."} | 
                            
Intent Service Agent
The Intent Service is the routing brain. V1 launches as a transparent rules engine so we can ship value before accumulating labeled outcomes. Each rule inspects MongoDB for recency, momentum, and state to select the next best action.30313233
- Rule Examples: Profile completion nudges for new members, re-engagement nudges after 24 hours of inactivity, event reminders for upcoming RSVPs, and follow-up suggestions for viewed-but-not-booked events.
 - Phase Two: After capturing outcomes, upgrade to a classifier (e.g., Gradient Boosted Trees) that predicts the highest-probability nudge for each context.31
 
User Recommendation Service Agent
This agent implements a Retrieval-Augmented Generation (RAG) pipeline that pairs semantic retrieval with a tightly scoped prompt.343536 It fetches the user persona, runs a vector search against enriched events, filters for availability and geography, then instructs the LLM to generate a notification under 140 characters highlighting urgency and relevance.37383940
Event Targeting Service Agent
The targeting agent inverts the query: it uses an event's embedding to find compatible diners. Business rules ensure we avoid fatigue (no duplicate nudges, respect opt-outs) while offering event creators a summarized audience snapshot.
Profile Completion Service Agent
Onboarding nudges focus on benefit framing—"complete your profile to unlock better matches"—and a single CTA. Tone guidelines keep the voice supportive and optimistic.37434445
| Microservice Agent | Persona | Core Goal | Psychological Principle | Key Prompt Technique | 
|---|---|---|---|---|
| User Recommendation | Enthusiastic Community Manager | Drive RSVP | Scarcity / Urgency (FOMO)38 | Role-playing & Context Injection | 
| Event Targeting | Data Analyst | Inform Promoter | N/A (Internal-Facing) | Data Summarization | 
| Profile Completion | Welcoming Onboarding Assistant | Drive Profile Edit | Benefit Highlighting43 | Single CTA & Persona Role-playing | 
Real-Time Data Pipeline: The Central Nervous System
Event-driven architecture ensures that every tap, browse, and period of inactivity can trigger the right microservice at the right time.464748 Mobile SDKs capture lifecycle, navigation, and interaction events, streaming them through a Kafka REST proxy to the ingestion layer.50515253
                    Kafka provides durable, replayable streams for building robust trigger logic and analytics.46495455 Consumer services maintain lightweight timers for inactivity thresholds and forward structured triggers to the Intent Service, keeping stream processing separate from AI orchestration.
Translating the Blueprint into Day-to-Day Execution
Beginning: Define the Intent and the Standard
North Star
Every notification should compress intelligence, context, and urgency into fewer than 140 characters while feeling unmistakably "Cuculi." That means consistent tone systems, audit-ready telemetry, and end-to-end observability from prompt to delivery.
We codify the definition of an ideal nudge: concise CTA, direct behavioral reference, and a purposeful psychological trigger. Treating each microservice as a product—with its own metrics, guardrails, and persona—keeps creativity and accountability in balance. The organizational frame borrows from AWS guidance on containerized Flask microservices and serverless agent orchestration patterns to anchor routing discipline before the first prompt ships.1819
Middle: Architect the Agent Mesh
The system is a mesh of RESTful agents, each deployed as a Lambda function fronted by API Gateway. Every service boots with its own persona prompt, guardrails, and telemetry. MongoDB Atlas handles primary storage, enabling low-latency access to user, event, and embedding collections. Vector search becomes the personalization backbone, echoing MongoDB's reference architectures.2122
Transparency is non-negotiable. Responses are templated, logs capture prompt/context/completion/delivery, and observability mirrors best practices from modern push notification playbooks. This foundation lets us iterate quickly without sacrificing trust.
| Service | Endpoint | Input / Output | Key Internal Logic | Prompt Personality Highlights | 
|---|---|---|---|---|
| Intent Nudge | /api/intent-nudge | 
                                In: user_id, recent_activityOut: notification text < 140 characters  | 
                                Classifies member momentum and selects the nudge type using recency and sentiment signals. | Coach-like, direct, and time-bound with scarcity cues when activity dips. | 
| User Event Recommender | /api/recommend-event | 
                                In: user_id, profile vectorOut: event invite message  | 
                                Runs similarity search on event embeddings and cross-checks social proximity. | Conversational, enthusiastic friend persona anchored on shared interests. | 
| Event-to-User Matcher | /api/event-target | 
                                In: event_idOut: batch of {user_id, message}  | 
                                Generates ranked audience lists with fairness weighting. | High-energy promoter emphasizing exclusivity without overpromising. | 
| Profile Completion Guide | /api/complete-profile | 
                                In: user_id, profile statusOut: motivational reminder  | 
                                Surfaces missing profile fields and the benefits unlocked by completing them. | Encouraging mentor tone centered on belonging and value. | 
Prompt Blueprint
Each agent maintains a system prompt snippet that keeps outputs concise, actionable, and psychologically tuned.
You are the Intent Nudge agent for Cuculi.
- Output a single push notification under 140 characters.
- Reference the user's latest dining signal.
- End with one CTA.
- Use urgency or scarcity only when activity has dipped.
- Never fabricate people, places, or rewards.
Context: {{recent_activity_snapshot}}
Goal: Drive the next RSVP within 24 hours.
                End: Orchestrate, Measure, and Keep Human in the Loop
A lightweight router validates payloads, manages retries, and escalates slow LLM calls to async workers powered by serverless queues and Step Functions. Delivery channels (FCM, APNs, SMS) feed open rates and RSVPs back into the loop so prompts evolve with observed behavior.
- Shared dashboards illuminate which agent versions drove lifts across product, engineering, and community teams.
 - Prompt retrospectives treat copy changes like product releases with documented hypotheses and QA sign-off.
 - Human escalation paths keep concierges ready to intervene when nuance demands human judgment.
 
The outcome is an elegant, modular notification stack that feels personal, scales responsibly, and keeps cross-functional teams in sync.
Strategic Roadmap and Conclusion
- Phase 1 – Foundational Layers: Stand up MongoDB Atlas, define schemas, build CRUD APIs, integrate analytics SDKs, and stream raw events into Kafka.
 - Phase 2 – First Value: Deploy the Profile Completion agent with the rules-based Intent Service to drive immediate onboarding improvements.
 - Phase 3 – Core AI Features: Enrich data via LLMs, generate embeddings, configure vector indexes, and launch the Recommendation and Targeting agents.
 - Phase 4 – Optimization & Adaptation: Analyze outcomes, train a machine-learning-powered Intent Service, and evolve prompts based on behavioral feedback.
 
This architecture pairs serverless agility with semantic intelligence so Cuculi can move beyond generic notifications. By inferring intent, enriching data, and orchestrating persona-rich agents, every nudge becomes a strategic invitation that compounds retention and community value.
Works Cited
- A Model for Designing Personalized and Context-Aware Nudges - SciTePress, accessed September 21, 2025, https://www.scitepress.org/Papers/2024/128828/128828.pdf.
 - What Is Nudge Theory? Does It Apply to Change Management? - Prosci, accessed September 21, 2025, https://www.prosci.com/blog/nudge-theory.
 - What is a Recommendation Engine? - MongoDB, accessed September 21, 2025, https://www.mongodb.com/resources/basics/artificial-intelligence/recommendation-engines.
 - What Is User Intent (& How It Improves Conversion Rates) - Coveo, accessed September 21, 2025, https://www.coveo.com/blog/what-is-user-intent/.
 - The Importance of Understanding User Intent for Creating Successful Mobile Apps, accessed September 21, 2025, https://contextsdk.com/blogposts/the-importance-of-understanding-user-intent-for-creating-successful-mobile-apps.
 - LLM-as-Microservice: Integration Patterns and Trade-offs | by Shukri Shukriev | Medium, accessed September 21, 2025, https://shukriev.medium.com/llm-as-microservice-integration-patterns-and-trade-offs-f05b29945489.
 - Learning to Build Scalable LLM Chat Application: Microservices ..., accessed September 21, 2025, https://shaktiwadekar.medium.com/learning-to-build-scalable-llm-chat-application-microservices-architecture-and-docker-93ea1335871e.
 - LLM-Generated Microservice Implementations from RESTful API Definitions - arXiv, accessed September 21, 2025, https://arxiv.org/html/2502.09766v1.
 - Serverless Computing with Flask and AWS Lambda - Mangum, accessed September 21, 2025, https://mangum.io/serverless-computing-with-flask-and-aws-lambda/.
 - To Flask or not to Flask with AWS Lambda | by Jay Shah | Medium, accessed September 21, 2025, https://medium.com/@shahjaykiran/to-flask-or-not-to-flask-with-aws-lambda-aee525dfb004.
 - Why or why not use AWS Lambda instead of a web framework for your REST APIs? (Business projects) : r/Python - Reddit, accessed September 21, 2025, https://www.reddit.com/r/Python/comments/1092py3/why_or_why_not_use_aws_lambda_instead_of_a_web/.
 - Flask & Django on AWS Lambda: Serverless Python Made Simple | by Akhshy Ganesh, accessed September 21, 2025, https://medium.com/@akhshyganesh/flask-django-on-aws-lambda-serverless-python-made-simple-b36e568f9c3c.
 - End-to-End Tutorial on Combining AWS Lambda, Docker, and Python : r/flask - Reddit, accessed September 21, 2025, https://www.reddit.com/r/flask/comments/13cqx6g/endtoend_tutorial_on_combining_aws_lambda_docker/.
 - Tutorial: Build a REST API with AWS API Gateway and Lambda - Cloud 303, accessed September 21, 2025, https://home.cloud303.io/blog/aws-knowledge-base-100/tutorial-build-a-rest-api-with-aws-api-gateway-and-lambda-100.
 - AWS API Gateway: The ultimate guide - Solo.io, accessed September 21, 2025, https://www.solo.io/topics/api-gateway/aws-api-gateway.
 - Using AWS Lambda with API Gateway - Baeldung, accessed September 21, 2025, https://www.baeldung.com/aws-lambda-api-gateway.
 - AWS Lambda Events - REST API (API Gateway v1) - Serverless Framework, accessed September 21, 2025, https://www.serverless.com/framework/docs/providers/aws/events/apigateway.
 - Flask on AWS Serverless: A learning journey - Part 1 - Hacksaw, accessed September 21, 2025, https://hacksaw.co.za/blog/flask-on-aws-serverless-a-learning-journey-part-1/.
 - How to deploy Flask app on aws lambda?, accessed September 21, 2025, https://repost.aws/questions/QUsNTRMwF3QF-89DVEzCSJNQ/how-to-deploy-flask-app-on-aws-lambda.
 - Deploy a serverless Flask app with Zappa and Amazon RDS - Mattermost, accessed September 21, 2025, https://mattermost.com/blog/deploy-a-serverless-flask-app-with-zappa-and-amazon-rds/.
 - MongoDB Atlas Vector Search: A Comprehensive Guide - GeoPITS, accessed September 21, 2025, https://www.geopits.com/blog/a-guide-to-mongodb-atlas-vector-search.html.
 - Atlas Vector Search - MongoDB, accessed September 21, 2025, https://www.mongodb.com/products/platform/atlas-vector-search.
 - Building with LLMs: A Machine Learning Course Recommendation Engine, accessed September 21, 2025, https://apxml.com/posts/how-to-build-ml-course-recommendation-engine.
 - Need help building a customer recommendation system using LLMs : r/LLMDevs - Reddit, accessed September 21, 2025, https://www.reddit.com/r/LLMDevs/comments/1kwehqc/need_help_building_a_customer_recommendation/.
 - MongoDB Vector Search Overview - Atlas - MongoDB Docs, accessed September 21, 2025, https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/.
 - Get Started with the MongoDB LangChain Integration - Atlas, accessed September 21, 2025, https://www.mongodb.com/docs/atlas/ai-integrations/langchain/get-started/.
 - How to Create Vector Embeddings - Atlas - MongoDB Docs, accessed September 21, 2025, https://www.mongodb.com/docs/atlas/atlas-vector-search/create-embeddings/.
 - MongoDB Atlas - LangChain.js, accessed September 21, 2025, https://js.langchain.com/docs/integrations/vectorstores/mongodb_atlas/.
 - MongoDB Atlas Vector Search in .NET (full tutorial) - YouTube, accessed September 21, 2025, https://www.youtube.com/watch?v=LQJJjIjUW6U.
 - The Conundrum of Using Rule-Based vs. Machine Learning Systems, accessed September 21, 2025, https://www.zucisystems.com/blog/the-conundrum-of-using-rule-based-vs-machine-learning-systems/.
 - Rules Based Engine vs Machine Learning Monitoring Systems, accessed September 21, 2025, https://www.logicloop.com/fraud-risk/machine-learning-vs-rules-based-monitoring.
 - Navigating the Future of Decision Management - Rules Engines vs. Machine Learning, accessed September 21, 2025, https://www.higson.io/blog/navigating-the-future-of-decision-management-rules-engines-vs-machine-learning/.
 - Rule Engine vs Machine Learning? - GeeksforGeeks, accessed September 21, 2025, https://www.geeksforgeeks.org/machine-learning/rule-engine-vs-machine-learning/.
 - Build a LLM powered semantic recommendation engine - Craft AI, accessed September 21, 2025, https://www.craft.ai/en/post/build-a-llm-powered-semantic-recommendation-engine-using-a-vector-database.
 - Integrate MongoDB with LangChain - Atlas, accessed September 21, 2025, https://www.mongodb.com/docs/atlas/ai-integrations/langchain/.
 - MongoDB Atlas | 🦜️ LangChain - ️ LangChain, accessed September 21, 2025, https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas/.
 - Prompt Engineering for Large Language Models (LLMs), accessed September 21, 2025, https://www.gravitee.io/blog/prompt-engineering-for-llms.
 - Turning Intent into Action: how the Create Action Funnel empowers UX Design - Medium, accessed September 21, 2025, https://medium.com/design-bootcamp/turning-intent-into-action-how-the-create-action-funnel-empowers-ux-design-c26e8ba98515.
 - AI Prompt Engineering: Complete Guide + Examples - Prismic, accessed September 21, 2025, https://prismic.io/blog/prompt-engineering.
 - Tutorial | Prompt engineering with LLMs - Dataiku Knowledge Base, accessed September 21, 2025, https://knowledge.dataiku.com/latest/gen-ai/text-processing/tutorial-prompt-engineering.html.
 - Vector Search | Vertex AI | Google Cloud, accessed September 21, 2025, https://cloud.google.com/vertex-ai/docs/vector-search/overview.
 - What Is Vector Search? Definition and Examples | TigerData, accessed September 21, 2025, https://www.tigerdata.com/learn/understanding-vector-search.
 - The Complete Guide To In-App Nudges 2025: Building Seamless User Experiences, accessed September 21, 2025, https://nudgenow.com/blogs/in-app-nudges.
 - Crossing the Finish Line with Behavioral Nudges, accessed September 21, 2025, https://knowledge.technolutions.net/docs/behavior-based-application-outreach.
 - Nudging Basics: Contextual Nudges in Apps | by Anna Po | Medium, accessed September 21, 2025, https://medium.com/@helloannapo/behavioural-design-basics-contextual-nudges-in-apps-1d3232c46cea.
 - How to build real-time systems with Apache Kafka - StatusNeo, accessed September 21, 2025, https://statusneo.com/how-to-build-real-time-systems-with-apache-kafka/.
 - Event-Driven Architecture (EDA): A Complete Introduction - Confluent, accessed September 21, 2025, https://www.confluent.io/learn/event-driven-architecture/.
 - How to Implement Event-Driven Architecture for Real-Time Apps? - Maruti Techlabs, accessed September 21, 2025, https://marutitech.com/event-driven-architecture-real-time-apps/.
 - Real-Time Event Streaming: RudderStack vs. Apache Kafka, accessed September 21, 2025, https://www.rudderstack.com/blog/real-time-event-streaming-rudderstack-vs-apache-kafka/.
 - Mobile App Tracking: Practical Guide & Best Tools [2025] - UXCam, accessed September 21, 2025, https://uxcam.com/blog/mobile-app-tracking-tools/.
 - How to Implement Analytics Mobile App? (2025 Update) - Netguru, accessed September 21, 2025, https://www.netguru.com/blog/analytics-in-mobile-app.
 - 8 Mobile App Analytics Tools to Build Better Apps | Fullstory, accessed September 21, 2025, https://www.fullstory.com/blog/mobile-app-analytics-tools/.
 - Tracking User Activity in Web Applications: Effective Tactics & Tools - Userpilot, accessed September 21, 2025, https://userpilot.com/blog/tracking-user-activity-in-web-applications/.
 - Powered By - Apache Kafka, accessed September 21, 2025, https://kafka.apache.org/powered-by.
 - Building scalable real time event processing with Kafka and Flink - DoorDash, accessed September 21, 2025, https://careersatdoordash.com/blog/building-scalable-real-time-event-processing-with-kafka-and-flink/.