Chris Dodds

Staff engineer. Writer. I poke at things until they make sense.

Novella forthcoming: Necessary Cuts (Miami University Press, 2026 Novella Prize).

Making the Necessary Cuts interactive fragment

It’s one thing to write a book, another thing to get it published, and yet another thing to market it. I am very much out of my depth on the marketing side of things, but I’m trying.

I don’t have an audience anymore. The one I had before I quit tech blogging wasn’t massive, but it was something. I largely abandoned social media several years ago, so that’s dead too. I know that SEO takes a while to come to a boil and there’s a whole AI dynamic now that has changed the search landscape. Newsletters are king now along many axes, but I don’t have a list anymore. So what to do? Where to start?

  1. I put up a marketing site for Necessary Cuts and cross-linked it across several of the web properties I own. It’s a new domain name so that in itself will dampen the SEO juice, but you gotta start somewhere.

  2. I wired up a fragment of the book to some low-key visuals and sounds and made an interactive narrative. Check it out.

Interactive narratives have interested me for a while. I’ve seen quite a few at this point but haven’t really loved that many of them. I usually want them to be more ambiguous than they are. The potential feels like it’s there and there are a least a few successful examples. Kentucky Route Zero is a good one that comes to mind. I also like Betwixt, even though it sits a little closer to a “therapy” app.

This was an opportunity to play around with something basic and get a feel for how I might approach a larger work.

What I made

I started by pulling three of the more cinematic/vibe-y scenes from the latest manuscript draft and turning them into a basic screenplay. I knew I wanted to keep it simple, so I limited myself to visuals that were CSS-only, no image assets. Initially, I played around with generated audio, but it was too limiting for what I wanted to do, so I pulled some clips from open source audio libraries (water lapping on a shore, a car driving away on gravel, etc.) and wired those to events in the text.

From there it was just a lot of tweaking. Find the pace, fine-tune timing and transitions, smooth out rough edges. I’m pretty happy with the result and it helped solidify what a future project might look like.

The project only uses vanilla JS, CSS, and HTML. The fanciest thing in it is some Web Audio API stuff that shapes the audio experience (looping, fade-ins/outs, dynamic volume, etc.). It’s not really a game, per se; there’s no real narrative branching or similar. But it is immersive, which I think is the main goal for something like this. Drop the user in the world of the book and let them soak up the vibe of it.

What I learned

  1. I actually like this type of design. The constraint of text + CSS means you have no place to hide and that’s fun. You have to dial in on the details for it to work and when it does work, it really feels like it lands.
  2. Developing something with a very exact “shape” for modern mobile web suuuuuuuucks. I had the desktop experience basically done in an evening. Getting everything dialed in on Mobile Safari took a lot longer.
  3. It really feels like there’s space for literary-flavored interactive narratives. I’m not sure it’s a commercially viable niche, but it should exist as art. There should be more things like this. I would play them.

Will this give me an SEO boost? Will it help me build an email list? Maybe? I like it as art either way though.

Back piece done

I wrote a while back about the back piece I’ve been working on. I was ready to be finished at the time, and wasn’t learning anything more from the discomfort. That held true.

It’s done now, minus the final round of healing. August 2024 to February 2026. Sixty-something hours sitting. The last eight were a slog going over scar tissue and the thin skin of my lower spine. Ladies who get mastectomy cover ups must be made of much stronger stuff than me. I earned this ink though. The little voice in my head that undercuts compliments and warns me I’m flying too close to the sun can’t win this one.

Progression, from first session to last (missing a couple of pics I can’t find at the moment):

Back piece session 1, Aug 2024 Back piece session 2, Sep 2024 Back piece session 3, Oct 2024 Back piece session 4, Nov 2024 Back piece session 5, Jan 2025 Back piece session 6, Mar 2025 Back piece session 7, Apr 2025 Back piece session 8, Jun 2025 Back piece session 9, Jul 2025 Back piece session 10, Sep 2025 Back piece session 11, Oct 2025 Back piece session 12, Jan 2026 Back piece finished, Feb 2026

It’ll settle down a bit once it’s healed. I have a small, silly piece scheduled next month, but nothing more on the books after that. My left arm is probably next though—thinking geometric + organic (leaves, fronds, something like that). We’ll see.

Prediction markets are casinos (I checked)

I kept seeing people talk about making bank on Kalshi. It’s a prediction market: you buy contracts on whether something will happen (temperature, TSA numbers, “I’m just trading on information,” etc). I wanted to see what was actually there, so I had Claude Code build a bot. It also helped with a good deal of the math because I had a football coach for a high school math teacher.

What do?

First, weather, which for the record is a really stupid thing to bet on. Kalshi has temperature markets. Will NYC hit 45°F or above tomorrow, will Austin stay below 85°F, that kind of thing. I pulled GFS (NOAA’s Global Forecast System, via NCEP) weather model runs, bias-corrected against NWS (National Weather Service) history per city, turned that into probabilities for each temperature range, and compared to what the market was charging. When the market overpriced “it will hit this range” (YES) I bought “it won’t” (NO). Pay 40–60¢, collect $1 if the temperature stays outside that range.

First live run was a bloodbath. I (accidentally) had YES and NO both enabled. Twenty trades. 17 YES, 3 NO. The YES trades all lost. The NO trades won. Portfolio went $50 → $16. I turned off YES and re-ran a backtest on 678 past days where we know what actually happened. YES win rate was 12–25% no matter how I set the “minimum edge” cutoff. NO on the same data: 86% win rate, which was too good to be true (can’t trust backtest), but was at least a signal. The model doesn’t predict which bracket will hit but it’s decent at spotting brackets the market overprices. So the only viable strategy was NO-only.

