Skip to main content

Mangrove Architecture

· 2 min read
Jason Walsh

Mangrove helps homeowners find rebates and incentives so they upgrade their home to reduce their utilities costs and their climate footprint. Take a peek at Mangrove's user interface here.

This blog covers technical details about what was involved in building Mangrove.

Version Control Stats

Using git-fame, we can look at the scale of Mangrove.

Total commits: 548
Total files: 775
Total lines of code: 423,275

Deploy Frequency

2024-02-27       1.13.0
2024-02-22 1.12.0
2024-02-20 1.11.0
2024-02-09 1.10.0
2024-02-08 1.9.0
2024-02-01 1.8.0
2024-01-31 1.7.2
2024-01-31 1.7.1
2024-01-31 1.7.0
2024-01-29 1.6.0
2024-01-26 1.5.0
2024-01-22 1.4.1
2024-01-22 1.4.0
2024-01-19 1.3.1
2024-01-18 1.3.0
2024-01-15 1.2.0
2024-01-10 1.1.0
2024-01-08 1.0.0
2023-12-02 0.0.4
2023-11-17 0.0.3
2023-11-05 0.0.2

Over 16 weeks, we deployed 20x to production (3 hotfixes), a cadence of ~1 deploy / wk.

Architecture (Birds-Eye View)

Mangrove's architecture consists of:

  • Authentication / Authorization
  • Billing using Stripe
  • Minimal deployment infrastructure using fly.io
  • Documentation
  • Unit / Integration tests
  • API integrations
    • Image OCR processing
    • Image storage and optimization with AWS
    • Slack
    • Uploadcare
    • Google Search Engine
    • OpenAI
    • Customer.IO
    • Sendgrid
    • Uploadcare
    • Google Maps
    • Google OAUTH
    • Zapier integration via API Key auth
    • Multiple custom data ingestion integrations from various sources
  • Has a built in web search and scrapers/crawlers for finding incentives on, powered partially by AI
  • Built in web search and scrapers/crawlers for finding sales prospects who fit our niche
  • Supports CSV uploads
    • Household appliances
    • Client lists
    • Location/household data
    • Incentive data
    • Sales prospects
  • Inbound / outbound webhook support
  • Custom event / analytics system

Database Stats

The production database stores:

  • 100k household appliances
  • 3k+ places (households)
  • 1k+ tax incentives / rebates across all 50 states
  • 20k+ analytic events

It's currently happily handling all inbound requests on a 256MB CPU on fly.io. It has a 2GB volume, but we're not near that limit just yet.

DB CPU is so small due to intermittent, generally non-concurrent traffic due to the nature of our product as well as tuning of SQL queries.

Tooling / Tutorials