Chapter 29 River

TWENTY-NINE

RIVER

I’m trying to focus.

Truly. I am.

The blue light of my monitor pulses like a heartbeat as I scroll through this line of backend code for the third time. It’s an easy fix, a bad loop that keeps crashing the player interface. But my fingers aren’t moving. I’m not thinking about the code.

I’m thinking about him.

Gage.

He’s only a few desks away. Sleeves pushed up, brows furrowed, and lips curled in the kind of smirk that ruins women. A smirk I’ve tasted. A smirk that was buried against my throat last night while he whispered he needed me.

I cross my legs. Squeeze them tighter. Try to refocus on the lines of text in front of me.

System.out.println(“Focus, River. Don’t be a simp.”)

Gage looks up just then, catches me looking. That damn smile spreads. Not a smirk this time—something softer. Knowing. Intimate.

My pulse stumbles. My face heats.

I yank my attention back to the screen, chewing on my bottom lip like it holds the secret to pretending I’m not wildly obsessed with the man across the room.

But it’s no use. My thoughts are tangled up in the way he washed my hair this morning, kissed the inside of my wrist like it meant something. I’m not used to this. Being wanted. Being seen.

And then I hear it.

“River, can I speak with you?”

Andrew’s voice slices across the floor, flat and unbothered. The office buzz stills around me like a record scratch. Heads turn subtly.

I paste on my sure, boss smile and grab my tablet.

Inside his office, the blinds are half-drawn. He waves to a chair but doesn’t sit himself, preferring to perch on the edge of his desk with that easy, confident posture that used to come across as charming. Now?

I see liar in the seams of his button-up.

“Just wanted a quick update on the terrain rendering for the Temple Cavern module,” he says, folding his arms.

I nod and flip to the schematic. “Still on track. I'm testing a new shadow-mapping protocol that should reduce the visual stutter by about 30%.”

He hums. “Excellent. I’ll need a write-up by end of day.”

“Of course,” I say, trying to keep my tone even. He’s acting normal, like he didn’t just suck face with Helena in a city park like an unmarried man. Like he isn’t one of the highest-up people at NovaPlay. And she’s HR. HR, for God’s sake.

My stomach twists. I hate secrets. Especially when they’re wrapped in shiny job titles and smug smiles.

As I leave his office, my gaze instinctively slides to Gage. He looks up. Our eyes meet. And for a second, the whole damn building disappears.

He knows.

He knows what I just had to stomach.

I return to my desk, jaw tight, chest tighter—and that’s when I see her.

Tasha.

Sitting on my desk, actually. Like she owns it. A Starbucks cup in one hand, that magazine-smile on her face.

“Hey, stranger,” she chirps. “Figured I’d stop by and say hi since I haven’t seen you outside of girls' night in a while.”

I force a smile. “Been busy.”

Her eyes flick to Gage’s desk and back. “Mmm. I bet.”

I blink. “Excuse me?”

She just laughs. “Come on, Riv. Everyone saw how you two were eye-banging each other all last week. I’m not judging.” She sips her coffee, red nails gleaming. “It’s just weird, isn’t it? Sleeping with someone at work when there’s so much chaos going on?”

My pulse stutters. She’s needling me. But why?

I lean back in my chair and give her a neutral look. “Pretty sure you’ve got the market cornered on office gossip.”

“True,” she purrs. “But not even I can tell who’s behind these leaks. Makes you wonder though, right?” She tilts her head. “Who’s leaking this stuff? Who’s logging into your life?”

I bristle. She knows. She has to know.

She’s not just throwing darts. She’s watching me bleed.

I don’t reply. I can’t.

She waves with the hand holding her coffee and walks away like she didn’t just leave landmines behind.

I try to get back to work, but the buzzing under my skin won’t stop. Gage sees it. He walks by once, brushes his fingers across the back of my chair, and murmurs, “You okay?”

“I’m fine.”

I’m not.

And later that afternoon, just when I think I’ve made it through the day without losing my grip entirely, my phone buzzes.

I expect it to be Gage. Or maybe Juno checking in.

It’s not.

MASON: We need to talk. Please.

I stare at the message.

Cold dread trickles down my spine like a spider. My fingers shake.

I don’t answer.

I open our old text thread. The last thing he sent before this was a TikTok of a donkey with the caption: Miss your crazy ass. That was a year ago. I never replied.

My eyes drift to the message again.

MASON: We need to talk. Please.

Why now?

My gaze flicks to the side where Gage is still typing, unaware. But he senses me looking. Always does. His eyes lift. Concern darkens them immediately.

I press my phone to my chest and take a deep breath.

Mason’s text could mean a hundred things.

But somehow, I already know it’s bad.

If ads affect your reading experience, click here to remove ads on this page.