Apologies in advance, I know it has been a while since I last updated you. Things have been crazy with work and real life stuff, I haven’t had as much downtime as I want to be able to build cool shit. I’m working on some things that will make for some great content down the road.
The Daily Face‑Melt
I was born and raised in Arizona. My family lives here. My best friends live here. I have so many great memories here and was obviously missing it so much that I decided to move back from my beloved Madison, WI. In fact, Phoenix is one of the fastest growing cities in America. And I can understand why — we are a haven for tech-genius’s fleeing from California, we have some of the best golf in the world, the food here is criminally underrated, and we have nice weather here for 6 months out of the year.
But those other 6 months? Hell on earth. Actual hell. And I’m sure if I grew up in Minnesota or New Jersey, the 120F/0 humidity summer days sound a lot better than the below freezing blizzards that you would regularly get. But it’s the opposite if you are from here. My brain constantly feels fried in the summers. You can’t go outside. The dogs can’t go outside. You can’t even swim, because the swimming pool is — no joke — 90F on even the coldest July summer days.
This brings me to the blog post. I’m not shy about letting people know I drive a Tesla. I absolutely love it and strongly believe it is the best car on Earth right now. It drives itself (really, really, really, well) and everything I need for it can be done on my phone. I understand people don’t like Tesla because of the current political climate and Elon Musk, and I’m going to avoid touching on that subject for obvious reasons; but I can look past it all. It is one of the greatest products of my lifetime and as a certified grade A tech nerd, its fair to say that I drive my dream car.
But, like everything, you only get 80-90% of what you need out of it. This is my bread and butter.
It’s Hell… but on wheels
As a ADHD riddled man, I am frequently too distracted to remember to start the car’s Climate Keeper (Tesla’s cabin temperature management system) before I need to leave for an event. Too many times have I thought to myself “I need to cool down my car before I go” only to become immediately distracted by something else going on. Then I end up having to sit in a blazing hot car and wait for the climate to cool down.
It’s June 2025 right now, we aren’t at the hottest part of the summer yet — not even close. I don’t have a garage. I recently upgraded from a 2019 Model 3 with white interior (Fernando, I know you’re in a better place) to a 2023 Model Y with a black interior (that I’ve named Felicity; but that story is for another blog post). The hottest I’ve seen the interior of my car so far is 174F. That record has yet to be broken, but I am sure it will.
Hannah’s (my Fiancee) car’s A/C system recently broke and we had to pay a bill to the tune of $2000 to fix it. Before it was hers, it was mine and my sister’s. Why not get a new car? Because the price of a new or used vehicle right now is through the roof. Nothing else is wrong with this car, and even though its at 125K+ miles — I think we can still squeeze some life out of it. I love you Bertha (or Toni, which Hannah has renamed you) please give me 125K more.
Anywayyyy, I got into my portable hell vehicle after once again failing to precondition it and thought to myself:
Why doesn’t the car start cooling when my calendar says I’m leaving?
A quick parking‑lot Google turned up zero solutions, so—obviously—that counted as market research. The idea checked every JBigs box: personal pain, absurdly specific, and potentially passive income. I assumed a “simple” webhook mash‑up would ship in a weekend. (Narrator: it did not.) Queue the meme:
I knew this was gonna be a ride. There were plenty of edge cases like: events without locations, vehicles that love power‑napping, traffic‑surge drive times, and the ever‑hilarious daylight‑saving bomb. Nonetheless, I cracked a Diet Coke, spun up a Heroku dyno, and swore I’d quit once the AC flipped on automatically. (Narrator: he also did not.)
What the User Sees
If you have a Tesla and use Google Calendar to manage your life, head to calendarclimatekeeper.com, smash Sign Up, and watch the onboarding bingo card light up:
- Connect Google — grant read‑only calendar access so we know when to turn your A/C on.
- Connect Tesla — OAuth dance, then a deep link opens the Tesla app so you approve a virtual key. Zero password witchcraft, just an official handshake.
- Choose calendars & car — maybe you only care about work events and the Model Y, not the Craigslist beater Model X with 200K+ miles.
- Tweak the slider — set pre‑cool anywhere from five to thirty minutes. Ten minutes is my sweet spot—long enough to chill leather, short enough to spare the battery.
- Test Climate Button — the app toggles AC on and off so you don’t accidentally refrigerate asphalt.
After that? Close the tab. It’s a PWA, so you can “install” it to your home screen and forget it exists until a push notification brags, “🌡️ 72 °F and ready to roll.” If nothing is on the agenda for 24 hours, the server naps, the car naps, and nobody pays an API bill.
Bonus: A tiny dashboard shows the next upcoming scheduled cool‑downs (events in the next 24 hours), complete with ETA and a smug green check once the AC is confirmed on.
How the Egg Frys on the Dashboard (How it works, plain english edition)
Everything runs on a single Heroku dyno because pennies matter:
- Node / Express for the backend
- Go sidecar that speaks Tesla’s new Fleet Command dialect
- Vanilla HTML / CSS / JS powers the frontend and the PWA—no React, no bundler, just vibes and service workers. Getting back to my roots.
- Neon Postgres free tier for the DB (sorry Heroku, you’re not getting the $5 monthly add-on from me this time around)
And here is how it all flows together:
- Webhook lands — Google pings
/calendar/webhook
the instant you add, move, or cancel a meeting. - Location lookup — If the event has an address, we calculate drive time with Google Routes and cache it for 15 minutes. No address? Travel time becomes zero, and we skip cooling.
- Car position — Last GPS lives in Postgres and RAM. If it’s older than 30 minutes and the event is within the next hour, we gently wake the car; otherwise, we let it snooze. Battery health matters.
- Math —
eventStart − travelMinutes − coolOffset = climateOnTime
. We drop that intoclimate_activations
and are ready to cool your car down. - Cron tick — Every minute a featherweight job checks for activations due ≤ now. If found, it fires
auto_conditioning_start
through the Go proxy. Failure? Log, sleep 60 seconds, retry until departure.
Edge‑cases: duplicate Google notifications are de‑duped; drives under a minute skip cooling; canceled events erase activations; cars in Dog Mode are respected; and the whole pipeline double‑checks your Stripe subscription before spending Tesla credits. :). There are a lot more, but I’ll save you the headache.
Oh—and there’s a mini panic switch. If you manually toggle climate in the Tesla app, the server notices and backs off future commands so we don’t fight like divorced parents sharing HVAC custody.
Privacy, Security, and Other Grown‑Up Stuff
- Data diet: Never keep your calendar stuff, it’s purged nightly at 04:00 UTC.
- Location: GPS is cached for 30 minutes, then obliterated. Request to delete your account, and I will get everything outta there.
- Money: Stripe! I am beginning to see why people hate Stripe (they take too big of a cut). Subscription status is checked before every AC attempt.
- Defenses: REDACTED
Bugs, Facepalms, and War Stories
I shit you not, the 2nd day I was working on this, I sat down with my coffee to start. Nothing worked. I check twitter — the worst Heroku Blackout they have ever had. They were down for 15+ hours. I was disappointed that one of my favorite Youtubers Fireship didn’t do a video on it, till I remembered they are one of his sponsors. I spent three hours poking localhost while the fire was 1,000 miles away. Added offline logging.
Besides that roadblock, I forgot to add an auto‑off feature for the Test Climate Button and the auto-activations. Drained like 3% battery for leaving my climate control on for hours… oops.
Also, fun fact, Tesla forbids “tesla” in domains, so goodbye TeslaCool; hello tongue‑twister Calendar Climate Keeper. Yes, I bought the . com. Yes, I looked up the word Calendar way too many times in the dictionary (the a/e confuses me). I don’t like the name either, but what are you gonna do.
The $3.99 Rationale
Very serious thought went into the price point. And by serious thought, I mean 1 thought and it was kinda like:
$4.99 a month looks like a price tag that is too much. $3.99 looks like something I wouldn’t really care about.
Here is the deal, if fifty folks are happily not melting (or freezing) by winter, the project funds itself and my caffeine habit. KPI achieved.
In all seriousness, the API was the thing I spent the most time on this project. This is the first project I’ve had that utilizes relatively expensive API’s. A lot of thought was put into every scenario and how I could optimize each route so that I was constantly pinging Tesla/Google. This was a key to the success of the project — I refuse to have tech debt.
Rainy Day Roadmap
I really shouldn’t call it rainy day roadmap because it never rains here. That said, there are some enhancements I do want to make:
- WebSocket Telemetry — Replace REST polling, slash 99 % of Tesla calls, maybe knock 30 seconds off wake latency.
- Family‑Fleet Tier — One subscription, multiple VINs, world peace. “Cool the convoy” mode.
- Smarter Push — Enhance notifications to display the current temperature in the cabin.
Try It, Break It
Live in a blast furnace—or an icebox? Sign up, link up, test it. If your car stays toasty because my cron job overslept, send screenshots and abuse; bugs make glorious commit messages. Bonus points for memes. I don’t have multiple Tesla’s and I work from home, so my testing capabilities are limited. Use the code ITEST4JBIGS at checkout and I’ll take $1 off your monthly subscription for 12 months. First 50 users only!
Until next time, remember: