1Web Deployment Strategies
▶
Deploying a web application to a production environment is far more than simply copying files to a server. It is a disciplined engineering process that encompasses choosing the right hosting infrastructure, automating build and release workflows, securing traffic with certificates, delivering Progressive Web App capabilities, and optimising the experience so that both users and search engines are satisfied. Each of these dimensions interacts with the others: a poorly chosen hosting platform can undermine an otherwise excellent build pipeline; an expired SSL certificate can instantly disable PWA features; and an unoptimised bundle can erase the ranking benefits of perfect metadata. The sections that follow unpack each dimension in depth, providing the conceptual foundation and practical detail needed to make sound deployment decisions.
Web Hosting Options and Platforms
The first architectural decision a team must make is where the application will live. The answer depends heavily on whether the application is static or dynamic, and on non-technical factors such as budget, expected traffic volume, and the geographic spread of the user base.
A static web application is one whose files — HTML, CSS, JavaScript, images, and other assets — are fully pre-built and do not change in response to server-side logic at request time. Because every visitor receives the same files, a static site can be served entirely from a Content Delivery Network (CDN) edge node rather than from a central origin server, which dramatically reduces latency. Platforms designed specifically for this pattern include:
- GitHub Pages — directly serves a repository branch or a
/docsfolder, making it ideal for documentation sites, portfolios, and open-source project pages. It is free for public repositories and requires zero server configuration. - Netlify — adds a layer of build automation on top of CDN delivery. A developer pushes code; Netlify pulls it, runs the configured build command (e.g.,
npm run build), and deploys the output to its global edge network. It also provides instant rollbacks, deploy previews for pull requests, serverless functions, and form handling. - Vercel — created by the team behind Next.js and optimised for JavaScript frameworks, Vercel offers similar CDN-backed static hosting alongside Edge Functions and Incremental Static Regeneration (ISR), a hybrid model that pre-renders pages at build time but can revalidate them in the background without a full rebuild.
A dynamic web application generates responses on the fly — querying databases, enforcing authentication, running business logic, or personalising content per user. These applications require persistent server processes or equivalent compute resources. The dominant providers in this space are the hyperscale cloud platforms:
- Amazon Web Services (AWS) — offers Elastic Compute Cloud (EC2) for full virtual machine control, Elastic Beanstalk for managed application hosting, Elastic Container Service (ECS) and Elastic Kubernetes Service (EKS) for container orchestration, and a vast array of managed services (RDS for databases, ElastiCache for caching, S3 for object storage, CloudFront for CDN).
- Microsoft Azure — provides App Service for PaaS web hosting, Azure Kubernetes Service (AKS), Azure Functions for serverless compute, and deep integration with the Microsoft ecosystem including Active Directory for identity.
- Google Cloud Platform (GCP) — offers Cloud Run for containerised workloads that scale to zero, Google Kubernetes Engine (GKE), App Engine, and Firebase Hosting with Cloud Functions, which is particularly popular for mobile-adjacent web projects.
Serverless functions represent a middle ground that deserves special attention. Rather than managing an always-on server, the developer deploys individual functions that the cloud provider executes in ephemeral containers on demand. AWS Lambda, Azure Functions, Google Cloud Functions, Netlify Functions, and Vercel Edge Functions all follow this model. The key advantages are that the provider handles scaling automatically — from zero requests to millions — and billing is based on actual invocations and execution time rather than reserved capacity. The trade-off is that functions have execution time limits, can experience "cold start" latency when a container must be provisioned from scratch after a period of inactivity, and are less suited to workloads requiring persistent in-memory state.
When selecting a hosting platform, four criteria should drive the evaluation:
- Scalability — can the platform handle sudden traffic spikes (e.g., a viral marketing campaign) without manual intervention? CDN-based static hosts and serverless platforms scale inherently; traditional single-server deployments require deliberate autoscaling configuration.
- Cost — static and serverless platforms often have generous free tiers and pay-per-use pricing, making them economical at low traffic. Long-running containers or VMs may become cheaper at high, consistent traffic because reserved pricing is available.
- Geographic distribution — a CDN with edge nodes in many regions reduces round-trip latency for global users. A single-region server will always be slower for users on the opposite side of the planet.
- Ease of deployment — managed platforms abstract infrastructure concerns, reducing operational burden on small teams. Bare-metal or IaaS deployments offer maximum control but require dedicated DevOps expertise.
Build Pipelines and Continuous Deployment
Modern web development relies on toolchains — bundlers, transpilers, linters, test runners — that must be executed in a precise sequence before code is ready to serve to users. A build pipeline is the automated system that orchestrates these steps consistently and repeatably, eliminating the "works on my machine" problem and reducing the risk of human error in the release process.
A typical build pipeline for a JavaScript web application proceeds through several stages:
- Install dependencies —
npm ci(or the equivalent for Yarn or pnpm) installs exactly the versions recorded in the lockfile, ensuring reproducibility. - Lint and static analysis — tools such as ESLint and TypeScript's compiler catch code quality and type errors before any tests run, providing fast feedback.
- Run automated tests — unit tests (Jest, Vitest), integration tests, and end-to-end tests (Playwright, Cypress) verify that the application behaves correctly. A failing test aborts the pipeline, preventing broken code from reaching production.
- Build — the bundler (Vite, webpack, Parcel) compiles, tree-shakes, minifies, and outputs deployment artifacts: typically a
dist/orbuild/directory containing optimised static files. - Publish artifacts — the built output is uploaded to the hosting platform, a container registry, or an artifact store.
Continuous Deployment (CD) extends this pipeline so that every commit to a designated branch (commonly main or production) that passes all pipeline stages is automatically released to the target environment with no human approval step required. This is distinct from Continuous Delivery, where the pipeline produces a release-ready artifact that a human then chooses to deploy. CD is powerful because it forces teams to keep the codebase in a constantly deployable state, encourages small and frequent commits, and compresses the time between writing a feature and users benefiting from it.
Popular CI/CD platforms include GitHub Actions, GitLab CI/CD, CircleCI, Jenkins, and Bitbucket Pipelines. A minimal GitHub Actions workflow for a static site might look like:
name: Deploy to Netlify
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build
run: npm run build
- name: Deploy to Netlify
uses: nwtgck/actions-netlify@v3
with:
publish-dir: './dist'
production-branch: main
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
Version control integration is central to trustworthy CD. Every deployment is tied to a specific Git commit SHA. This traceability means the team can always answer "exactly what code is running in production right now?" — a question that becomes critical during incident response. Many platforms display the commit hash and message alongside each deployment in their dashboards.
Despite the best automated safeguards, a broken deployment will occasionally reach production. A robust rollback strategy minimises the blast radius. Options include:
- Instant rollback via the platform — Netlify and Vercel retain every prior deployment indefinitely and allow a one-click revert to any previous build. The DNS or edge routing simply points back to the previous artifact.
- Git revert — a new commit that undoes the offending change is pushed to the main branch, triggering the CD pipeline to build and deploy a corrected version. This preserves a clean linear history of what happened.
- Blue-green deployments — two identical production environments ("blue" and "green") exist simultaneously. Traffic is routed to one while the other receives the new deployment. If the new version is healthy, traffic switches; if not, the router stays pointed at the stable environment with no downtime.
- Canary releases — the new version receives a small percentage of traffic (e.g., 5 %) while the rest continues to hit the old version. Monitoring determines whether the canary is healthy before a full rollout proceeds.
Domain Configuration and SSL Certificates
A professional web application is accessed at a meaningful domain name rather than a raw IP address or platform-generated URL. The process of connecting a custom domain to a hosting provider involves two systems working together: the domain registrar and the Domain Name System (DNS).
A domain is registered through a registrar (Namecheap, Google Domains, GoDaddy, Cloudflare Registrar, etc.) for an annual fee. Once registered, the owner controls the domain's DNS records, which are typically managed either in the registrar's own interface or delegated to a third-party nameserver such as Cloudflare's. To point a domain at a hosting provider, the operator creates DNS records of the appropriate types:
- A record — maps the domain to an IPv4 address. Used when the hosting provider exposes a static IP.
- AAAA record — the IPv6 equivalent of an A record.
- CNAME record — maps the domain (or a subdomain) to another domain name rather than a direct IP. Netlify and Vercel both instruct users to create a CNAME pointing to their own platform hostname (e.g.,
exciting-project-abc123.netlify.app), allowing the platform to handle routing and certificate management transparently. - ALIAS / ANAME record — some DNS providers offer this as a CNAME-like record that can also be applied to the root domain (the "apex"), working around a DNS specification limitation that prohibits a true CNAME on an apex domain.
Once the domain resolves to the correct server, all traffic must be secured with SSL/TLS certificates. SSL (Secure Sockets Layer) has technically been superseded by TLS (Transport Layer Security), but the term "SSL certificate" remains common in practice. The certificate enables HTTPS by providing two guarantees: it proves the server's identity (the browser can verify the certificate was issued by a trusted Certificate Authority for this specific domain) and it establishes an encrypted channel so that data transmitted between the user's browser and the server cannot be read or tampered with by anyone on the network path.
Obtaining a certificate was historically a manual, paid process. Let's Encrypt, a free, automated, and open Certificate Authority launched in 2016, transformed the landscape. Using the ACME protocol, a server can prove domain control to Let's Encrypt and receive a 90-day certificate entirely automatically. Most modern hosting platforms — Netlify, Vercel, GitHub Pages with custom domains, AWS Certificate Manager for CloudFront, Cloudflare — provision Let's Encrypt certificates automatically when a custom domain is added, with no manual steps required from the developer.
HTTPS is not optional for contemporary web applications. The browser enforces increasingly strict security policies that are gated on a secure context (a page served over HTTPS or from localhost):
- Service Workers — the foundation of Progressive Web Apps — will not register on HTTP pages.
- The Geolocation API, the Camera/Microphone APIs, the Web Bluetooth API, and the Web Authentication API all require a secure context.
- PWA installation prompts are suppressed on non-HTTPS origins.
- Google's search ranking algorithms use HTTPS as a positive ranking signal.
- Modern browsers display a "Not Secure" warning in the address bar for HTTP pages, eroding user trust.
Automatic certificate renewal is therefore a critical operational concern. Let's Encrypt certificates expire after 90 days by design (shorter lifetimes reduce the window of exposure if a private key is compromised). Automated renewal, triggered several weeks before expiry, must be configured and monitored. A renewal failure that goes unnoticed will result in browsers displaying certificate error pages to all users — effectively taking the site offline. Managed hosting platforms handle renewal automatically; self-managed servers using Certbot or similar ACME clients should have renewal configured as a cron job or systemd timer, with alerting on failure.
Progressive Web App Deployment
A Progressive Web App (PWA) is a web application that uses modern browser APIs to deliver an experience comparable to a native application: it can be installed on the user's device, work offline, receive push notifications, and appear in the system app launcher and task switcher. Deploying a PWA correctly requires several specific files and configurations beyond a standard web application.
The web app manifest is a JSON file — conventionally named manifest.json or site.webmanifest — linked from the HTML <head> that describes the application's identity and appearance when installed. A representative manifest:
{
"name": "My Awesome App",
"short_name": "AwesomeApp",
"description": "An example Progressive Web Application",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#1a73e8",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/icons/icon-512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "/icons/icon-512-maskable.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
Key fields explained:
- name / short_name —
nameis used in splash screens and install prompts;short_nameis used under the home screen icon where space is limited. - display —
standalonehides the browser UI (address bar, navigation buttons), making the app feel native. Other values arefullscreen,minimal-ui, andbrowser. - theme_color — colours the browser's toolbar on Android and the title bar area on desktop when the app is installed.
- icons — must include at least 192×192 and 512×512 pixel variants. A
maskableicon has safe-zone padding so it renders correctly inside shaped icon containers on Android. - start_url — the URL loaded when the user launches the installed app. Including a query parameter like
?source=pwaallows analytics to distinguish PWA launches from browser visits.
The service worker is a JavaScript file served from the application's origin that the browser installs and runs in a background thread separate from the main page. It acts as a programmable network proxy: the service worker intercepts every network request made by the page and can decide to serve a response from its cache, forward the request to the network, or apply a combination strategy. This is what enables offline functionality. A minimal service worker using the Cache-First strategy for static assets:
const CACHE_NAME = 'my-app-v1';
const STATIC_ASSETS = [
'/',
'/index.html',
'/styles.css',
'/app.js',
'/icons/icon-192.png'
];
// Installation: cache static assets
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => cache.addAll(STATIC_ASSETS))
);
self.skipWaiting();
});
// Activation: remove outdated caches
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((keys) =>
Promise.all(keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k)))
)
);
self.clients.claim();
});
// Fetch: serve from cache, fall back to network
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((cached) => cached || fetch(event.request))
);
});
For production applications, libraries such as Workbox (from Google) generate service workers with well-tested caching strategies, cache expiry, background sync, and push notification support, reducing the risk of subtle caching bugs.
The requirement that PWAs must be served over HTTPS exists because a service worker can intercept and modify any network request made by the page — a capability that would be catastrophically dangerous if exploited by a network attacker. The browser refuses to register a service worker on an insecure origin, ensuring this power is available only to the legitimate server. Localhost is the only exception, to facilitate local development.
PWAs have historically been limited to the mobile web browser and desktop browser contexts. Increasingly, however, they can be distributed through native app stores. The key mechanisms are:
- Trusted Web Activities (TWA) — an Android feature that allows a PWA to be wrapped in a thin native Android shell and submitted to the Google Play Store. The TWA uses Chrome's rendering engine to display the web app, and Digital Asset Links (a JSON file at
/.well-known/assetlinks.json) prove that the website and the Android app are owned by the same entity, which removes the browser UI from the PWA when launched from the Play Store listing. Tools like Bubblewrap (a CLI) and PWABuilder automate TWA generation. - Microsoft Store — Microsoft accepts PWA submissions directly through PWABuilder, and Windows 11 renders installed PWAs as first-class applications indistinguishable from native Win32 or UWP apps.
- Apple App Store — Apple's support for PWAs on iOS has historically lagged behind Android. As of iOS 16.4, installed PWAs on the home screen support push notifications, and capabilities continue to expand. Full App Store distribution of PWAs requires a WKWebView wrapper and is subject to App Store review policies.
Web App Performance and SEO Considerations
A deployed application that is slow or invisible to search engines fails its users and its business objectives regardless of how elegant the code is. Performance and discoverability must be treated as first-class deployment concerns rather than afterthoughts.
Google's Core Web Vitals are a set of user-centric performance metrics that measure real-world experience and directly influence search rankings. The three primary metrics are:
| Metric | What It Measures | Good Threshold | Poor Threshold |
|---|---|---|---|
| Largest Contentful Paint (LCP) | Time from page navigation start until the largest visible content element (image, video poster, or text block) is rendered | ≤ 2.5 s | > 4.0 s |
| Interaction to Next Paint (INP) | Latency of the slowest interaction (click, tap, key press) during the page's lifetime — replaced First Input Delay in 2024 | ≤ 200 ms | > 500 ms |
| Cumulative Layout Shift (CLS) | Sum of unexpected layout shift scores; measures visual stability — elements moving around as the page loads | ≤ 0.1 | > 0.25 |
Improving Core Web Vitals requires targeted optimisation at multiple layers:
- Images — use modern formats (WebP, AVIF) which are 25–50 % smaller than JPEG/PNG at equivalent quality. Implement responsive images with
srcsetandsizesso browsers download only the resolution they need. Add explicitwidthandheightattributes (or CSS aspect-ratio) to prevent layout shifts as images load. Lazy-load below-the-fold images withloading="lazy". - JavaScript — code-split large bundles so only the code needed for the current route is downloaded. Tree-shake to eliminate dead code. Defer or async-load non-critical scripts. Minification (via Terser, esbuild, or the bundler's built-in minimiser) removes whitespace, shortens variable names, and can reduce bundle size by 30–60 %.
- CSS — minify stylesheets. Consider critical CSS inlining (embedding the styles needed for above-the-fold content directly in the HTML
<head>so the first render requires no additional round trip) and loading the full stylesheet asynchronously. - Fonts — subset web fonts to include only the characters actually used. Use
font-display: swapto show fallback text immediately while the custom font loads, avoiding invisible text (FOIT — Flash of Invisible Text). - Caching and CDN — set aggressive
Cache-Controlheaders (e.g.,max-age=31536000, immutable) on versioned assets (files whose filenames include a content hash), so returning visitors load nothing from the network. Serve all assets from a CDN edge node close to the user.
Meta tags are HTML elements in the <head> that communicate page identity and context to search engines and social platforms without being visible to the user:
<!-- Core SEO meta tags -->
<title>Best Running Shoes 2024 | ShoeStore</title>
<meta name="description"
content="Discover the top-rated running shoes of 2024 reviewed by experts.
Free shipping on orders over $50.">
<!-- Open Graph tags (Facebook, LinkedIn, WhatsApp previews) -->
<meta property="og:title" content="Best Running Shoes 2024">
<meta property="og:description"
content="Expert reviews and rankings of 2024's top running shoes.">
<meta property="og:image" content="https://example.com/og-running-shoes.jpg">
<meta property="og:url" content="https://example.com/running-shoes-2024">
<meta property="og:type" content="article">
<!-- Twitter Card tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Best Running Shoes 2024">
<meta name="twitter:description"
content="Expert reviews and rankings of 2024's top running shoes.">
<meta name="twitter:image" content="https://example.com/og-running-shoes.jpg">
The <title> tag is the primary signal search engines use to understand and display a page in results. The description meta tag does not directly affect ranking but strongly influences click-through rate by appearing as the snippet below the page title in search results. Open Graph tags control the rich preview cards generated when a URL is shared on social media — without them, platforms fall back to unpredictable heuristics.
Two files serve as a map and a rulebook for search engine crawlers:
- sitemap.xml — an XML document listing every URL that should be indexed, optionally with the last-modified date and update frequency. This is especially valuable for large sites where some pages might not be discovered through normal link-following, and for new sites where crawlers have not yet built up a picture of the site's structure. The sitemap's location is declared in
robots.txtor submitted directly through Google Search Console. - robots.txt — a plain-text file at the site root that instructs crawlers which paths they are and are not permitted to access. For example,
Disallow: /admin/prevents crawlers from indexing internal admin pages. It is important to note thatrobots.txtis advisory — well-behaved crawlers respect it, but malicious bots do not; it is not a security mechanism.
A well-formed robots.txt with a sitemap reference:
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /
Sitemap: https://example.com/sitemap.xml
For Single Page Applications (SPAs) built with React, Vue, or Angular, SEO deserves special attention. An SPA that renders content entirely in the browser via JavaScript will present an empty HTML shell to crawlers that do not execute JavaScript — causing the page to appear blank in search results. The solutions are:
- Server-Side Rendering (SSR) — the server executes the JavaScript framework and sends fully rendered HTML to the client. Next.js (React), Nuxt (Vue), and SvelteKit provide SSR out of the box.
- Static Site Generation (SSG) — all pages are pre-rendered to static HTML at build time. Ideal for content that does not change per-user.
- Prerendering services — a middleware layer detects crawler user agents and serves pre-rendered HTML snapshots while serving the normal SPA to regular browsers.
Performance measurement should be continuous rather than a one-time pre-launch activity. Tools such as Google Lighthouse (built into Chrome DevTools and available as a CI integration), PageSpeed Insights (which combines lab data from Lighthouse with real-user field data from the Chrome User Experience Report), and WebPageTest provide detailed audits and recommendations. Integrating Lighthouse into the CD pipeline — failing the build if scores drop below defined thresholds — prevents performance regressions from silently accumulating over time.
2Videos on This Topic
▶
Not every interface you build will be distributed through an app store. For web applications, "publication" means deploying your code to a server that the public can reach, attaching a domain name to it, securing it with HTTPS, and keeping it updated as you continue to make changes. This topic walks through the practical choices involved: where to host (managed platforms, static site hosts, or your own virtual private server), how to automate builds and deployments, how domains and SSL certificates are configured, what it takes to ship a Progressive Web App, and how performance and SEO affect whether people actually find and stay on your site.
These concerns matter in this course because the usability work you do is only visible to users once the project is live, fast, and trustworthy. A slow first load, a browser warning about an insecure connection, or a broken deploy undoes a lot of careful interface design. Deployment also changes how you work: once a build pipeline is in place, pushing a change to a repository can automatically test and publish it, which shortens the loop between user feedback and the fix.
The three videos below demonstrate three different points on the hosting spectrum, from fully managed to fully self-administered. While watching, pay attention to what each platform does for you automatically versus what you must configure yourself — especially the steps around connecting a Git repository, setting a build command, pointing a custom domain, and provisioning a certificate. Also notice how each workflow would handle a second, third, and fiftieth deployment, since that repeatability is the real point of continuous deployment.
3Video 1: Getting started with Firebase Hosting (and GitHub Actions!)
▶
Firebase · 12:54 · 157,044 views · 4y ago · captions — Watch on YouTube
About this video
An episode of Firebase Fundamentals in which David East walks through setting up Firebase Hosting for a web project and then wiring it to GitHub Actions so that deployments happen automatically. Expect coverage of the Firebase CLI, initializing hosting in a project directory, and the generated workflow that builds and publishes on a push or pull request. It illustrates the managed-platform end of the hosting spectrum, where HTTPS and a CDN are handled for you.
Why this video
It comes directly from the Firebase team, so the tooling and commands shown are authoritative, and it connects two subtopics at once — hosting platforms and continuous deployment through a build pipeline.
4Video 2: Deploy your website for free with Cloudflare Pages and GitHub!
▶
Coder Coder · 13:47 · 233,531 views · 5y ago · captions — Watch on YouTube
About this video
Coder Coder demonstrates deploying a site built with HTML, CSS, and JavaScript to Cloudflare Pages using a GitHub repository as the source. The walkthrough covers linking the repo, configuring the build, and getting a live URL at no cost, with Cloudflare's network handling delivery and TLS. It is a good model of the static-hosting approach suited to front-end projects and class prototypes.
Why this video
The channel is known for clear, beginner-friendly front-end instruction, and the free tier makes it realistic for student projects while still demonstrating Git-triggered deployment and platform-managed SSL.
5Video 3: VPS Tutorial for Beginners: Website Setup on DigitalOcean
▶
Tony Teaches Tech · 7:52 · 46,808 views · 1y ago · captions — Watch on YouTube
About this video
Tony Teaches Tech shows how to launch a website on a DigitalOcean virtual private server using Nginx, starting from an empty machine. The tutorial is aimed at people who have never administered a server, so it covers creating the instance, serving files through a web server, and the manual steps that managed platforms abstract away.
Why this video
It supplies the contrast the other two videos need: seeing the server-level work required makes the trade-offs between control, cost, and convenience in hosting and domain/SSL configuration concrete.
6How These Videos Support the Learning Outcomes
▶
These videos extend the module's publication theme beyond the Apple App Store and Google Play Store by showing what release looks like on the open web, which helps you compare submission-and-review distribution against self-publishing (MO1). Evaluating your own interface project for readiness means more than meeting store guidelines — it also means confirming it builds cleanly, deploys reliably, and loads over HTTPS, and the Firebase and Cloudflare walkthroughs give you a repeatable pipeline to test that against (MO2). Finally, the deployment URLs, custom domains, and live demos produced by these workflows become part of the asset package you present alongside metadata and screenshots when you submit or showcase the project (MO3).
7About These Videos
▶
These videos were chosen from YouTube on October 3, 2026. Each has captions; the player turns them on. Videos on YouTube can be changed or removed — if one no longer plays, tell your instructor. If a player does not appear, use its Watch on YouTube link.