Contractibility of the sphere and Stiefel manifolds of a separable Hilbert space

Why are the sphere $$S=\lbrace |x|=1\rbrace$$ and the Stieffel manifolds of orthonormal $n$-frames $$V_n=\lbrace (x_1,\dots,x_n)\in S^n\mid i\neq j\Rightarrow\langle x_i|x_j\rangle=0\rbrace$$ of a infinite dimensional separable Hilbert space $\mathscr{H}$ contractible? I've read a proof of this about a year ago, but I can't find it, and I don't remember the argument.

-
Consider a Hilbert basis $(e_i)_{i\in \mathbb N\sqcup I}$ for $\mathscr H$, where we allow for the Hilbert space to be non-separable. Define a continuous linear operator $T$ on the Hilbert basis by setting $$\forall n\in\mathbb N,~Te_n=e_{n+1}\mathrm{~and~}\forall i\in I, Te_i=e_i$$ This defines a continuous isometric linear operator on $\mathscr H$. Furthermore, upon looking at the $\ell^2$ coefficient decomposition of a vector, one sees that for any non zero integer $p$, the only way $x$ and $T^p x$ can be colinear is if all coefficients of $x$ carried by the $(e_i)_{i\in\mathbb N}$ are $=0$, in which case $T^p x=x$.
Take $(x_1,\dots,x_p)$ linearly independent. The preceding remark shows that for any $a,b\in \mathbb R$ (or $\mathbb C$) that aren't simultaneously $=0$, the family $(ax_1+bT^p x_p,\dots, ax_p+bT^p x_p)$ is free. We now define a homotopy $H$ from $\mathrm{id}_{V_p}$ to a map that sends any orthonormal $p$-frame to an orthonormal $p$-frame orthogonal to $(e_1,\dots ,e_p)$: $$\begin{array}{rll} H: & [0,1]\times V_p & \to & V_p,\\ & (t,(x_1,\dots,x_p)) & \mapsto & \mathrm{GS}((1-t)x_1+tT^px_1,\dots,(1-t)x_p+tT^px_p) \end{array}$$ $\mathrm{GS}$ stads for the Gram Schmidt process applied to a free family. By the above discussion, this is well-defined and continuous, and ends at $V_p\to V_p, (x_i)\mapsto (T^px_i)$ so ends up heing orthogonal to $(e_1,\dots,e_p)$. We then follow this homotopy by a second homotopy from the subset of $V_p$ of all orthonormal $p$-frames orthogonal to $(e_1,\dots,e_p)$ (call this set $V_p'$) to $V_p$: $$\begin{array}{rll} H': & [0,1]\times V_p' & \to V_p,\\ & (t,(x_1,\dots,x_p)) & \mapsto \mathrm{GS}((1-t)x_1+te_1,\dots,(1-t)x_p+te_p)) \end{array}$$ This concludes the construction, and shows that $V_p$ is contractible.