morline.

Issue №1
Deployment

morline.

Deploy the parts. Keep every service, database and worker in view, connected, and in its place.

Morline turns a repository into a running system — then keeps the whole system on one canvas, so you always see what talks to what.

No YAML walls.
No lost context.
Just momentum.

Scroll ↓
Sheet 01 / 05

Fig. 02 · The system
Movement study

Everything you run, laid out like it actually is.

8 services
3 private links
1 environment

web · Next.js / 3 replicas
postgres · volume 20 GB
cache · private network
api · go 1.23 / healthy
worker · cron */5
image · ghcr.io / latest

Observation A

Push a commit.

Connect a repo or bring an image. Builds start where your code lives.

Observation B

Draw the line.

Services find each other over private networking. The link is on the canvas, not in a doc.

Observation C

Stay with it.

Logs, health, metrics and rollbacks sit next to the thing they describe.

Fig. 03 · The viewfinder
Framing study

Zoom in. Nothing leaves the frame.

AF locked
f/1.8 · fra-1

REC · live · deploy #412

apibuild: go build -o /app ./cmd/server (cached 34 layers)

apihealthcheck: waiting for GET /healthz on :8080

webGET /dashboard 200 38ms

workerpicked job webhook.retry id=8812 attempt=2

apilistening on 0.0.0.0:8080 (3 replicas)

Logs, health and rollbacks —
always in focus.

ISO 100 · 1.8s exposure
Frame 03 / 05

Fig. 04 · Field notes
Ledger study

Everything leaves a paper trail.

Filed under
deploys

09:41deploy #412 queued · fra-1

09:41build 1.8s · ghcr.io/morline/api:latest

09:42healthcheck passing · 3/3 replicas

09:42private link attached · api → postgres

09:43traffic shifted · 0% → 100%

09:43● live — rollback armed

No context lost.
No doc archaeology.

Approved for deploy

Ledger 04
Page 112

The current

Plate · The current
after Hokusai · Edo
A system in motion, seen whole.

fra-1 → iad → sin
traffic flows east

Sheet 05 / 05 · The signal
production · live

Ship it.
Watch it
breathe.

01apibuild: go build -o /app ./cmd/server (cached 34 layers)

02apihealthcheck: waiting for GET /healthz on :8080

03webGET /dashboard 200 38ms

04workerpicked job webhook.retry id=8812 attempt=2

05apilistening on 0.0.0.0:8080 (3 replicas)

06webGET /api/projects 200 112ms

07workerstripe responded 429, backing off 2s

08pgcheckpoint complete: wrote 412 buffers (2.5%)

09cronpanic: column "exported_at" does not exist

10cronprocess exited with code 101

● deployment live — 1.8s