[{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/ai-coding/","section":"Tags","summary":"","title":"Ai-Coding","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/aws/","section":"Tags","summary":"","title":"Aws","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/blog/","section":"Blog","summary":"","title":"Blog","type":"blog"},{"content":" Building Trail Spark: How AI and Serverless Built a Resilient EV Road Trip App # Every great EV road trip is a journey of discovery. Last November, my partner, our golden doodle Korra, and I drove our Rivian R1S from the Seattle area to Denver, Colorado. 3,000 miles. Three mountain passes. Zero gas. I took 225 photos and thought: I should build something to show this trip the way it felt, not the way Instagram would flatten it.\nThat impulse turned into Trail Spark—my hobby platform dedicated to EV road trip documentation and sharing. But there was a catch: I do not code full-time at work anymore, and between professional and family life, I hardly have any time to sit down and write code at home. Furthermore, since I work in cloud engineering, building this on AWS serverless tech was very much a case of eating my own dogfood.\nIn this first post of my engineering blog, I want to talk about how I built a highly resilient, secure, and production-ready serverless system on AWS—and how the entire project was made possible through a partnership with AI coding assistants.\n🤖 The Engine: How AI Made a Hobby Project Possible # In the past, building a full-stack web application as a side project was a daunting multi-month commitment. You had to set up the boilerplate, configure routing, write custom image metadata parsers, manage IAM roles, design database schemas, configure CORS, write test suites, and troubleshoot CDN deployment issues. For a hobbyist with only a few spare hours a week, projects usually died in the bootstrap phase.\nTrail Spark exists today because I partnered with AI:\nCursor allowed me to iterate quickly on the frontend React components and prototype pages. Claude Code acted as a CLI co-pilot, orchestrating infrastructure setups, preparing deployments, and running backend tests. Antigravity helped me deep-dive into complex debugging loops—like tracing why CloudFront was throwing WAF 403 blocks, calculating rolling 5-minute IP rate limits, and implementing in-place WebACL updates. By delegating the boilerplate, configuration syntax, and debugging loops to AI, I could focus entirely on system design and product flow. Instead of writing code, my role shifted to that of an architect: defining goals, reviewing plans, and making high-level architectural decisions.\n📋 The Blueprint: Product Specifications \u0026amp; Claude\u0026rsquo;s Role # Before writing any architecture or code, establishing clear boundaries for the MVP was critical. I used Claude to draft and refine the Product Requirements Document (PRD) for Trail Spark, defining a phased roadmap focused on core features: a chronological, location-aware road trip timeline sorted automatically by time and location (with a media lightbox, narrative description editing, and coordinates linking to Google Maps), public read-only trip URLs for easy sharing, secure DynamoDB persistence, and an AWS SAM serverless backend with CloudFront/S3 hosting.\n🏗️ Architectural Decisions: Why Serverless and SAM? # For a hobby project, operation and maintenance overhead must be near zero. I don\u0026rsquo;t want to wake up to a crashed server, manage container patches, or pay for idle virtual machines.\nThis constraint drove my core architectural decisions:\n1. The Monolithic Server: One to Rule Them All # Instead of splitting the app into multiple microservices, the backend is a single monolithic Express server (~2,300 lines of code) that handles auth, trips, timelines, blog posts, image uploads, engagement, and admin invite codes.\nThe Reason: When building alone, the cost of microservices is the overhead of multiple deployment pipelines, service discovery, and complex distributed tracing. Keeping it monolithic means everything shares the same client instances, middleware configurations, and error handlers. The Serverless Bridge: The Express app exports cleanly for Lambda using @vendia/serverless-express—a thin adapter translating API Gateway HTTP events into standard Express requests. The production handler is only 6 lines, and the exact same codebase runs locally via node server.js for seamless development. 2. S3 + CloudFront with Origin Access Control (OAC) # The frontend is a React SPA hosted in an S3 bucket. However, the bucket is completely blocked from public access. Instead, traffic must go through CloudFront.\nThe Reason: CloudFront acts as a global CDN, caching assets at edge locations close to users for fast load times. By enforcing Origin Access Control (OAC), I ensure that S3 content is only accessible via signed CloudFront requests, preventing direct S3 access and protecting against data scraping and unexpected S3 download bandwidth bills. 3. DynamoDB Single-Table Design # Instead of setting up a relational SQL database that requires connection pooling, server provisioning, and maintenance, I designed a single DynamoDB table. All entities—users, trips, milestones, charging data, and blog posts—coexist in the same table, indexed using composite primary keys:\nUSER#\u0026lt;userId\u0026gt; + SK: PROFILE → user profile (bio, vehicle) USER#\u0026lt;userId\u0026gt; + SK: POST#\u0026lt;tripId\u0026gt; → trip summary \u0026amp; metadata POST#\u0026lt;tripId\u0026gt; + SK: META → detailed trip timeline config POST#\u0026lt;tripId\u0026gt; + SK: MS#\u0026lt;order\u0026gt;#\u0026lt;id\u0026gt; → specific timeline milestone POST#\u0026lt;tripId\u0026gt; + SK: IMG#\u0026lt;id\u0026gt;#\u0026lt;index\u0026gt; → image mapped to a milestone POST#\u0026lt;tripId\u0026gt; + SK: CHARGE#\u0026lt;order\u0026gt;#\u0026lt;id\u0026gt;→ charging log record USER#\u0026lt;userId\u0026gt; + SK: BOOKMARK#\u0026lt;id\u0026gt; → user saved post reference The Reason: DynamoDB has zero maintenance overhead, scales instantly, and costs nothing when there is no traffic (fitting entirely in the free tier). Single-Table design allows me to fetch a complete road trip—metadata, stops, images, and charging data—in a single Query operation on PK = POST#\u0026lt;tripId\u0026gt;, avoiding database joins and multiple round-trips. 💥 Lessons from the Edge: Tracing the Silent Failures # Building serverless systems on the AWS edge introduces unique integration challenges. Two debugging stories stand out:\n1. The WAF That Ate My Blog Posts # Initially, users could create trips, but writing blog posts containing HTML in the rich-text editor (TipTap) triggered a \u0026quot;Network error: Unexpected token '\u0026lt;'\u0026quot; and crashed the React app.\nHere is the chain of events I had to trace:\nThe rich text editor sends request bodies containing HTML: { body: \u0026quot;\u0026lt;p\u0026gt;My \u0026lt;strong\u0026gt;blog\u0026lt;/strong\u0026gt; post\u0026lt;/p\u0026gt;\u0026quot; } AWS WAF\u0026rsquo;s AWSManagedRulesCommonRuleSet flags the request via its CrossSiteScripting_BODY rule and blocks it with a 403 Forbidden. CloudFront\u0026rsquo;s custom error configuration converts the 403 response into a 200 OK serving the React SPA\u0026rsquo;s index.html (standard for client-side routing fallback). The React frontend parses the HTML page where it expects a JSON response, leading to the crashing syntax error. The Fix: I updated deploy.sh to configure WAF in-place and exclude the CrossSiteScripting_BODY rule from the managed rule group, since our blog editor is supposed to accept HTML. I also adjusted CloudFront to only apply SPA redirects to 404s, letting 403 errors surface properly to the API layer. 2. Native Binaries on Lambda: The Sharp Dilemma # To generate high-performance image timelines, the backend converts iPhone HEIC files to JPEGs and resizes thumbnails via sharp.\nThe problem: sharp relies on a native library (libvips). The binary compiled on my local macOS environment fails on Lambda\u0026rsquo;s Graviton2 ARM64 Amazon Linux runtime. The Fix: I wrote a lazy-loading mechanism. When the server boots, it runs a native dependency check. If sharp fails to load (e.g. during a mismatched local runtime test), the app falls back to writing the raw image buffer. The uploads still succeed, ensuring the application remains robust. 🛡️ The Billing Breaker: Andon Cord \u0026amp; Budget Kill-Switch # For a personal hobby project, a primary concern was AWS budget overruns. A sudden surge in traffic—or a malicious DDoS attack—could scale a serverless application instantly, potentially racking up thousands of dollars in usage bills.\nTo prevent this, I implemented two defensive layers:\n1. Multi-Tier Rate Limiting \u0026amp; Scope-Downs # I configured WAF edge limits to block automated scrapers. However, a timeline with 225 photos loads them in parallel, which instantly tripped our strict edge limit of 100 requests per 5 minutes.\nTo fix this without compromising protection, I added a WAF Scope-Down Statement using the base64-encoded representation of /img/ (L2ltZy8=):\nExcluded the /img/* prefix from the strict RateLimit100Per5Min API rule. Created a separate RateLimit2000ImgPer5Min rule targeting only /img/* to allow media loads while keeping defenses against DDoS flood attacks. 2. The Andon Cord # Taking inspiration from Toyota\u0026rsquo;s manufacturing line, I built an automated Andon Cord.\nIf AWS Budgets detects that my $10/month cap is breached, or if CloudWatch registers a DDoS-like invocation surge, an SNS alert triggers the Kill Switch Lambda. This Lambda instantly overrides the reserved concurrency of my Express API Lambda to 0:\naws lambda put-function-concurrency \\ --function-name trail-spark-api-prod \\ --reserved-concurrent-executions 0 This acts as a physical breaker, taking the API offline instantly to prevent billing overruns. I also built a CLI tool (./andon-cord.sh) to check status:\n./andon-cord.sh status # State: ONLINE (unrestricted) # Concurrency: Account Limit (default) ⛑️ Observability \u0026amp; Monitoring: An Engineering Approach # As a developer, I know first-hand that you cannot manage what you do not measure. Observability and monitoring are not optional add-ons; they are core architectural requirements. For a self-hosted hobby project on AWS, we need minimal operational overhead, budget safety, and fast troubleshooting.\nI structured our observability stack into four key pillars:\nUnified Dashboard (TrailSpark-BotTraffic): A 30-panel CloudWatch Dashboard tracking client traffic (CloudFront edge latency and cache hit ratios), compute health (API Gateway times, Lambda execution percentiles and error rates), data persistence (DynamoDB read/write capacity and latency), and security (WAF total, blocked, allowed, and bot traffic). Operational Alarms: Automated CloudWatch Alarms notifying me via an SNS Alerts Topic for elevated Lambda errors (trail-spark-lambda-errors), near-concurrency limits (trail-spark-lambda-throttles), API Gateway 5xx faults (trail-spark-api-5xx), and DynamoDB read/write throttling (trail-spark-dynamo-throttle). Automated Resilience (The Andon Cord): If CloudWatch registers a DDoS-like traffic surge—such as Lambda invocations exceeding 500/min or DynamoDB read/write capacity spiking—or if AWS Budgets detects our $10/month cap is breached, an SNS alert automatically triggers our Kill-Switch Lambda. This Lambda overrides the Express API\u0026rsquo;s reserved concurrency to 0, acting as a physical circuit breaker to take the API offline instantly and prevent runway billing. Logging \u0026amp; Privacy Auditing: We stream WAF logs continuously to CloudWatch Logs (aws-waf-logs-trail-spark-prod) with a 30-day retention policy to facilitate rate-limit tuning, and track AWS Rekognition metrics to monitor the dynamic license plate blurring pipeline during media uploads. 🧪 Validating the System: Gameday Testing # Because AI built these resilience systems, I needed a way to prove they work under real-world stress. I created a test script called gameday.sh that simulates live attacks and budget breaches directly against the production environment.\nThe gameday suite runs 12 automated scenarios, including publishing mock budget alerts, simulating DDoS spikes to trigger the Andon Cord, and launching concurrent request bursts to test WAF rate limiting. Running the suite verifies that all circuit breakers trip, notify, and recover successfully—giving me peace of mind that my pocketbook is safe.\n🚀 What\u0026rsquo;s Next? # With the backend secured and the infrastructure automated, I am currently focusing on:\nDynamic License Plate Blurring: Using AWS Rekognition to detect license plates in uploaded trip images and processing them dynamically using Sharp to preserve privacy. SPA Optimization: Migrating my frontend React app from Create React App to Vite to streamline local development and build times. Beta Sharing: Inviting other Rivian and EV road-trippers to start mapping and documenting their adventures. Stay tuned for my next post, where I will dive deep into the math behind spatial milestone grouping using EXIF geo-coordinates!\nI am a developer who builds things for the EV community. I drive a Rivian R1S, travel with my golden doodle Korra, and have strong opinions about charging station coffee.\n","date":"May 25, 2026","externalUrl":null,"permalink":"/blog/building-trailspark/","section":"Blog","summary":"","title":"Building Trail Spark: How AI and Serverless Built a Resilient EV Road Trip App","type":"blog"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/cloudfront/","section":"Tags","summary":"","title":"Cloudfront","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/dynamodb/","section":"Tags","summary":"","title":"Dynamodb","type":"tags"},{"content":"EV Enthusiast \u0026amp; Road Tripper. Documenting my adventures, EV road trips, and green tech learnings across the Cascades and beyond.\n","date":"May 25, 2026","externalUrl":null,"permalink":"/authors/electric-adventurer/","section":"Authors","summary":"","title":"Electric Adventurer","type":"authors"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/","section":"Home","summary":"","title":"Home","type":"page"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/lambda/","section":"Tags","summary":"","title":"Lambda","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/serverless/","section":"Tags","summary":"","title":"Serverless","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/side-project/","section":"Tags","summary":"","title":"Side-Project","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/categories/technology/","section":"Topics","summary":"","title":"Technology","type":"categories"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/categories/","section":"Topics","summary":"","title":"Topics","type":"categories"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/trailspark/","section":"Tags","summary":"","title":"Trailspark","type":"tags"},{"content":"","date":"May 25, 2026","externalUrl":null,"permalink":"/tags/waf/","section":"Tags","summary":"","title":"Waf","type":"tags"},{"content":"87,000 miles. Three EVs. Three and a half years. All electric.\nI sat down the other day and did the math on how much carbon I\u0026rsquo;ve actually kept out of the atmosphere since going electric. The number blew my mind!!\nThe Numbers # So I ran every mile across all three vehicles against what I would have burned in a gas SUV averaging 25 MPG. That\u0026rsquo;s the kind of vehicle I\u0026rsquo;d need for life in the Cascades. I used 2026 EPA Well-to-Wheel data and Washington\u0026rsquo;s actual grid emissions, because being honest about the grid matters! EVs aren\u0026rsquo;t zero-emission. They\u0026rsquo;re only as clean as the electricity that charges them. In Washington, that electricity is really clean, over 70% hydroelectric. But it\u0026rsquo;s not zero, and I\u0026rsquo;m not going to pretend it is.\nHere\u0026rsquo;s the breakdown:\n87,000 miles at 25 MPG would have burned 3,480 gallons of gasoline, producing 38.6 metric tons of CO2. That fuel stayed in the ground!\nBut charging three EVs over 3.5 years consumed roughly 33,962 kWh. On Washington\u0026rsquo;s grid, that generated about 7.8 metric tons of CO2. That\u0026rsquo;s real and it counts.\nNet offset: 30.8 metric tons of CO2!!\nLet that sink in. That\u0026rsquo;s seven years of an average American\u0026rsquo;s total carbon footprint! Same as planting 1,240 trees and letting them grow for a decade! Or skipping 62 cross-country flights!\nAnd the thing that really gets me? I didn\u0026rsquo;t do this by downsizing my life! I didn\u0026rsquo;t buy a tiny commuter car and limit myself to errands around town. I bought big, capable SUVs. I drove them across mountain passes in snowstorms! I road-tripped 2,400 miles through the Rockies with my dog! I lived the exact life I wanted to live, and the planet was 31 tons better off for it!!\nThat\u0026rsquo;s the argument for going electric that nobody makes loudly enough. It\u0026rsquo;s not about sacrifice. It\u0026rsquo;s not about giving things up. It\u0026rsquo;s about doing the same things, or bigger things, without the cost to the planet. The technology is here, right now!\nSo how did I get here?\nICE to Electric # I love cars! Always have. I\u0026rsquo;ve owned several ICE vehicles over the years and my absolute favorite was a 2013 BMW X5. That thing had presence! I may write a blog post about all my cars someday - It\u0026rsquo;s not like I had Jay Leno\u0026rsquo;s garage lol, just something personal to me.\nIn August 2022, I\u0026rsquo;d recently moved to Washington for my job in tech. Pacific Northwest was the new home, I had a 60-mile round-trip commute from the Cascade foothills to Seattle down I-90, and it felt like the right time to try the electric life! The only real good option at the time was the Tesla Model Y, so I got the Performance model. Black, fast, and ruthlessly efficient at 3.5 mi/kWh.\nMan, I loved that car! The instant torque, the tech, the silence. The only thing I didn\u0026rsquo;t love was the harsh ride, which I fixed a little by swapping to all-terrain tires on 18-inch wheels. Meanwhile, the Acura RDX just sat in the driveway. I loved that car too, but after the Tesla arrived it barely moved. It was the gas-powered safety net I told myself I still needed for snow runs or hauling gear. It was also the thing keeping me from being able to say my household was fully electric!\nCascade foothills Korra approved The Comfort Problem # OK so here\u0026rsquo;s what nobody tells you about the Performance Model Y. After tens of thousands of miles of commuting, you start to feel every single one of them! The ride never really softened up, even on 18s. And the seats. Look, seats are personal, but for us — three days a week on I-90 from the foothills to Seattle and back — we never got comfortable. We\u0026rsquo;d been spoiled by the BMW X5, the Acura RDX, the Infiniti FX37. The Tesla seats just didn\u0026rsquo;t do it for us.\nWe wanted something bigger. Something more comfortable. Something that didn\u0026rsquo;t make a 70-mile commute feel like an endurance test! That\u0026rsquo;s how we found the Rivian R1S. From the very first test drive, it was obvious. The R1S was what the Model Y wanted to be when it grew up! Everything the Tesla did well, the R1S did better, and it was built for people who actually put miles on their cars.\nIn March 2024, I traded the Acura for the R1S. Black. Quad motor. That was the moment the driveway went fully electric. No more gas vehicles, period! Then in October 2024, I traded the Model Y (33,000 miles on the odometer) for a Green R1T as my daily driver. Two Rivians. Zero gas. What a time to be alive!!\nTwo Rivians, zero gas The Efficiency Tradeoff # Now here\u0026rsquo;s the tricky part. Moving to Rivians meant accepting 2.2 mi/kWh instead of the Tesla\u0026rsquo;s 3.5. That\u0026rsquo;s a 37% drop in efficiency! How does an environmentalist justify that?? By staying fully electric for everything. And I mean everything. No gas backup. No \u0026ldquo;oh we\u0026rsquo;ll take the other car for that trip.\u0026rdquo; Every single mile, electric.\nThe Road Trips # These aren\u0026rsquo;t garage queens! I drive my cars! The Tesla took us to Portland twice and up to Vancouver, Canada. That was my first taste of long-distance EV travel. But the Rivians are where the real adventures happened!\nThe R1T handled an Oregon coast trip without breaking a sweat. And the R1S\u0026hellip; oh man, the R1S Quad is the best car I\u0026rsquo;ve ever owned, full stop! It checks every single box. We took it on two epic road trips to Denver and back, 2,400 miles round-trip through the Rockies with Korra in the back seat! One of those trips was in the dead of winter through actual snowstorms. Whiteout conditions on I-70, and the R1S just powered through like it was built for exactly that moment. Because it was!!\nR1T, Oregon coast R1S in Moab Charging at sunset I wrote up the full story of our winter Denver road trip — the charging stops, the route planning, the Moab detour, Vail Pass at night in the snow. All of it!! And that trip is actually the reason I built TrailSpark. More on that in the post.\nI cannot get enough of this machine! I loved the BMW X5, I loved the Tesla, but the R1S is something different. It\u0026rsquo;s the first vehicle I\u0026rsquo;ve owned where I never think about what it can\u0026rsquo;t do. I just drive it and it handles everything!!\nThe R1S at Red Rocks — it looks like it belongs here Before the Rivians, I needed the Acura as a gas backup for anything the Tesla couldn\u0026rsquo;t handle. The Rivians eliminated that entirely. Less efficient per mile, but every single mile is electric. That\u0026rsquo;s the tradeoff, and I\u0026rsquo;d make it again in a heartbeat!\nWhat\u0026rsquo;s Next # I started as a car guy who loved ICE cars. The BMW X5, the iconic Infiniti FX37. I miss them all! But nothing — and I mean nothing — beats EVs. I love my Rivians. Over the last 3.5 years driving electric, I\u0026rsquo;ve kept 31 tons of carbon out of the sky! I traded efficiency for utility, gave up the gas backup entirely, and in exchange? I get to live the exact outdoor life I want without wrecking the outdoors I\u0026rsquo;m out there to see.\nThe odometer keeps climbing. So does the offset. We\u0026rsquo;re just getting started!!\n","date":"March 29, 2026","externalUrl":null,"permalink":"/blog/the-28500-mile-pivot/","section":"Blog","summary":"","title":"31 Tons of Carbon Kept Out of the Sky!! 87,000 Electric Miles and Counting","type":"blog"},{"content":"","date":"March 29, 2026","externalUrl":null,"permalink":"/tags/carbon-offset/","section":"Tags","summary":"","title":"Carbon-Offset","type":"tags"},{"content":"","date":"March 29, 2026","externalUrl":null,"permalink":"/categories/electric-vehicles/","section":"Topics","summary":"","title":"Electric Vehicles","type":"categories"},{"content":"","date":"March 29, 2026","externalUrl":null,"permalink":"/tags/ev/","section":"Tags","summary":"","title":"Ev","type":"tags"},{"content":"","date":"March 29, 2026","externalUrl":null,"permalink":"/tags/rivian/","section":"Tags","summary":"","title":"Rivian","type":"tags"},{"content":"","date":"March 29, 2026","externalUrl":null,"permalink":"/tags/sustainability/","section":"Tags","summary":"","title":"Sustainability","type":"tags"},{"content":"","date":"March 29, 2026","externalUrl":null,"permalink":"/tags/tesla/","section":"Tags","summary":"","title":"Tesla","type":"tags"},{"content":"3,000 miles. Three mountain passes. 11,113 feet altitude. Zero gas stops. One very good dog. Let\u0026rsquo;s go!!\nA cross-country road trip from Seattle to Denver is a big deal in any vehicle. Doing it in an EV in late November through the Rockies? That\u0026rsquo;s a dare. We did this for the first time in 2024 in the Rivian R1S, blitzed it in two days, and it was exhausting. Amazing, but exhausting.\nThis time we did it right. Four leisurely days each way. Overnight stops in Boise, Salt Lake City, and Grand Junction. Hotels booked on the road, the morning we needed them. No reservations. No fixed itinerary. Just a weather window and a Rivian!\nThe Basics # Route: Seattle Area, WA → Denver, CO → Seattle Area, WA Vehicle: Rivian R1S The Crew: Me, my partner, and our 100 lb Goldendoodle, Korra ~3,000 Round Trip Miles · 7 Days on the Road · 11,113 Peak Altitude (ft) · 3 Mountain Passes · 0 Gas Stops\nTotal trip stats — efficiency and consumption breakdown Trip stats — distance and duration summary Outbound Route · I-90 → I-84 → I-15 → US-191 → I-70 → Denver # Seattle Area, WA — Departed ~1 PM · 99% charge · Korra installed in back seat · weather looking good · let\u0026rsquo;s go ⚡ Hermiston, OR — Electrify America · 52%→88% · 33 min · 121 mi added · $28.84 ⚡ Island City, OR — Electrify America · 50%→85% · 30 min · dense fog at Deadman Pass just before this stop 🌙 Boise, ID — Night 1 · 454 miles · hotel booked en route · overnight L2 charge ⚡ Burley, ID — Tesla · 13%→77% · 37 min · 221 mi added · $39.85 ⚡ Farr West, UT — Tesla · 13%→77% · 38 min · 219 mi added · $13.79 — best value stop of the trip!! 🌙 Salt Lake City, UT — Night 2 · 364 miles · Wasatch Front at dusk · overnight charge ⚡ Spanish Fork → Wellington, UT — Two stops through Price Canyon country ⚡⚡ Moab, UT — Unplanned detour · Charged twice · explored the canyon · almost stayed the night · no regrets 🌙 Grand Junction, CO — Night 3 · 339 miles · Gateway to Colorado · Korra: deeply satisfied ⚡ Edwards, CO — Tesla (Vail Valley) · Pre-summit charge · 26%→55% · 15 min · don\u0026rsquo;t skip this one ⚡ Frisco, CO — Tesla (9,097 ft) · Post-summit · I-70 traffic jam → Google reroutes → unplowed road → R1S handles it 🏔 Denver, CO — Arrived · 277 miles · Day 4 complete · 11,113 ft summit cleared · Korra: couch claimed We Decided the Morning Of # I\u0026rsquo;d been watching the weather for days. Late November in the Pacific Northwest and the Rockies? Not exactly predictable! The route from Seattle to Denver crosses three significant mountain passes, with Vail Pass on I-70 as the final boss. We were tracking forecasts obsessively — Snoqualmie Pass, the Blue Mountains in Oregon, the Wasatch Range, the Rockies.\nThe morning of November 26th, things looked good. Cold but clear. We made the call! Packed up, loaded Korra, and just\u0026hellip; went. We booked every hotel on the road, the morning we needed it. No reservations. No agenda. Just a weather window and a Rivian.\nDay One — Seattle to Boise: Fog at Deadman Pass # Left around 1 PM, leisurely by design. We take I-90 east to Yakima, south on I-82 through the valley, then I-84 into Oregon, destination Boise for the first night. The landscape isn\u0026rsquo;t your most beautiful but it isn\u0026rsquo;t boring either.\nFirst charge: Hermiston, Oregon. Electrify America, 33 minutes, 121 miles added. We walked Korra, grabbed food, didn\u0026rsquo;t rush. This is the thing about EV road trips that people who haven\u0026rsquo;t done one don\u0026rsquo;t understand — the charging stops aren\u0026rsquo;t the inconvenience. They\u0026rsquo;re the structure! You get out of the car. You move. You eat actual food instead of drive-through. You walk the dog. You arrive at your destination less destroyed than you would have otherwise.\nOn the 2024 trip I was grinding through charging stops like a gas station — minimize time, get back on the road. This trip I let them breathe. Thirty minutes at Hermiston: Korra walk, coffee, food. Thirty-eight minutes at Farr West in Utah: same. You arrive at your overnight stop actually relaxed! This alone is worth doing the trip in four days instead of two.\nThen came Deadman Pass. East of Pendleton on I-84, in the dark, dense fog rolling in off the Blue Mountains. Visibility dropped hard. We slowed down, stayed calm, and pressed through. The most tense twenty minutes of the outbound trip! Not because anything went wrong, but because it\u0026rsquo;s the kind of stretch where you understand why you watch the forecast. We\u0026rsquo;d checked. We knew it was coming. We got through it.\nIf you\u0026rsquo;re running this route in November or December, check the ODOT TripCheck cameras before you get to Pendleton! The fog we hit was dense but manageable. Ice would have been a different story.\nIsland City charge, then into Idaho. Boise by night. 454 miles on day one, and we weren\u0026rsquo;t tired. That\u0026rsquo;s the difference!!\nFirst charge of the trip — topped up and ready to roll Hermiston, OR — Electrify America at night, Korra visible in the back seat Day Two — Boise to Salt Lake City: Idaho Long and Utah Surprise # Day two is the Idaho day. The Snake River Plain opens up and stays open for a long time. There\u0026rsquo;s something meditative about it — cruise control set, big sky, Korra doing her slow rotation between the back seat configurations she\u0026rsquo;s identified as optimal. Burley for a hard charge (13% to 77%, 37 minutes, 221 miles added) and then south into Utah.\nThe Farr West stop just north of Ogden was the pleasant surprise of the outbound trip! Same charge depth as Burley, 219 miles added in 38 minutes, but only $13.79!! Tesla utility pricing in Utah is dramatically lower than Electrify America. If you\u0026rsquo;re routing this corridor, run your long Utah charges through Tesla wherever the network allows. The delta is significant!\nSalt Lake City at dusk, the Wasatch Front catching the last of the light. We booked a hotel, checked in, walked Korra around whatever park was closest. Day two done. 364 miles, zero stress.\nSnake River Plain — Korra holding down the back seat at a Tesla stop The Idaho day — big sky, open road, cruise control set Burley at 13% — the Rivian preconditioning for that fast charge Southern Idaho at sunset — snow-capped mountains ahead, Utah getting close The Wasatch Front at night from Farr West — $13.79 for 219 miles!! Day Three — Salt Lake to Grand Junction: Moab Wasn\u0026rsquo;t the Plan # South through Utah is where the landscape starts doing things! Spanish Fork and the Price Canyon stretch — canyon walls pressing in, the terrain getting dramatic and red. We charged at Spanish Fork and Wellington, both uneventful in the best way, and kept heading south.\nSpanish Fork charge stop — Korra supervising, Wasatch mountains behind Spanish Fork Canyon — wind turbines lining the valley Price Canyon — the walls start pressing in and you know you're heading somewhere special South through canyon country — the terrain getting red, Moab calling The approach to Moab — red rock, snow-capped La Sals, and the conversation was short We had range. Moab was a detour but not a crazy one. I love Moab! We\u0026rsquo;ve been there before and I think about it more than is probably reasonable for someone who doesn\u0026rsquo;t live in Utah. So when we had battery to spare and the sign was right there, the conversation was short.\nThe best thing about range confidence? It lets you say yes to the detour!!\nWe charged at the RMP Electrify America station in Moab twice — once on arrival, once before leaving. This charger in Moab is so cool, charge up before you go on off-roading adventures! We did go through two not-so-busy Tesla Superchargers, both V3, so decided to go to the faster EA charger. We drove the Potash road for some pictures and did a short hike in the red rock. Afternoon light on red rock in late November is something. Korra did not want to leave! She was happy roaming the trails, sniffing the new landscape at dusk. We almost stayed the night, but eventually decided we\u0026rsquo;d push to Grand Junction to stay on schedule for the Vail crossing. I still think about not staying. We\u0026rsquo;ll be back and spend some real time in Moab. The R1S was in its element there even though we didn\u0026rsquo;t get to take it offroading!\nArriving in Moab — the EA charger with canyon walls rising behind Potash Road — the R1S surrounded by red rock Golden hour on the red rocks — November light in Moab is something else The canyon road at dusk — this is why you go to Moab The R1S in the canyon — we almost stayed the night Last charge before Grand Junction — the EA station in Moab at dusk Found a hotel with a level 2 charger in downtown Grand Junction and let the car charge close to 100% overnight.\nMorning in Grand Junction — L2 topped us off overnight, ready for the final push Day Four — Grand Junction to Denver: The Final Boss # I-70 east from Grand Junction through Glenwood Canyon is by far my most favorite drive!! The Colorado River running alongside, canyon walls rising hundreds of feet on both sides, tunnels carved through solid rock and the winding road — the Rivian becomes a true canyon carver. Having lived in Colorado 10 years before, we have done this stretch a number of times. Man, I miss this road!\nOnce through the Canyon, the terrain opens into the Vail Valley and the mountains start building toward something. We spent a couple of hours walking in the town of Vail, clicking pictures, reminiscing of old times. We left after it was already dark.\nVail Village — holiday decorations up, flags flying, old memories coming back The R1S in Vail — ski slopes behind, Vail Pass ahead Vail Pass is the final boss!! Eisenhower Tunnel at 11,013 feet, highway summit at 11,113 — the highest point on the entire US Interstate system! In late November, after dark, with a dusting of snow on the ground, it demands respect. We charged at Edwards in the Vail Valley specifically so we\u0026rsquo;d hit the summit with plenty of margin. That stop is not optional on this route in winter. Don\u0026rsquo;t skip it!\nLight snow on the summit, I-70 backed up with traffic. Google routed us off the interstate onto an inner road — unpaved, unplowed, dark. The R1S didn\u0026rsquo;t flinch! The Toyo AT3 all-terrain tires, all-wheel drive, air suspension doing what it\u0026rsquo;s built for. It was the most dramatic twenty minutes of the trip and also a perfect demonstration of why this vehicle exists!! We made it to Frisco, charged to 77%, and descended into Denver with the city lights spreading below us.\nEdwards charge stop — Korra peeking out, ready for the summit Frisco at 9,097 ft — snowy, dark, and we just crossed Vail Pass 1,435 miles from the Seattle area. Three mountain passes, dense fog, rain, Moab detour at dusk, Vail Pass at night, off-road detour on unplowed road. Zero gas stops! Does it get any more adventurous than this for any vehicle, let alone an electric one??\nFour Nights in Denver # We spent almost a week in Denver. And the entire time I was watching the weather back home!\nFirst night in Denver — earned this meal after 1,435 miles A major snowstorm was building over the Rockies and the Pacific Northwest — the kind that makes Snoqualmie Pass genuinely dangerous. I was checking forecasts every morning like a nervous pilot checking instruments. We decided to leave a day early to target a weather window. That decision mattered! The Return — Post-Snowstorm, Icy Roads, Mountain Home at Midnight # We left the day after a major snowstorm had dumped on Denver and the Rockies. Roads were still icy when we pulled out. The R1S in these conditions is something else — stable, planted, confidence-inspiring in a way that\u0026rsquo;s hard to explain. I call it the Tank! The Toyo AT3 EVs I had recently installed were phenomenal in the snow.\nLeaving Denver — I-70 west, post-snowstorm, the Rockies covered in fresh snow Into the mountains — roads clear, snow everywhere, the R1S in its element Near the summit — snow-dusted pines, the pass approaching Glenwood Canyon in winter — canyon walls, snow, and the best drive in America Deeper into the canyon — the Colorado River below, rock and snow above Heavy rain through Utah and Idaho. Sustained precipitation over mountain terrain hits range harder than highway cruising — the cold, the regen cycles, the slower speeds through weather. We made every stop, we watched the battery, we made it. But it was a reminder that range planning in bad weather needs a buffer you don\u0026rsquo;t need on a clear day!\nThen Mountain Home, Idaho. Dead of night. We pulled into a gas station — no power! The entire site was dark, the gas station, the Supercharger, everything. We turned around, found the next available charger, added maybe thirty minutes to the night. It wasn\u0026rsquo;t dramatic, it\u0026rsquo;s a thing that happens. But this is the most important habit for EV road trips: have a backup in mind before you arrive at a charge stop! Especially late at night in rural stretches.\nSnoqualmie Pass was the anxiety I\u0026rsquo;d been carrying the whole return trip. The forecast had been calling for heavy snow. We watched it shift and soften all day as we drove north through Oregon. By the time we hit the Cascades it had largely fizzled — mostly rain, manageable conditions. The R1S climbed the pass, regen brought us down the west side, and we were home!!\nI\u0026rsquo;ve driven this corridor twice in an EV now. Once in a sprint, once at a human pace. The leisurely version wins every time! Not just because it\u0026rsquo;s easier on you. Because you actually get to be in it.\nThe Honest Take # Here\u0026rsquo;s the honest version of where EV road tripping stands right now, from someone who\u0026rsquo;s done the Seattle-Denver run twice:\nIt\u0026rsquo;s not quite like driving a gas car yet. You still think about range. You still plan your stops. The charging network has gaps — long stretches in rural Oregon and Utah where you run the math more carefully than you\u0026rsquo;d like. A dead Supercharger at midnight is a real thing that happens!\nBut we are very, very close! Two complete 3,000-mile round trips in the R1S, across the Rockies, in November, in weather — and both worked. The infrastructure on the Seattle-Denver corridor is genuinely excellent. The car handles everything the mountains throw at it. The charging stops, when you let them breathe, become the part of the trip you remember!\nI love that I can do these trips — the open roads, the freedom, the Moab detours we almost talked ourselves out of, the breathtaking cold beauty of I-70 through the Colorado Rockies, the food, all of it — without burning a drop of gas! Without polluting the outdoors I\u0026rsquo;m out there to see. There\u0026rsquo;s something in that I can\u0026rsquo;t fully articulate but can\u0026rsquo;t stop thinking about.\nThe adventure, the dare of it! Becoming one with the machine on I-70 in the dead of winter, the most demanding interstate in the country. Trusting your instincts, trusting the car. I love every moment of it!!\nWhy I Built TrailSpark # After this trip I came home with hundreds of photos. Every charging stop, every Moab canyon walk, every Vail Pass whiteout moment. And all of them had GPS coordinates and timestamps baked right in! I kept looking at my camera roll thinking — this entire trip is in here! The whole story, every stop, every mile, all in the metadata of photos we were already taking.\nBut where does that trip live? A group chat that gets buried in a week? A camera roll nobody scrolls back to? These trips deserve to be seen and shared! The routes, the charging stops, the moments where you\u0026rsquo;re standing in Moab at golden hour.\nSo I built TrailSpark! You drop your photos in and it builds your road trip. Your stops, your route, your charging data, your milestones — all on a timeline you can share. No writing required, just the photos you already took.\nIf You\u0026rsquo;re Planning This Route # Do it in four days, not two!! The two-day version is possible. I\u0026rsquo;ve done it. It\u0026rsquo;s exhausting and you see nothing. Four days with overnight stops in Boise, SLC, and Grand Junction is the right pace for this route.\nWatch the weather obsessively. Three mountain passes — Snoqualmie, the Blues, and Vail. All of them can close or get ugly in late fall. Check TripCheck OR and CDOT the morning of every driving day. Leave a day early if a storm is building!\nCharge at Edwards before Vail Pass. Non-negotiable in winter! The summit is at 11,113 ft and cold weather plus climbing will eat range. Stop at Edwards even if you feel like you have enough. You want margin at the top.\nGo to Moab. Seriously!! It\u0026rsquo;s a short detour off the main corridor. If you have range and you haven\u0026rsquo;t been, go. If you have been, go again. We almost stayed the night and should have.\nHave a backup for every charge stop. Know the next charger before you pull in, especially at night in rural Idaho and Oregon. Dead stations happen! Mountain Home at midnight taught me that.\nBring the dog. Korra knew she was on an adventure from the moment the bags came out. She loved every hotel. She walked every charging stop. She\u0026rsquo;s the reason the Moab detour lasted as long as it did! Bring the dog!!\nThe Electric Adventurer \u0026amp; Korra · Seattle Area, WA → Denver, CO → Seattle Area, WA · November-December 2025\nGot your own EV road trip? Drop your photos into TrailSpark and share it!!\n","date":"December 15, 2025","externalUrl":null,"permalink":"/blog/trailspark-seattle-denver-road-trip/","section":"Blog","summary":"","title":"A Winter Colorado Electric Adventure in R1S","type":"blog"},{"content":"","date":"December 15, 2025","externalUrl":null,"permalink":"/tags/adventure/","section":"Tags","summary":"","title":"Adventure","type":"tags"},{"content":"","date":"December 15, 2025","externalUrl":null,"permalink":"/tags/moab/","section":"Tags","summary":"","title":"Moab","type":"tags"},{"content":"","date":"December 15, 2025","externalUrl":null,"permalink":"/tags/road-trip/","section":"Tags","summary":"","title":"Road-Trip","type":"tags"},{"content":"","date":"December 15, 2025","externalUrl":null,"permalink":"/tags/vail-pass/","section":"Tags","summary":"","title":"Vail-Pass","type":"tags"},{"content":"I\u0026rsquo;m an environmentalist who is deeply hopeful about clean technology and the EV transition. We are one with nature. We belong to this incredible planet, and going electric is a key step in aligning our mobility with the ecosystems we love.\nI drive a Rivian R1S, travel with my wife and our 100 lb golden doodle Korra, and love exploring the Cascades and the Rockies.\nWhat I Believe # I believe EV road tripping is the ultimate modern adventure. The charging stops are not an inconvenience; they are the structure of the journey! They encourage us to slow down, walk the dog, grab actual food, and arrive at our destination refreshed.\nBut I also believe the EV transition still needs better tools. That\u0026rsquo;s why I build TrailSpark—a platform that extracts GPS and time metadata from your road trip photos to build location-aware shareable timelines.\nWhat I Write About # This site is where I share my EV road trips, sustainability calculations, and learnings about green exploration:\nEV Road Trips — Chronological travel logs, route guides, and peak altitude winter crossings. Charging \u0026amp; Infrastructure — The honest truth about the charging network, preconditioning, and finding backups in rural stretches. Sustainability — Doing the math on electric miles and carbon offsets. Join me on the road, drop your photos into TrailSpark, and let\u0026rsquo;s go!!\n","externalUrl":null,"permalink":"/about/","section":"Home","summary":"","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/categories/longevity-and-health/","section":"Topics","summary":"","title":"Longevity and Health","type":"categories"},{"content":"","externalUrl":null,"permalink":"/categories/my-work/","section":"Topics","summary":"","title":"My Work","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]