Class president Nova (Aimee Teegarden) has been planning the school's prom. She and her friends, Mei (Yin Chang), Ali (Janelle Ortiz), Brandon (Jonathan Keltz), and Rolo (Joe Adler) have created the perfect decorations, which they store in the school's shed. Nova, who has a crush on Brandon, hopes he will ask her to prom, but he wants to carpool instead. Meanwhile, Lloyd (Nicholas Braun), the "invisible" guy at school, is complaining about prom to his stepsister, Tess (Raini Rodriguez), because he has no date, to which she responds by telling him he should just ask somebody.
Elsewhere at the school, Tyler (De'Vaughn Nixon) is confronted by his girlfriend, Jordan (Kylie Bunbury), who assumes he is cheating on her due to the single gold earring she finds in his car. He assures her this is not the case, and Jordan believes him. "Bad boy" Jesse Richter (Thomas McDonell) has been cutting school lately and showing other "unacceptable" behavior, such as riding his motorcycle on school grounds. The principal has a talk with him, but is not satisfied with Jesse's attitude. Mei learns she has been accepted into Parsons, which conflicts with the plans she made with her boyfriend, Justin (Jared Kusnitz), of going to the University of Michigan together. She is stressed about this and becomes irritable as prom approaches, which she agrees to go to with Justin. Sophomore Lucas (Nolan Sotillo) is attracted to Simone (Danielle Campbell) his lab partner, who he tries to get her with the help of his friend Corey (Cameron Monaghan ). Ali asks Rolo who he is taking to prom, which he responds by telling her he is taking his girlfriend, who she doubts exists.
That night, Tyler takes to Jordan to the school's shed, which he has decorated with many candles, to ask her to prom, and she agrees. However, when they leave the shed, they forget to put out a single candle. The shed promptly catches fire and burns down. The next day, a devastated Nova, with no decorations and only three weeks to prom, asks her friends for extra help to pull the dance off, which they all back out of, each listing their own reason. The principal, seeing her dilemma, has an idea, and forces Jesse to help her, or he cannot graduate. Although Nova and Jesse both are unhappy with this situation, they comply anyway.
At school, Lloyd is having trouble finding a date, even with the help of his sister. Lloyd loses confidence and becomes frustrated. During lacrosse practice, Tyler invites Lucas to the team barbecue, and tells him to invite a girl. Lucas decides to ask Simone, to which she agrees.
After school, Nova is growing frustrated because Jesse is late to helping her work on prom. Finally, he shows up, and there is tension right away. They have several arguments, one of which leads to Jesse apologizing. Later at home, Nova complains to her parents about her having to work with Jesse, when Brandon shows up and tells her he cannot take her to prom, and that she will have to find another date. As the prom date becomes closer, Nova and Jesse grow closer while working together on prom. Jesse also tells Nova the reason he is always late to help is because he has to help pick up his little brother from school, as his mother is unable to. One night, Nova finds out that the neighboring high school has the same theme for their prom as her own. Jesse suggests they take his motorcycle to go check out the other school's decorations, and she reluctantly agrees. However, they are caught by the police, who call Nova's parents. Nova's father is infuriated with Jesse and insults him.
At Tyler's barbecue, Tyler tries to make a move on Simone, only to be rejected by her. It is made clear they have a history. Simone tells Lucas that if she had known it was Tyler's barbecue, she would not have come. Mei's attitude is becoming worse and worse, and Justin believes she does not want to go to prom. He calls the date off, and Mei is left feeling very uncomfortable. At school, Lucas is blowing off Corey to spend more time with Simone, and asks her to study for the upcoming test with him, to which she agrees. However, as she is about to go to library, Simone is stopped by Tyler, who convinces her to talk with him. He tells her about his feelings for her. Jordan sees the two talking and immediately grasps the situation.
After school, Nova walks to Jesse's brother's school so she can talk to Jesse and apologize for her dad's behavior. Later, she takes him dress shopping. Back at school, Simone apologizes to Lucas for having ditched him. She has a surprise, tickets to a concert, where Stick Hippo (his and Corey's favorite band) is opening. Lucas wants to take Simone instead of Corey, much to Corey's dismay. Jordan dumps Tyler for his unfaithfulness, and decides to go to prom alone. This prompts him to ask Simone to prom, which is the same night as the concert, and she agrees. Simone tells Lucas that she is sorry, but she cannot go to the concert.
Mei apologizes to Justin for her behavior and tells him the truth, but instead of feeling hurt that she is going to a different college, he tells her he is proud of her. They agree to still go to prom together.
Lloyd spots Lucas sitting outside the school, looking dejected. He learns his situation, and tells Lucas his own mistake with girls and the high school. Lloyd tells Lucas that if he really loves Simone, he should tell her.
Two nights before prom, Nova, Ali, and Mei are in Nova's room, talking. Nova confesses to them that she has feelings for Jesse, which her dad unfortunately overhears. The next day, Nova's father tells Jesse he cannot ask Nova to prom, because he is "bringing her down". That afternoon, Jesse is unusually hostile towards Nova and deserts her.
On prom night, Lucas climbs a tree to reach Simone's window. He tells her how he feels and begs her not to go to prom, but she goes anyway. Disappointed, Lucas realizes what a bad friend he has been to Corey, and offers him the other concert ticket. The two head off to see their favorite band happily.
At her house, Nova is heartbroken, and refuses to pose for the camera in her prom dress. Her father, worried, explains that he was the one who told Jesse not to ask her to prom. Angered, Nova storms out of the house. Meanwhile, at Lloyd's house, it is revealed that he is taking his sister to prom. At Jesse's house, his mother has a talk with him, and he realizes that he should still take Nova to prom.
At the school, Tyler leads Simone into the building, and almost immediately abandons her. Simone finds out from a couple of girls that it was actually Jordan who dumped Tyler, and Tyler had gone to her with no other option. When Tyler asks her to dance, (He was crowned prom king and Jordan queen) she refuses and leaves. She goes to the concert parking lot, where she waits for Lucas, and they share a dance.
Rolo comes in with his girlfriend, Athena, much to Ali's surprise. She is also surprised that all he said about her was true.
Nova is having an awful time at prom, and when Mei tells her the centerpiece, the fountain, is broken, she cannot take it anymore. As she is about to leave, she hears the fountain work again, and knows the only person who could have fixed it was Jesse. He walks up to her and asks her to prom. She agrees, and they dance and share a kiss.
You can send in your spoiler to other movies by going here.