I am finishing up the Novigrad arc. Novigrad is filled with references to the novels with little details everywhere, indicating great loyalty to the world designed by Spakowski. To a lesser extent familiarity with Witcher 2 lore helps.
I really like how they developed Geralt, Triss, Keira, and to a lesser extent Dijkstra's characters. Dandelion also finally gets to "settle down".
Keira is a very minor character in the novels but they managed to take what little was there and make her in a full fledged, interesting character.
Djikstra is more humble than the character in the novels and knows that he's a piece of shit, but there are a few good/non self serving actions he does that redeems him somewhat. I guess his defeats humbled him. He is also really well written and super witty.
Triss' character is one of maturity compared to the Triss of Book 1-2 and Book 8 of the novels. She was defined by her cowardice (being bullied/used by the Lodge) to spy and also her sneaky man-stealing desire for Geralt in the early books. By Book 8 she gets a redemption arc where she finds courage and more integrity. In Witcher 3 she is written as a moral, brave and suffering woman, now no longer a coward and even a leader when she needs to be. She is willing to sacrifice and take huge risks for her friends, like Yennefer is for Geralt in the books. And the way she interacts with Geralt is very nuanced and subtly refers to her past "bad" deeds & also the fact that she is still in love with him. However unlike in the first few books she is in the position of book 8, where she respects Yennefer enough and has become moral enough not to try to steal her man. The critical choice the player makes to love her instead of Yennefer is quite cleverly executed by CDPR. Her character growth, combined with that midwestern accent, her niceness, and attractive face means that Geralt now has wife material.
Novigrad ends at approx. 45 out of 87 hours for the 100% playthrough of the base game.