Even then the margins are thin. I added filters:

  • No same-day trading. By then the forecast is stale and you’re betting against thermometers that already know the answer. Win rate was ~80% same-day vs 88% day-ahead.
  • Skip temperature ranges within 3°F of where the model says the high will land (model is worst there)
  • Blacklist cities where the ensemble is garbage. LA marine layer, Miami highs (weird cloud stuff, I think)

When NWS forecast and GFS disagreed by more than 5°F I skipped the trade. With all that I’m currently at 60% win rate live on NO, a few bucks a week on a $50 bankroll. The filters are the edge. More conservative = more profitable per trade.

TSA any better?

While the weather bot was collecting data, I kicked off an investigation of TSA checkpoint volumes, because that is yet another stupid thing you can bet on. Will average daily passengers be above 2.2M, 2.3M, etc. I scraped TSA.gov (daily checkpoint numbers) and built a model with:

  • weighted same-day-of-week rolling average
  • year-over-year anchor
  • holiday filtering

I also added an LLM layer to check for near-term events, but it can only widen uncertainty, never shift the mean. I didn’t play around with it a ton once I realized that the only reasonable trades were going to happen after most of the week’s passenger numbers were reported, and that would be expensive, because everyone would buy at the same time (when those numbers hit).

The other TSA bot guy (Ferraiolo) was pretty pessimistic about this market and that proved out. Not enough people on the other side of the trade. You can only put maybe $20/week in before you’re moving the market. Same structural stuff everywhere: cheap “lottery ticket” contracts lose, pricier ones do a bit better; posting your own price (maker) beats taking someone else’s (taker); fees eat longshots alive.

The house always wins

I looked at other Kalshi categories too. Gas, CPI (consumer price index), whatever. There’s a University College Dublin analysis (Whelan et al., 300K+ contracts) that finds the same thing everywhere. Cheap contracts (under 10¢) lose 60%+ of invested money on average (i.e. capital loss, not just loss rate per trade). Contracts above 50¢ earn small positive returns. The same paper notes that Kalshi prices are still highly informative as forecasts—-the bias is systematic (they model it as people overestimating small probabilities), not random. So the “edge” isn’t magic. It’s betting on the likely outcome (or against the unlikely), posting your price and waiting, and not chasing lottery tickets.

The dangerous part is the framing. Prediction markets get sold as information aggregation, “put your money where your mouth is,” sounding rational and humble about uncertainty. That makes it sound like the smart or well-informed win. They don’t. The structure wins. The people buying cheap YES contracts (the longshots, the “maybe this time” bets) are the ones losing 60%+ of their money to fees and stacked odds. People most at risk are those who think they have an edge because they follow the news or did some research. Even my little experiment here probably has an expiration date. I’m no quant, but neither are the people posting about their “earnings.” Unless they got in super early while the market was still flapping around, it’s just survivorship bias.

Because it’s dressed up as trading or forecasting instead of gambling, people who’d never sit down at a blackjack table (a well-played hand has better odds than this) will sink money in thinking they’re doing something rational. It’s a casino with a think-tank aesthetic.

I got the weather bot profitable-ish by turning off half the strategy, blacklisting cities, and adding a pile of filters. It’ll probably make a little money at a glacial pace. It was fun to build though and I learned some stat and weather stuff.

Update

The expiration date came faster than expected. Return began trending under break even so I pulled the bot. I modeled a few different paths forward: tweaks to the ensemble-based model, a lite-model version that was more focused on time-of-NWS-info-drop, and looking for other mispriced angles in general. No dice. He’s dead, Jim.

Won the 2026 Miami University Press Novella Prize

Remember that exciting thing I couldn’t discuss? It’s official: my novella won the 2026 Miami University Press Novella Prize.

I did a thing!

I’ll share more details as they emerge - cover, release date, all that. For now: this is real, it’s happening, and I’m equal parts thrilled and terrified about people actually reading this thing.

Big thanks to the Miami University Press crew for picking up my odd creature and giving it a home.

More soon. Lots to learn.

Publishing updates

My publishing “system” is picking up steam. First, let’s revisit November:

  • 7 pieces: 1 novella, 3 short creative nonfiction essays, 3 short stories
  • 36 total submissions
  • 14 rejections
  • 2 of those were personalized, the rest were form.
  • 1 of the rejects made it to the second round

Has turned into:

  • 12 pieces: 1 novella, 3 short creative nonfiction essays, 8 short stories
  • 80 total submissions
  • 43 rejections
  • 6 personalized rejections
  • 1 short list
  • 1 long list
  • 1 acceptance
  • 1 thing I can’t talk about yet, but is very exciting.

“This Did Not Matter” didn’t make the short list for Fractured Lit’s Elsewhere Prize, which was a bummer, but expected. I’m shopping it to some more horror/dark-fantasy-focused venues.

The acceptance listed above is one of my weirder pieces - about dissociation and giving up agency. Also a little spicy. It got picked up by BULL. I’ll link to it once it’s live. It got a very binary reaction on CritiqueCircle, which probably means it’s good. :D

The exciting thing which cannot be discussed yet was a big surprise. Soon, my precious. Soon.

Regarding the end-to-end process, I’m finding that:

  • I’m gravitating to a form that’s more than flash, less than short story (1000-2000 words). Some places call it short-short, but most call it flash. Whatever.

  • My general familiarity with mags/journals is maturing and I’ve developed a better sense of fit based on editorial theme. Fewer wasted shots.

  • This is pretty fun. Even if some parts are a slog.