[guided]We prove substitution soundness by following the syntax of the term. The target identity is
\begin{align*}
\llbracket t[\sigma]\rrbracket_\Delta=\llbracket t\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket,
\end{align*}
where $\Gamma\vdash t:A$ and $\sigma:\Delta\Rightarrow\Gamma$ is a tuple of terms in context $\Delta$. This identity says that substituting first and then interpreting gives the same morphism as interpreting first and then precomposing by the morphism determined by the tuple of substituted terms.
For a variable $x_i:A_i$ in $\Gamma=(x_1:A_1,\dots,x_n:A_n)$, the substitution $\sigma=(s_1,\dots,s_n)$ sends $x_i$ to $s_i$. The interpretation of $\sigma$ was defined precisely so that its $x_i$-coordinate is $\llbracket s_i\rrbracket_\Delta$. In categorical terms, this means
\begin{align*}
p_{\Gamma,x_i}\circ\llbracket\sigma\rrbracket=\llbracket s_i\rrbracket_\Delta.
\end{align*}
Since $\llbracket x_i\rrbracket_\Gamma=p_{\Gamma,x_i}$ and $x_i[\sigma]=s_i$, we obtain
\begin{align*}
\llbracket x_i[\sigma]\rrbracket_\Delta=\llbracket x_i\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
This is the reason for defining substitutions by recursive product pairing: the projections recover exactly the substituted components.
For the unit term $\star:1$, both $\llbracket \star[\sigma]\rrbracket_\Delta$ and $\llbracket\star\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket$ are morphisms from $\llbracket\Delta\rrbracket$ to the terminal object $T$. The defining property of $T$ gives a unique such morphism, so the two morphisms are equal.
For a pair $t=\langle r,s\rangle$, the induction hypotheses state
\begin{align*}
\llbracket r[\sigma]\rrbracket_\Delta=\llbracket r\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket
\end{align*}
and
\begin{align*}
\llbracket s[\sigma]\rrbracket_\Delta=\llbracket s\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
The interpretation of the substituted pair is the pairing of these two morphisms:
\begin{align*}
\llbracket \langle r,s\rangle[\sigma]\rrbracket_\Delta=\langle \llbracket r[\sigma]\rrbracket_\Delta,\llbracket s[\sigma]\rrbracket_\Delta\rangle.
\end{align*}
Substituting the two induction identities gives
\begin{align*}
\llbracket \langle r,s\rangle[\sigma]\rrbracket_\Delta=\langle \llbracket r\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket,\llbracket s\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket\rangle.
\end{align*}
The product universal property identifies this last pairing with
\begin{align*}
\langle \llbracket r\rrbracket_\Gamma,\llbracket s\rrbracket_\Gamma\rangle\circ\llbracket\sigma\rrbracket.
\end{align*}
Therefore
\begin{align*}
\llbracket \langle r,s\rangle[\sigma]\rrbracket_\Delta=\llbracket\langle r,s\rangle\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
For projections, consider $\pi_1 u$; the second projection is identical with $\pi_2$ in place of $\pi_1$. The induction hypothesis gives
\begin{align*}
\llbracket u[\sigma]\rrbracket_\Delta=\llbracket u\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
Composing both sides with the product projection $\pi_1^{\llbracket A\rrbracket,\llbracket B\rrbracket}$ gives
\begin{align*}
\llbracket (\pi_1 u)[\sigma]\rrbracket_\Delta=\pi_1^{\llbracket A\rrbracket,\llbracket B\rrbracket}\circ\llbracket u\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
The right-hand side is $\llbracket\pi_1 u\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket$, so substitution commutes with projections.
For application $t=f\,a$, the induction hypotheses give
\begin{align*}
\llbracket f[\sigma]\rrbracket_\Delta=\llbracket f\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket
\end{align*}
and
\begin{align*}
\llbracket a[\sigma]\rrbracket_\Delta=\llbracket a\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
The interpretation of application is evaluation after pairing the interpreted function and argument:
\begin{align*}
\llbracket (f\,a)[\sigma]\rrbracket_\Delta=\operatorname{ev}_{\llbracket A\rrbracket,\llbracket B\rrbracket}\circ\langle \llbracket f\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket,\llbracket a\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket\rangle.
\end{align*}
The product universal property says that pairing commutes with precomposition:
\begin{align*}
\langle \llbracket f\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket,\llbracket a\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket\rangle=\langle \llbracket f\rrbracket_\Gamma,\llbracket a\rrbracket_\Gamma\rangle\circ\llbracket\sigma\rrbracket.
\end{align*}
Thus
\begin{align*}
\llbracket (f\,a)[\sigma]\rrbracket_\Delta=\llbracket f\,a\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
The abstraction case is the only place where variable binding matters. Suppose $t=\lambda x:A.\,r$ and $\Gamma,x:A\vdash r:B$. We alpha-rename bound variables if needed so that $x$ is fresh for $\Delta$ and for the terms in $\sigma$. Define the extended substitution
\begin{align*}
\sigma^+:\Delta,x:A\Rightarrow\Gamma,x:A
\end{align*}
by applying $\sigma$ to the old variables of $\Gamma$ and leaving the new variable $x$ as itself. Categorically this is the morphism
\begin{align*}
\llbracket\sigma^+\rrbracket=\langle \llbracket\sigma\rrbracket\circ\pi_1^{\llbracket\Delta\rrbracket,\llbracket A\rrbracket},\pi_2^{\llbracket\Delta\rrbracket,\llbracket A\rrbracket}\rangle.
\end{align*}
The induction hypothesis applied to the body $r$ gives
\begin{align*}
\llbracket r[\sigma^+]\rrbracket_{\Delta,x:A}=\llbracket r\rrbracket_{\Gamma,x:A}\circ\llbracket\sigma^+\rrbracket.
\end{align*}
Now interpret the substituted abstraction by transposition:
\begin{align*}
\llbracket (\lambda x:A.\,r)[\sigma]\rrbracket_\Delta=\Lambda(\llbracket r[\sigma^+]\rrbracket_{\Delta,x:A}).
\end{align*}
The exponential transpose is natural in the parameter object: precomposing the curried map by $\llbracket\sigma\rrbracket$ corresponds exactly to precomposing the uncurried map by $\llbracket\sigma\rrbracket\times \operatorname{id}_{\llbracket A\rrbracket}$, which is the morphism $\llbracket\sigma^+\rrbracket$ under our chosen left-associated context product. Therefore
\begin{align*}
\Lambda(\llbracket r\rrbracket_{\Gamma,x:A}\circ\llbracket\sigma^+\rrbracket)=\Lambda(\llbracket r\rrbracket_{\Gamma,x:A})\circ\llbracket\sigma\rrbracket.
\end{align*}
Since $\Lambda(\llbracket r\rrbracket_{\Gamma,x:A})=\llbracket\lambda x:A.\,r\rrbracket_\Gamma$, this gives
\begin{align*}
\llbracket (\lambda x:A.\,r)[\sigma]\rrbracket_\Delta=\llbracket\lambda x:A.\,r\rrbracket_\Gamma\circ\llbracket\sigma\rrbracket.
\end{align*}
This completes the induction and proves substitution soundness for every term former.[/guided]