Why appendRow won't do what you want
appendRow(values) scans the sheet for the last row that contains data and writes below it. That behavior is fine for a growing log you read from the bottom, but if you want newest-first — a feed, an audit trail, a form-response sheet sorted by recency — it's immediately wrong. There is no parameter to change which end it appends to.
The fix is two calls: insertRowBefore(1) to open a blank row at position 1, shifting every existing row down by one, then getRange(1, 1, 1, values.length).setValues([values]) to fill it. The first time I hit this I spent twenty minutes reading the appendRow docs looking for an offset argument that doesn't exist.