Source Code
src/pages/projects/shuttle_bus.rs
use leptos::*;
use leptos_meta::{Meta, Title};
use super::data::ALL_PROJECTS;
use super::super::seo::Seo;
#[component]
pub fn ShuttleBus() -> impl IntoView {
let project = ALL_PROJECTS
.iter()
.find(|p| p.slug == "bus-conversion")
.unwrap();
let skills_view = project
.skills
.iter()
.map(|&s| view! { <li>{s}</li> })
.collect::<Vec<_>>();
view! {
<Title text="The Nomad – Peter Pinto"/>
<Meta name="description" content="Converting a 2018 Chevy Express 3500 shuttle bus into a fully off-grid mobile home and remote workspace powered by solar and Starlink."/>
<Seo title="The Nomad – Peter Pinto" description="Converting a 2018 Chevy Express 3500 shuttle bus into a fully off-grid mobile home and remote workspace powered by solar and Starlink." path="/projects/bus-conversion"/>
<div class="page">
<span class="eyebrow">"Projects"</span>
<h1>"The " <em style="font-style:italic; color: var(--accent)">"Nomad"</em></h1>
<p class="lead">
"A 2018 Chevy Express 3500 shuttle bus — bought from a community center at
government auction — being converted into a fully off-grid mobile home and
remote workspace. Solar power, running water, a Starlink uplink, and enough
headroom to stand up."
</p>
<ul class="skills-list" style="margin-top: 1.5rem;">
{skills_view}
</ul>
<hr class="divider"/>
// ── Acquisition ────────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Acquisition"</span>
<h2>"The Find"</h2>
<p>
"The bus came up on GovDeals — a government surplus auction site where
municipalities, schools, and public agencies offload fleet vehicles. This
one had spent its life as a community center shuttle before the center
downsized and listed it. A 2018 Chevy Express 3500 on a cutaway chassis,
fourteen seats, clean drivetrain."
</p>
<p style="margin-top: 1rem;">
"Government auctions are worth watching for conversion vehicles. Fleet units
are maintained on schedule and the service history is often documented. This
one had some water intrusion at the rear wall — visible in the listing photos
if you knew what to look for — but the chassis and mechanicals were solid.
The water damage was a negotiating point, not a dealbreaker."
</p>
<div class="photo-grid">
<img src="/bus/IMG_20250828_153022_301.jpg" alt="Pickup day" loading="lazy"/>
<img src="/bus/IMG_20250828_153018_248.jpg" alt="Exterior inspection on pickup day" loading="lazy"/>
</div>
<div class="photo-grid photo-grid--single" style="margin-top: 0.625rem;">
<img src="/bus/IMG_20250828_152955_068.jpg" alt="Original 14-seat interior" loading="lazy"/>
</div>
</section>
<hr class="divider"/>
// ── Strip-Down ──────────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Phase 1"</span>
<h2>"The Strip-Down"</h2>
<p>
"The first task was clearing everything non-structural: all fourteen passenger
seats, the ceiling headliner, sidewall panels, original flooring, and most of
the factory wiring harness. This exposed the bare metal ribs of the body and
made the scope of the water damage clear."
</p>
<p style="margin-top: 1rem;">
"Water had entered through the rear wall seam and worked behind the lower
sidewall panels, soaking the original foam insulation and rotting a section
of the plywood subfloor beneath it. The damage was contained to the rear
quarter — structural ribs unaffected. All compromised material came out;
exposed metal surfaces were cleaned and treated before anything new went back in."
</p>
<div class="photo-grid">
<img src="/bus/IMG_20250907_180351_682.jpg" alt="Demolition underway" loading="lazy"/>
<img src="/bus/IMG_20250907_180402_373.jpg" alt="Panels and insulation stripped" loading="lazy"/>
</div>
<div class="photo-grid" style="margin-top: 0.625rem;">
<img src="/bus/IMG_20250909_191112_371.jpg" alt="Interior debris mid-strip" loading="lazy"/>
<img src="/bus/IMG_20250914_183854_459.jpg" alt="Continuing the teardown" loading="lazy"/>
</div>
<div class="photo-grid" style="margin-top: 0.625rem;">
<img src="/bus/IMG_20250914_183904_621.jpg" alt="Stripped frame and original wiring" loading="lazy"/>
<img src="/bus/IMG_20250925_174856_888.jpg" alt="Cleaning salvageable insulation outside" loading="lazy"/>
</div>
</section>
<hr class="divider"/>
// ── Weatherproofing ─────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Phase 2"</span>
<h2>"Seal Everything"</h2>
<p>
"Before anything new goes in, the exterior has to be watertight. The rear
window that had allowed water ingress was sealed permanently — glass removed,
frame cleaned back to bare metal, opening filled with a layered butyl and
EPDM system. All remaining window frames were resealed with fresh butyl tape
where the factory compound had aged out."
</p>
<p style="margin-top: 1rem;">
"The roof was inspected from above and found structurally sound but showing
UV oxidation and minor crazing in the factory coating. Dicor self-leveling
lap sealant was applied over all roof seams and penetrations. The four
existing roof vents were pulled, reseated on new butyl, and reinstalled."
</p>
<div class="photo-grid">
<img src="/bus/IMG_20250930_175458_230.jpg" alt="Bare interior after full strip" loading="lazy"/>
<img src="/bus/IMG_20250930_175506_278.jpg" alt="Rear section assessed" loading="lazy"/>
</div>
<div class="photo-grid" style="margin-top: 0.625rem;">
<img src="/bus/IMG_20251005_155458_477.jpg" alt="Rear window opening modification" loading="lazy"/>
<img src="/bus/IMG_20251009_183033_716.jpg" alt="Sealed rear window exterior" loading="lazy"/>
</div>
<div class="photo-grid" style="margin-top: 0.625rem;">
<img src="/bus/IMG_20251013_075645_156.jpg" alt="Exterior sealant application" loading="lazy"/>
<img src="/bus/IMG_20251013_075649_354.jpg" alt="Roof seam detail" loading="lazy"/>
</div>
<div class="photo-grid" style="margin-top: 0.625rem;">
<img src="/bus/IMG_20251019_150131_524.jpg" alt="Roof inspection from above" loading="lazy"/>
<img src="/bus/IMG_20251019_150148_363.jpg" alt="Exterior overview" loading="lazy"/>
</div>
</section>
<hr class="divider"/>
// ── Subfloor ────────────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Phase 3"</span>
<h2>"Subfloor"</h2>
<p>
"With the interior sealed and the metal substrate treated, the first
construction step was laying a new subfloor. AdvanTech panels — a
high-density engineered flooring board with a moisture-resistant binder —
were cut to fit the factory floor ribs and glued down. The result is
a flat, rigid working surface across the full length of the cabin that
won't move or squeak and won't fail if moisture finds it again."
</p>
<div class="photo-grid photo-grid--single" style="margin-top: 1.25rem;">
<img src="/bus/IMG_20251127_144525_173.jpg" alt="AdvanTech subfloor panels installed" loading="lazy"/>
</div>
</section>
<hr class="divider"/>
// ── Layout ──────────────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Planned Interior"</span>
<h2>"Floor Plan"</h2>
<p>
"The cabin runs roughly eleven feet from the cab divider to the rear wall —
enough for a complete living and working space without compromising on any
one zone. The layout divides into three areas:"
</p>
<ol class="project-steps">
<li>
<strong>"Rear — Sleeping"</strong>
" — A fixed queen platform spanning the full interior width, raised
eighteen inches for under-bed storage. A privacy curtain on a track
separates it from the rest of the cabin when closed."
</li>
<li>
<strong>"Mid — Kitchen & Seating"</strong>
" — Driver side: a compact galley with a stainless steel sink, 12V
compressor refrigerator, and a two-burner induction cooktop. Passenger
side: a bench dinette with a fold-flat table that seats two or converts
to an extra sleeping surface for guests."
</li>
<li>
<strong>"Forward — Office"</strong>
" — A standing-height desk built against the cab divider with monitor
arm and wall-mounted cable management. The goal is a workstation that
actually functions as one, not a surface to balance a laptop on."
</li>
</ol>
<p style="margin-top: 1rem;">
"Sanitation is a composting toilet in a small enclosed cabinet near the
entry door — no black tank, no dump station. A rear-bumper mounted outdoor
shower pulls from the fresh water system for a rinse after a hike."
</p>
</section>
<hr class="divider"/>
// ── Electrical ──────────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Electrical System"</span>
<h2>"Power"</h2>
<p>
"The electrical design targets full off-grid self-sufficiency for multiple
days of typical use — laptop, external monitor, lighting, refrigerator,
water pump, and device charging — without engine run time or a campground
hookup. The core components:"
</p>
<ol class="project-steps">
<li>
<strong>"600W Solar Array"</strong>
" — Three 200W rigid monocrystalline panels mounted flat on the roof,
wired in series-parallel to the charge controller. Sized to fully
recharge the bank within a reasonable window even under partial cloud
cover."
</li>
<li>
<strong>"300Ah LiFePO4 Battery Bank"</strong>
" — Two 150Ah lithium iron phosphate batteries in parallel at 12V,
giving roughly 3.6kWh of usable capacity at 80% depth of discharge.
LiFePO4 was chosen for its thermal stability, flat discharge curve,
and ten-year-plus cycle life."
</li>
<li>
<strong>"Victron SmartSolar MPPT 100/30"</strong>
" — Charge controller handling solar-to-battery conversion with
Bluetooth monitoring via the VictronConnect app."
</li>
<li>
<strong>"Victron Phoenix 2000W Inverter"</strong>
" — Pure sine wave output for AC loads. Handles the induction cooktop
in short bursts and runs office equipment without issue."
</li>
<li>
<strong>"30A Shore Power Inlet"</strong>
" — For campground hookups or driveway charging when solar isn't
sufficient. A DC-DC converter also tops up the house bank from the
alternator while underway."
</li>
</ol>
<p style="margin-top: 1rem;">
"All circuits run through a Blue Sea fuse block with labeled breakers.
A Victron BMV-712 battery monitor tracks state of charge, voltage, and
current draw in real time."
</p>
</section>
<hr class="divider"/>
// ── Connectivity ────────────────────────────────────────
<section class="project-section">
<span class="eyebrow">"Connectivity"</span>
<h2>"Starlink"</h2>
<p>
"The core motivation for this project was a space to live and work from
without putting work on hold. That requires real internet. A Starlink
flat-panel antenna will be roof-mounted on a low-profile tilt bracket,
with the router and power supply in a vented cabinet inside. The
flat-panel draws 50–75W in normal operation — well within what the
solar system can sustain indefinitely."
</p>
<p style="margin-top: 1rem;">
"The goal isn't to find cell signal in a parking lot. It's to park
somewhere genuinely remote — a national forest road, a high desert flat,
a mountain pull-off — and still close a pull request."
</p>
</section>
</div>
}
}