Michigan Pulse - Using Elixir-Phoenix To Build A Data Platform

3 min read Original article ↗

Introduction

Learning Elixir combined with the Phoenix Framework to build michigan-pulse.com has been a fun and rewarding experience for our dev team.

At its surface, this stack seems small in ecosystem size and incapable of building web-based SaaS products. I’ve found this to be the opposite, as Phoenix streamlines a lot of the pain points when building CRUD apps with a simple but opinionated router, good scaffolding, and expressive syntax.

The ecosystem is small, I will admit that. I believe Elixir more than makes up for it by the libraries being incredibly usable.

Other than .NET & maybe Go, the only other ecosystem I trust is Elixir & Phoenix when building enterprise/SaaS applications.

I recognize there are other frameworks and languages out there that are capable.


michigan-pulse.com is the first community-driven data hub focused specifically on Michigan’s technology and economic landscape. The core motivation was recognizing a major gap in the market: founders, operators, and technologists in the state lacked a single, canonical source of truth for reliable, high-signal data.

The application needs to handle a lot of data, complex search and filtering, and eventually, real-time community interaction. All requirements that lend themselves perfectly to the Elixir/Phoenix stack.


BEAM, LiveViews

The fundamental trust placed in this stack starts with the BEAM, the Erlang Virtual Machine.

It’s not merely a language runtime like Node.js. It’s a distributed platform built for concurrency, low latency, and fault tolerance.

For a growing SaaS application like Michigan Pulse, the BEAM’s ability to handle thousands of concurrent user connections and processes without requiring complex load balancing or worrying about state leaks is a massive operational win.

It may be overkill, but at least I will never stress about scalability.

However, the game-changer for building modern web applications is Phoenix LiveView.

LiveView is why we can deliver a rich, real-time, single-page application (SPA) feeling without writing a single line of client-side JavaScript.

LiveView works by establishing a single WebSocket connection and allowing the server (our Phoenix application) to manage all the UI state.

When a user interacts with the page, only minimal patches of HTML are sent over the wire, instantly updating the browser.

This results in:

  1. Productivity: All logic stays in Elixir.
  2. Maintenance: There is no API layer (REST/GraphQL) to maintain for 90% of the application.
  3. Real-Time by Default: Features like instant search filtering or live-updating data feeds are trivial to implement.

Ship More, Maintain Less

Ultimately, the choice of Elixir and Phoenix boiled down to the Developer Experience.

We can build real-time features and once those features are deployed, we can be highly confident that the BEAM will keep them stable.

This allows Michigan Pulse to focus on data acquisition and community growth, rather than wrestling with dependency graphs or production scaling issues.

The combination of Phoenix’s efficient database layer, the BEAM’s resilience, and LiveView’s productivity boost makes this stack, in my view, the most pragmatic choice for any data-intensive product.

Contact us today to get started with you next custom software project.


[Top]