The exchange variation of the French doesn't have to be as boring as you let it. Instead of 4. ... Nf6, how about 4. ... Bd6 and then Ne7, Nbc6, Bg4, Qd7, castle long, and your kingside pawns are ready to race up the board. If white ever plays Bg5 you can play f6, it just helps your pawns get rolling. If white plays h3 (and is castled), you just play h5 ready to sac a piece to open the h-file.
21. Rf1 h5 22. Bf3 Bxf5 with the threat of Bxh3.
22. ... Qb6+ looks like it wins a pawn on b2. Does white have a tactical trick after you take there?
It looks like white missed 24. h4 Rg3 25. Qf4 winning back the exchange.
In endings with rooks the most important thing is how active the rooks are. At move 30 your rooks are defensive, guarding your pawns. Both your opponent's pieces are offensive, attacking your pawns. The bishop attacking two pawns is as valuable as your rook.
In general you don't want to trade pawns, but if you sit in an inactive position, you will lose pawns, which is even worse.
30. ... Rb5. If white trades rooks, your position gets way easier. More likely is
31. Rxa7 Rxb2. Pinning the g pawn and threatening Rxf3. If 32. Bxa5 Rff2 wins the g-pawn and gets your rooks really active.
I thought it was pitty I lost, I didn't play some outsanding moves but there wasnt many weak ones also. I just didn't have plan in the endgame. What was the right plan?