Using the setup pictured below and outlined in this video, you can stretch curve lines along the faces' x and z axis:


Next, edges are compared to get the longest of the two as per your requirements. A boolean value is captured on one set of lines to switch instances later:
Next, a ray source and ray target are created using the smallest of the x and z scales as the prior setup isolated the largest axis upon which the perpendicular axis will be instanced.
A narrow grid (target) and line (source) are created with two orientations that are switched via the prior captured boolean value. This is to account for the change in orientation when the largest curves are forced from the initial, differing x and z axis of each face:
Finally, the target face normals are sampled with the source edge index and the same index is used to sample the edge's position for the raycast's inputs. The source edges are extruded using the "Hit Normal" as the offset and the "Hit Distance" as the scale:
The result works as long as each face corner is 90°, however the angle between the faces themselves doesn't matter:
However, because there are two targets per corner (enlarged here for clarity):
the other, undesired face might be used as the "Hit Normal," but slightly moving the edge can easily correct it:
Still, if your use case is actually just one plane, it should work flawlessly. The inconsitencies with this setup come from using more than one connected plane only. The distance between the loop cuts can be adjusted via the resample rate of the longer axis:

