I would strongly suggest using DOLFINx if you are new to FEniCS, especially as it has complex number support.
For a normal projection, simply define a facetnormal, and call
u = Function(V)
n = FacetNormal(mesh)
un = dot(u, n) * n
For tangential projections see Tangential gradient operator error: invalid ranks 1 and 1 in product - #2 by dokken