In this creative task create a $C^1$ or smoother curved surface. You can find out a formula for some curved surface like the Bezier surface. With that option you also need to construct the faces among the curve points. Another way would be to use curves in one direction and then create other curves perpendicular to them. The following images explain that option.
First you need some curves going one way. Here the leftmost curve is a static line. The middle and right curves are Catmull-Rom curves with 5 control points. The control points change in their height in time.
Then you need to decide how much you tessellate the surface in the other direction. Create that many curves perpendicular to the previous ones. The new curves get their control points from the previous perpendicular curves. Here it is good to use an interpolating spline like Catmull-Rom or Cardinal, where we do not have to think about manually setting any derivatives.
Next create a tessellated plane. With Three.js you can use the PlaneBufferGeometry and set its vertices by sampling the curves. With C++ you would have to create the geometry yourself.
Congratulations, now you have created a curved surface. Next you should think of an use for it. For example it could be a creepy flag. When you apply lighting, then make sure the surface normals are also correctly calculated to match the curvature. Otherwise the illumination would be incorrect. It is also OK if for your purpose you do not need the surface normals and light calculations.
After this you have created a curved surface with a purpose.
Try to be creative about the purpose. Perhaps it is the surface some water body? Describe your purpose in the task submission. You can also experiment with changing the curves differently in time. Or even by not changing them at all.