University of Central Punjab
Munim Ahmad L1F22BSCS0412
Mohammad L1F22BSCS0417
M. Haris Shakeel L1F22BSCS0434
Supervisor — Muhammad Asif Haroon · Group F25CS088
Final Year Project · Phase 4 — Defense
Liftoff
A Deploy-as-a-Service platform
Push once. Deploy anywhere.
$ git push origin main built & pushed to your registry live my-app.ondigitalocean.app
Liftoff · F25CS088Agenda

Today's flight plan

01Introthe problem & the idea
02Demogit push → live, in real time
03Under the Hoodarchitecture · security · data
04Wrap-upresults & questions
Host Intro Host Demo Host · Under the Hood
Liftoff · F25CS088The cloud today

A fractured experience

Shipping one app means stitching together seven-plus disconnected tools — each its own setup, each a place to break.

Disjointed. Repetitive. Error-prone.

Code
GitHub
CI / CD
Docker
Registry
Infra
Logs & alerts
Liftoff · F25CS088The cost of choice

Each module — its own stack of tools

Liftoff
one platform · your cloud
Liftoff · F25CS088The idea

Pick a repo. Deploy.

your GitHub repo
Liftoff
🌐live app

Connect once. Then just git push — Liftoff does the rest.

Liftoff · F25CS088What makes it different

Your cloud. Your bill. Zero lock-in.

Every resource lives in your DigitalOcean account — created with your token, as standard Docker images and plain infrastructure-as-code.

PlatformWhere your app runsYou own it?
Heroku · Vercel · RailwayTheir infra (resold)✕ black box
Render · NetlifyTheir platform✕ black box
LiftoffYour own DigitalOcean✓ full ownership
Liftoff · F25CS088Scope

One push. Liftoff does the rest.

Push to deploy
One git push → fully automated pipeline.
Builds your image
Dockerfile-first, Nixpacks fallback → your DOCR.
Your own cloud
Pulumi provisions App Platform · Postgres · Spaces.
Live & real-time
Streamed logs on an interactive canvas.
Resilient
Auto-rollback + multi-service deploys.
Observable
Runtime CPU / memory / bandwidth metrics.
Part 02 · Live
Demo.
A real git push, deployed to the cloud — live.
03
Part Three

Under the Hood

Architecture · orchestration · security · data · testing
Liftoff · F25CS088Architecture

Two planes, one token

System architecture
  • TypeScript end-to-end · pnpm + Turborepo
  • NestJS API + Next.js dashboard · Postgres + Redis
  • Control plane (our SaaS) ↔ data plane (your DO)
Liftoff · F25CS088Tech stack

A modern, typed foundation

Frontend
Next.js 14React 18React FlowTailwind · shadcn
Backend
NestJS 10Prisma 5PassportSocket.io
Async
BullMQRedis 72 queues · 4 jobs
Infra / IaC
PulumiDockerNixpacks
Data
PostgreSQL 15DO Spaces
DevOps
GitHub ActionsAzure Container AppsOIDC
Liftoff · F25CS088Data flow

The push-to-deploy pipeline

  • git push → webhook, HMAC-verified
  • Build in GitHub Actions → user's DOCR
  • Callback → Pulumi provisions in user's DO
  • Patch App Platform → poll → live URL
Push-to-deploy sequence
Liftoff · F25CS088Reliability

11 states. Auto-rollback.

Deployment state machine
  • Every deploy is a persisted state machine
  • Existing stack? Patch image, skip provisioning
  • On failure → auto-rollback to last-good image
Liftoff · F25CS088Orchestration & isolation

Your secrets never enter our process

Pulumi runs as an isolated child process. Your decrypted DO token lives only in its environment — never in the API's memory.
  • Per-tenant Provider({ token }) per run
  • Two BullMQ queues drive the work
Deployment swimlane
Liftoff · F25CS088Security

Security as a first-class concern

  • AES-256-GCM for tokens, secrets & vault values
  • Webhooks verified by HMAC-SHA256
  • JWT access + rotating refresh (HTTP-only)
  • DO token validated — never returned or logged
Auth sequence
Liftoff · F25CS088Data model

A graph-native schema

Entity-relationship diagram
  • Services, resources & directed edges
  • Edges drive automatic variable injection
  • ~20 models · encrypted vars · soft-delete
Liftoff · F25CS088Frontend & UX

A Railway-style live canvas

app.liftoff — canvas
Live deployment canvas
  • Your environment as a live graph (React Flow)
  • Draw an edge to wire Postgres → service
  • Status animates live — no refresh
Liftoff · F25CS088Hosting & CI/CD

How the platform ships itself

  • Control plane on Azure Container Apps
  • One workflow: typecheck → test → deploy
  • GitHub OIDC → managed identity, no stored secrets
  • Tests gate the deploy
Layered architecture
Liftoff · F25CS088Quality assurance

Tested & CI-gated

104
91 Jest unit · 13 Playwright e2e · 25 spec files
  • Fully mocked — no live DB or DigitalOcean calls
  • CI test job gates the Azure deploy
  • Verified: encryption · HMAC · token rotation · Pulumi run
Liftoff · F25CS088Results

It works — end to end

push
→ live
  • Full push-to-deploy — into the user's own DigitalOcean
  • Builds (Docker/Nixpacks), provisions (Pulumi), deploys
  • Real-time logs + canvas · auto-rollback · multi-service
  • Encrypted credentials · HMAC webhooks · runtime metrics
Liftoff · F25CS088Honest assessment

What's next

Team roles (RBAC)
Schema in place; enforcement & role UI are next.
Simple Mode (zip)
Zero-Git upload path — experimental, hardening it.
Custom domains
Parsed from liftoff.yml — remaining work is Pulumi wiring.
Kubernetes mode
A type: kubernetes target reserved for post-MVP.
Liftoff · F25CS088
Thank you.
Questions?
Liftoff · F25CS088Appendix

Team & contributions

Munim Ahmad
L1F22BSCS0412 · Team Lead
DevOps · Pulumi IaC · documentation
Mohammad
L1F22BSCS0417
Backend development · CI/CD pipeline
M. Haris Shakeel
L1F22BSCS0434
Frontend development · infrastructure management

Supervisor: Muhammad Asif Haroon · BS Computer Science · University of Central Punjab

Press to advance · ? help · S notes · F full-screen
Speaker notes

Jump to slide

Keyboard controls

→ · Space · ↓
Next slide
← · ↑
Previous
Home · End
First / last
F
Full-screen
S
Speaker notes
O · G
Overview — jump to any slide
B · .
Black screen
?
This help · Esc closes