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

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.

an old wizard killing a phoenix with a sword, digital art

Kill your Phoenix Context

Phoenix Contexts often become a dumping ground for code that doesn't have an obvious place. Learn how to organize your code using services, finders, and repositories.

an old wizard throwing a big key into the cloudy sky, digital art

Upload Encrypted Files to S3

Encrypting sensitive user files before uploading them to S3 is a must. This post shows how to encrypt and upload them and also how to download and decrypt them again using encryption keys unique per user.

an old wizard holding up a VCR videocassette into the camera standing in his chemical laboratory, digital art

Announcing my new Video Course!

My first video course "Build an MVP with Elixir" helps you to get started with Elixir by building a real-world product together!

an old wizard listening through a door, digital art

Listen to Database Changes with Postgres Triggers and Elixir

Postgres Notifications allow you to subscribe to any changes in your database, even if they weren't made by your Elixir application! Let's learn how to set them up!

an old map with marked countries and their flags lying on a wooden table, old wizard hunching over the map, digital art

Build dynamic Forms with JSON Schemas

Define custom forms without writing a single line of HTML. JSON Schemas help you define and adjust forms and validate user input all through a single configuration file.

A futuristic numbat reading a book

Use Neural Networks in Livebook

The latest Livebook version 0.8 comes with a new smart cell type that makes experimenting with neural networks like StableDiffusion, GPT2, and others incredibly easy. Let's learn how to get started.

A phoenix rising from a computer screen

Build a Roles and Permissions System for Phoenix - Part 2

Learn how to prevent PII leaks from your Ecto queries by adding query restrictions to your Roles and Permissions system.