Services Used
CaterCow's Technology Services
At CaterCow, we leverage a suite of cloud services and tools to build, maintain, and scale our platform. This document outlines the key services we use, what they are, and why they are critical to our operations.
When evaluating which technology services to adopt, we conduct thorough research into available alternatives and often build prototypes to assess their suitability for our needs. Whenever possible, we prefer open-source solutions, as they provide flexibility and help us avoid vendor lock-in. However, we frequently choose the managed cloud offerings of these open-source tools, allowing us to outsource infrastructure management and maintenance while retaining the option to self-host if our requirements change in the future.
Infrastructure and Hosting
Our core infrastructure is centered around Google Cloud Platform, chosen for its strength in container orchestration. However, we continue to use key services from Amazon Web Services, mostly for legacy reasons.
Google Cloud Platform (GCP)
- What it is: A suite of cloud computing services that runs on the same infrastructure that Google uses internally for its end-user products, such as Google Search, Gmail, and YouTube.
- Why we need it: Our application was previously hosted on AWS. However, as we transitioned our architecture to a container-based model using Docker and Kubernetes, we migrated our primary hosting to GCP. Google's leadership and mature tooling in the Kubernetes ecosystem with GKE made it the ideal environment for running our containerized services.
Google Kubernetes Engine (GKE)
- What it is: A managed environment for deploying, managing, and scaling containerized applications using Google infrastructure. GKE provides a secure and efficient way to run our various microservices.
- Why we need it: GKE allows us to break down our application into smaller, manageable services. This architecture improves development velocity, enhances scalability, and increases fault tolerance. We can scale individual services based on demand, ensuring efficient resource utilization.
Google Cloud Run
- What it is: A fully managed serverless platform that enables us to run stateless containers that are invocable via web requests.
- Why we need it: We use this for our restaurant demo instance and content preview Nuxt 3 application for live previews in Storyblok. It's really low-maintenance and affordable for these unique needs.
Google Cloud SQL
- What it is: A fully-managed relational database service that makes it easy to set up, maintain, manage, and administer our MySQL databases in the cloud.
- Why we need it: Cloud SQL handles the operational overhead of running a database, including backups, replication, and patches. This allows our engineering team to focus on building features rather than managing database infrastructure, ensuring our data is always available and secure.
Google Cloud Memorystore
- What it is: A fully-managed in-memory data store service for Redis. It automates the complex tasks of provisioning, replication, failover, and patching.
Modal.com
- What it is: A cloud platform for running custom machine learning models and serverless workloads.
- Why we need it: We use Modal to host our fine-tuned models, particularly those used for labeling dietary information on menu items. Modal's serverless approach keeps our costs very low—rarely more than $5 per month—while providing the flexibility to deploy and update models as needed without managing infrastructure.
Amazon Web Services (AWS)
- What it is: A comprehensive and broadly adopted cloud platform, offering over 200 fully featured services from data centers globally.
- Why we need it: While our main application hosting has moved to GCP, we continue to depend on AWS for file storage and DNS.
Amazon S3 (Simple Storage Service)
- What it is: An object storage service that offers industry-leading scalability, data availability, security, and performance.
- Why we need it: S3 is the de-facto standard for file storage, and we use it for nearly all file uploads done in-app.
Amazon Route 53
- What it is: A highly available and scalable cloud Domain Name System (DNS) web service.
- Why we need it: It's a DNS service, not much more to say here.
Development and Deployment
A streamlined and efficient development lifecycle is key to our ability to innovate and respond to customer needs.
Semaphore CI
- What it is: A continuous integration and continuous delivery (CI/CD) platform that helps automate the building, testing, and deployment of our software.
- Why we need it: We chose Semaphore CI for its simplicity and power. Its reliance on minimal abstractions and basic shell scripting gives us granular control over our deployment pipelines. The fast machines and the ability to define pipelines with user input mean our deployments are as automated as we want them to be, providing a perfect balance of control and efficiency.
Communication and Engagement
Mailgun
- What it is: An email service provider for sending, receiving, and tracking emails.
- Why we need it: Mailgun ensures the reliable delivery of our transactional emails, such as order confirmations, receipts, and password resets. Its robust infrastructure and detailed analytics help us maintain a high level of deliverability and troubleshoot any issues quickly.
Customer.io
- What it is: A customer engagement platform that allows us to send targeted emails, push notifications, and SMS messages based on user behavior.
- Why we need it: Customer.io is our go-to tool for all our marketing and lifecycle email campaigns. It enables us to create sophisticated behavioral email campaigns and engaging newsletters, helping us to nurture leads, onboard new users, and retain existing customers.
Twilio
- What it is: A cloud communications platform that allows software developers to programmatically make and receive phone calls, send and receive text messages, and perform other communication functions using its web service APIs.
- Why we need it: Twilio powers our automated SMS notifications, providing timely updates to our customers and catering partners. We also utilize it for a manual Group MMS integration within Front, which is essential for coordinating complex catering orders that involve multiple stakeholders.
Custom Group MMS API Gateway on Fly.io
- What it is: A custom-built API gateway hosted on Fly.io that facilitates our Group MMS integration with Front.
- Why we need it: To meet the specific needs of our group messaging requirements for catering orders, we developed a custom solution. Hosting it on Fly.io allows for rapid deployment and easy scaling in a serverless environment, providing a reliable and cost-effective way to power this critical communication feature.
Content, Analytics, and Payments
Self-hosted Ghost on DigitalOcean
- What it is: Ghost is a powerful and modern open-source publishing platform. We host our own instance of it on a DigitalOcean droplet.
- Why we need it: Self-hosting our blog gives us complete control over our content, branding, and technical implementation. DigitalOcean provides a cost-effective and reliable infrastructure for this purpose, allowing us to share valuable content with our community without being constrained by a third-party platform's limitations.
Storyblok
- What it is: A headless Content Management System (CMS) that enables us to manage our website content in a flexible and developer-friendly way.
- Why we need it: Storyblok's headless architecture allows us to separate our content from its presentation. This means we can deliver content to any platform or device, be it our website, mobile apps, or other future applications, all from a single, easy-to-use interface.
Self-hosted Metabase on Google App Engine
- What it is: An open-source business intelligence and analytics tool that allows us to explore and visualize our data. We host it on Google App Engine.
- Why we need it: Metabase empowers our entire team to ask questions of our data and get answers in a simple, visual way. By self-hosting on App Engine, we maintain control over our data and can easily scale our analytics capabilities as our data volume grows, all while integrating seamlessly with our Google Cloud infrastructure.
PostHog
- What it is: An open-source product analytics platform that provides a suite of tools including session recording, heatmaps, and feature flags.
- Why we need it: PostHog gives us deep insights into how users are interacting with our platform. By understanding user behavior, we can identify pain points, prioritize new features, and ultimately build a better product. The ability to self-host gives us full ownership of our analytics data.
Stripe
- What it is: A comprehensive suite of payment APIs that powers commerce for online businesses of all sizes.
- Why we need it: Stripe is the backbone of our financial transactions. It provides a secure and developer-friendly way to process customer payments. Crucially, we use Stripe Connect to seamlessly manage and automate payouts to our restaurant partners, which is a core requirement of our marketplace business model.
Monitoring and Operations
Sentry
- What it is: An open-source error tracking platform that helps developers monitor and fix crashes in real-time.
- Why we need it: Sentry is our eyes and ears for the health of our application. It provides us with detailed error reports, performance monitoring, and observability into our systems. This allows us to proactively identify and resolve issues, often before they impact our users, ensuring a stable and reliable platform.
Nash
- What it is: A third-party delivery dispatch platform that helps businesses manage and optimize their last-mile logistics.
- Why we need it: For our catering deliveries, Nash provides a streamlined and efficient way to dispatch and track orders. It helps us ensure that our food arrives on time and that our customers have a positive delivery experience, which is a critical component of our service.
Woflow
- What it is: A service that specializes in processing unstructured data, such as menus, into structured and usable formats.
- Why we need it: Woflow is instrumental in helping us onboard new catering partners quickly and efficiently. By automatically processing menus into structured data, it saves us a significant amount of manual effort and ensures that the menu information on our platform is accurate and consistent.
Jspreadsheet
- What it is: A lightweight JavaScript plugin for creating interactive and feature-rich spreadsheets and data grids on a web page.
- Why we need it: Jspreadsheet provides an efficient, spreadsheet-like interface for the bulk editing of records within our internal tools, most notably for managing menu items. This is far more efficient than standard web forms for large-scale data entry and updates. We own a perpetual license and pay for ongoing support to ensure the tool remains up-to-date and reliable.
Meilisearch Cloud
- What it is: A lightning-fast, open-source search engine with a focus on developer experience and ease of use. We use their cloud offering.
- Why we need it: Meilisearch powers our hybrid AI and full-text search capabilities. This allows our users to easily and intuitively find the perfect caterer by searching for specific dishes, dietary preferences, or cuisines, even with typos or synonyms. The speed and relevance of our search are key to a positive user experience.
Expo
- What it is: An open-source platform for making universal native apps for Android, iOS, and the web with JavaScript and React.
- Why we need it: Expo simplifies the process of building and deploying our native mobile apps. It provides a suite of tools and services that streamline development, allowing us to iterate faster and deliver a high-quality mobile experience to our users on both major platforms.
Hubspot API
- What it is: An application programming interface (API) for HubSpot's customer relationship management (CRM) platform.
- Why we need it: The Hubspot API is crucial for automating our sales and commission processes. We use it to automatically log sales outreach activities and to grant commissions to our sales team. This automation eliminates manual data entry, reduces errors, and ensures that our sales operations run smoothly and efficiently.