College freshman Belly Conklin was in love with Conrad Fisher for most of her life. Her mother Laurel was best friends with Conrad’s mother, Susannah, so Belly and her mom would go stay at the Fishers’ summer house in Cousins Beach every summer. Belly’s childhood dreams of dating Conrad came true in high school, but Conrad’s emotional distance eventually broke them up. Susannah’s death from cancer drove them further apart, and Belly began dating Conrad’s younger brother, Jeremiah.
Now finishing her freshman year of college, Belly has been happily dating Jeremiah for two years. They’re a comfortable couple, happy together and well-liked by everyone they know. At a post-finals party at Jeremiah’s frat house, Belly feels jealous when Jeremiah talks to Lacie, a beautiful girl at his frat’s sister sorority.
Belly dismisses her fears as groundless until she overhears Lacie saying she slept with Jeremiah during spring break. Jeremiah admits that what she said is true, and Belly slaps him, utterly devasted by his betrayal. She tells him they’re finished.
Belly recalls how she and Jeremiah had gotten into a fight before spring break. They broke up, but Jeremiah thought the breakup was permanent while Belly understood the breakup to be a temporary moment of trouble in the relationship. To Jeremiah, getting physical with Lacie didn’t seem like cheating on Belly, but Belly interprets his actions as cheating.
Belly’s disappointment in Jeremiah makes her think of his brother, Conrad. She recalls how, six months earlier she had driven down to the Fishers’ beach house and stayed the night. Conrad showed up and the two of them shared fun conversations. Belly never told Jeremiah about that day because she felt guilty about it. That day made Belly realize that, even after a few years of dating Jeremiah, she was still in love with Conrad.
After a few days, Belly and Jeremiah have a heart-to-heart talk. He says that he knows she’s the only girl for him and that he’ll never risk losing her again. He pulls out a diamond ring and asks her to marry him. Belly is shocked by the sudden proposal, but she loves Jeremiah, so she agrees to marry him although that night she still dreams about Conrad.
Telling both their families about their marriage plans will be a challenge, so they decide to break the news to everyone simultaneously at a dedication event honoring Susannah. When she was alive, Susannah was a key supporter for an abused women’s shelter, and the shelter is planting a garden in her honor.
At the garden dedication event, Conrad arrives late and the narration switches to his point of view. Conrad still loves Belly, though he’s aware he has no right to discuss his feelings with her since he treated her badly when they were together and she’s now in a long-term relationship with his brother.
Jeremiah announces to Belly’s mom, Laurel, and his father, Mr. Fisher, that he and Belly plan to get married, and the parents are stunned and angry at the announcement. Laurel takes Belly home and strictly forbids her from marrying Jeremiah. Belly refuses to back down from her choice, and Laurel says she won’t attend the wedding or help Belly plan it.
Belly goes wedding dress shopping with her best friend, Taylor, but feels terrible that her mother isn’t there with her for such a big moment. Jeremiah visits Laurel. He tries to persuade her to accept his and Belly’s marriage plans, but it doesn’t work. Laurel and Belly get into a fight, and Belly moves out of their house and into the Fishers’ beach house.
Conrad is also staying at the beach house and is shocked to learn that Belly is moving in until her August wedding. Jeremiah seems nervous about leaving Belly at the beach house with her former love, but doesn’t really have a choice in the matter. Belly and Conrad fall into a daily routine of her planning wedding-related things and him doing small home repairs around the beach house.
She needs help with wedding preparations, so he goes with her on various small trips to pick out flower vases and decorations, which just makes Jeremiah more jealous. Conrad endeavors to hide his love for Belly, though he pays close attention to all her needs. When he hears her crying because her mother won’t attend her wedding shower, he resolves to convince Laurel to repair her relationship with Belly and is successful.
Laurel comes to Belly’s wedding shower, which makes Belly incredibly happy. Conrad feels increasingly agitated as the wedding day draws near, and an older friend of his advises him to tell Belly how he feels, even if it means breaking up the wedding. Belly also feels uneasy about the upcoming nuptials and imagines kissing Conrad, growing even more drawn to him when she learns that her mom only attended the wedding shower because Conrad personally convinced her.
At Jeremiah’s bachelor party, Conrad overhears Jeremiah’s friends teasing him about not having sex with Belly yet. The guys also mention how Jeremiah slept with Lacie during spring break, infuriating Conrad, who had assumed that his brother was faithful to Belly and would never do anything to hurt her.
Conrad tells Belly that Jeremiah cheated on her, and when she replies that she already knows, he openly confesses that he still loves her. Belly is angry that Conrad is telling her the words she always wanted to hear two years too late. He explains that he originally let her go because he felt like he didn’t deserve to love anyone after his mother’s death. Then he removed himself from Belly’s life so Jeremiah could have her, but only did so on the assumption that Jeremiah would treat her well. Conrad asks Belly to cancel her wedding to Jeremiah and be with him instead, but she refuses.
The day before her wedding, Belly is in a quandary, loving both brothers but not knowing which one to choose, since her decision will permanently wound the remaining brother. She tells Jeremiah about Conrad’s love confession, and Jeremiah realizes that Belly also still cares for Conrad and might only be marrying him to erase her memories of loving his brother.
On the morning of the wedding, Belly learns that Jeremiah has vanished and that Conrad went to go look for him. When Conrad finds Jeremiah, they have a verbal fight over Belly that escalates into Jeremiah punching Conrad. Jeremiah agrees to return with Conrad to the wedding but says he never wants to see Conrad again afterward.
When Jeremiah returns, Belly is already wearing her wedding dress and is disappointed that Jeremiah doesn’t even want to discuss the fact that he ran away right before their wedding. He finally admits that he’s not content with their relationship and feels like he’s never had Belly’s whole heart because she was always meant to be with Conrad. He asks if she still loves Conrad, and when she confirms that she does, he decides to let her go. They cancel the wedding.
A few years later, Belly is almost 24. After breaking up with Jeremiah, she spent a year abroad in Spain, where Conrad began to write her letters. The letters re-established their relationship, and they decide to marry. On Belly and Conrad’s wedding day, Belly thinks of Susannah and of all the dreams Susannah had for Belly’s future. Instead of going to the reception immediately after their wedding, Belly and Conrad drive to the ocean to play in the water like they did when they were kids.