I totally agree with Torbjorn's answer but wanted to add a few points:
Start small
The Page Object pattern is a great way to simplify your tests, but you will find that it takes a long time to get the abstractions right. Start by abstracting what you need and slowly add to it over time.
Add value
Don't go overboard and try to write end-to-end regression tests. Instead, focus on writing tests that add value. For example, a single test that demonstrates that the application launches without errors is immensely useful and can provide early feedback on your build process. Stem out from there.
Balance "Deep" versus "Shallow"
There are a few different philosophies for testing the user interface. Establish a mix between them.
The obvious approach is to test the application with production-like settings to demonstrate that the application works "front-to-end". These are "deep" integration tests that exercise all parts of the code and are useful. They can also be painfully slow because they typically depend on external services, etc. Often, to be reliable the application must restarted between test-runs to ensure a valid environment.
A slight modification of that approach is to test the application with stubbed-out services (a fake product catalog, a fake authentication provider, etc). These are "shallow" tests that demonstrate that the user-interface works when integrated together. They typically run a bit faster because they won't have the same physical constraints such as network latency to consider. You can focus more on presentation specifics and other edge cases.
A further modification is to isolate parts of the user-interface and run them in a test harness. These tests will run much faster than the previous approaches because they won't have the same overhead of starting the entire application. Use these tests to assert colors and highly specialized presentation concerns.
Iterate when stable
If you intend on writing functional tests to replace manual regression testing you may find it best to wait until development has stabilized that feature before writing automation for it. If you start to write automation during development, you'll be constantly re-writing tests. If you want to automate during development, remember: start small.
Get early feedback
Automated testing of the UI (also known as Functional Testing) is useful, but it can be very, very slow. (I've seen runs taking several hours to complete.) If you run the entire test suite once a day, you're going to find that the feedback loop is too long which leads to false-positives, maintenance issues, etc.
Try to integrate the functional testing into the build process if possible. If the test suite takes too long, find a way to integrate some of the tests so that your build pipeline can validate important tests as part of the build.