# A walk through a deploy

> What actually happens between a commit and a running application — with the screens.

Source: https://naasson.com/en/blog/a-walk-through-a-deploy/
Published: 2026-07-19
Language: en
Product: Naasson Apps (https://naasson.com/en/products/naasson-apps/)
Publisher: Naasson — https://naasson.com

---
A deploy on Naasson Apps is boring in the best way: you push, you read a diff, you
apply. Here is the whole path, with the screens you actually see.

<Figure src={wide} alt="The reconcile view before apply" caption="The plan view: what will change, before anything does." />

The commit is the source of truth. Nothing runs that is not described in the
repository, so the first thing the system does is compare intent to reality.

<Callout type="tip" title="Read the diff, always">
The apply step is deliberately a separate action. A plan that looks wrong is a
plan you can throw away for free — which is the entire point of doing it first.
</Callout>

## What you see along the way

Each stage has its own view. Scroll the strip — it runs off to the edge on
purpose, so the images stay large.

<Gallery items={[
  { src: shot1, alt: 'Repository and commit', caption: 'The commit that triggered the run.' },
  { src: shot2, alt: 'Reconcile plan', caption: 'The reconcile plan, resource by resource.' },
  { src: shot3, alt: 'Certificates', caption: 'Certificates issued and validated.' },
  { src: shot4, alt: 'Health checks', caption: 'Health checks going green.' },
]} />

Click any frame to open it full-size.

<Pullquote cite="Our deploy checklist">
If a change cannot be described in the repository, it is not a change we know how
to roll back — so it is not a change we make.
</Pullquote>

## The shape of a run

<Stat items={[
  { value: '270+', label: 'self-hosted apps in the catalogue' },
  { value: '1', label: 'binary that provisions everything' },
  { value: '0', label: 'hand edits to the running cluster' },
]} />

And the whole thing, start to finish, as a short clip:

<Video src="/media/deploy-demo.mp4" poster={poster.src} caption="A full reconcile, sped up. Hosted on our own server — no third-party player." />

<Callout type="warn" title="One caveat">
This is infrastructure, not a managed service. If you need someone on the other
end of a ticket at 3am, say so early — this is the wrong tool for that, and we
would rather be honest about it.
</Callout>

That is the loop: push, read, apply. Everything else is detail.