The issue in your code is that 'fetch' is asynchronous. Therefore, when creating the GeoJSON source, the 'stations' variable doesn't have yet any value. In this case, you'd need to use Promises, async-await or a callback.
From the example above:
Using a callback:
First, a caveat: I don't know anything about Carto basemaps and any licences they require, so this info is provided as is. I've not tested qgis2web with Carto basemaps for this reason.
You can add XYZ layers into QGIS by specifying their URL(s) - use the browser panel (https://docs.qgis.org/3.4/en/docs/user_manual/managing_data_source/opening_data.html#the-...