Peter Ullrich's Picture

Hey, I’m Peter! Developer & Educator.

I'm a Senior Elixir developer with a Psychology background, PragProg Author, Public Speaker and Blogger, Founder of Letter to Yourself. I'm passionate about Software Architecture, Product Engineering, and sharing knowledge.


The book cover of the Builting Table Views with Phoenix LiveView book showing three meerkats.

Building Table Views with Phoenix LiveView

Data is at the core of every business, but it is useless if nobody can access it. This book shows you how to generate business value by making your data accessible with advanced table UIs.
The book cover of the Builting Table Views with Phoenix LiveView book showing three meerkats.

Build an MVP with Elixir

New to Elixir? This video course gets you started by developing a real-world product using Phoenix LiveView, deploying it to, adding payments to it using LemonSqueezy, and more.

Blog Posts

An elderly wizard, looking desperate as he tries to block out the intense singing of the phoenix. The scene captures his overwhelming distress in a vivid and colorful setting.

Handle Phoenix Exceptions gracefully

Silence the noisy Phoenix.NotAcceptableError and Plug.CSRFProtection.InvalidCSRFTokenError exceptions in your Phoenix application by implementing the Plug.Exception protocol for them.

An image of a vibrant phoenix positioned behind the planet Earth, hurling files at different regions on the globe. Each file has a streak behind it, and explosions are shown where the files hit the globe.

Distribute your Files Globally with Tigris and

Serve your files quickly to users all around the globe with just a small configuration change using Tigris' globally distributed S3-compatible storage solution.

A wizard sending an image into a cloud, with a rainbow in the background and a phoenix sitting next to the wizard.

Resize User-provided Images with Cloudflare Images

Learn how to upload user-provided images to Cloudflare Images and to resize them into size variants that are optimal for your application.

a wizard sending an owl with a letter through the window.

Sending Emails with Swoosh and Oban

Learn how to send emails from robust Oban workers so that you'll never miss sending an email again.

A wizard wearing a flaming halo as a crown on his head, with a majestic phoenix in the background and a hat hanging on the wall. The scene captures a mystical and awe-inspiring atmosphere.

Every Ending is a new Beginning

Announcing my departure from employment life and the start of my freelancing and entrepreneurship life. At least until further notice.

A wizard catching an elephant that flies through the air, forest landscape in the background, digital art

Test an external, read-only Repository in Phoenix

When your application connects to an external database in read-only mode, it becomes difficult to write proper tests for it. This post explains how to set up a simulated external database locally to make testing becomes easy again.

a wizard's apprentice juggling documents while standing on a large book, forest landscape in the background, digital art

Work with Files in Livebook

Learn how to upload, process, and download files to and from Livebook.

a wizard's apprentice opening a drawer at the top of a wizard's tower, forest landscape in the background, digital art

Animate a Side Drawer with LiveView.JS

LiveView.JS is great for client-side animations because no round-trip to the server is needed. Here's how you can use JS to animate a side drawer.

a young wizard apprentice looking at a book with a magnifying glass in an old library, digital art

Unaccented Name Search with Postgres and Ecto

Postgres does not support searching for names with special characters by default. Here is how to fix it.

a wizard stealing a secret book from the lair of a phoenix, digital art

How malicious libraries can steal all your application secrets

Adding libraries is a massive security risk. They gain FULL access to your configuration, database, and file-system. Here's how they could steal them and how to protect yourself.