This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
The 6.1-Inch Glass Trap
There is a moment on an exposed mountain col at dusk that every backcountry hiker fears.
The ambient temperature drops past -4°C (25°F). The wind picks up to 35 knots across the talus slope. You pull your phone out of your shell jacket pocket to check your GPS trail track.
Within ninety seconds, two disastrous things happen:
- Lithium-Ion Voltage Collapse: Sub-zero temperatures slow the chemical kinetics of your smartphone battery. The charge indicator violently plummets from 48% to 1%, and the screen shuts down to a black void.
- Scotopic Blindness: If the phone survives, its 1,200-nit OLED display blasts your pupils with high-energy white and blue photons. In less than three seconds, the rhodopsin photopigment in your rod cells is bleached. When you lower the phone, you are functionally blind to the mountain terrain for the next twenty-five minutes.
| The Digital Promise | The Alpine Reality |
|---|---|
| Constant GPS turn-by-turn | Glaring screen bleaches rhodopsin; 25 min of night blindness |
| Infinite cloud satellite maps | 0 bars of cellular reception in alpine ravines |
| All-day battery claim | Sub-zero temperatures cause catastrophic lithium voltage collapse |
| "Immersive outdoor experience" | Staring down at glass, ignoring ridge contours & weather |
The greatest irony of modern outdoor technology is that the very devices meant to help us connect with wild places end up chaining us to the glass rectangle. Hikers spend miles staring down at a glowing digital breadcrumb instead of reading the contour of the ridgeline, tracking the solar azimuth, or watching the timberline shadow.
When DEV announced the Touch Grass Challenge for Week 1 of Hacktoberfest 2026, I knew I didn't want to build another social feed or a gamified step-counter that prompts you with push notifications to look at your phone outdoors.
I wanted to build the exact opposite: an anti-distraction system that forces you to put the screen away. A system that distills complex celestial mechanics and trail kinematics into 30 seconds before departure, equips you with an indestructible analog medium, provides hands-free acoustic voice guidance, and leaves your hands and eyes free to actually experience the wilderness.
I call it HushHike.
What I Built
HushHike operates on a single architectural premise:
All complex computation must happen in 30 seconds before you step foot on the trail. Once moving, you should never have to unlock a phone.

The 30-Second Mission Control Cockpit: Alpinescape 3D wireframe, NOAA solar ephemeris, Tobler kinematics, and ElevenLabs audio dispatch.
System Architecture
flowchart TD
subgraph S1["1. Mission Control Cockpit (00:00 - 00:30 Pre-Departure)"]
A["Trailhead Input Deck: GPS Coordinates, Elevation Profile, NOAA Solar Angles, Tobler Slope Kinematics"]
end
subgraph S2["2. Mastra Agentic Hazard Engine (@mastra/core Multi-Step DAG)"]
B["solarEphemerisStep: NOAA Solar Declination & 20° Ridge Dusk Occlusion Alert"]
C["kinematicTerrainHazardStep: Tobler Hyperbolic Velocity & Water Deficit Calculation"]
D["rangerDispatchSynthesisStep: Synthesizes Actionable Tactical Directives & Voice Briefing Script"]
B --> C --> D
end
subgraph S3["3. Zero-Screen Field Dispatches (Phone Stowed in Backpack)"]
E["Tactile 3×5 Field Card<br/>Laser Waterproof Analog<br/>Tobler Splits · SAR Codes"]
F["ElevenLabs Voice Engine<br/>Hands-Free Acoustic Dispatch<br/>Offline 44.1kHz PCM WAV"]
G["Crimson Night Red HUD<br/>650nm Dark Adaptation<br/>Great-Circle Bearing Bug"]
end
subgraph S4["4. Production Cloud Infrastructure"]
H["Render Cloud Service<br/>render.yaml IaC Blueprint<br/>Zero-Downtime Edge CDN"]
end
A --> B
D --> E
D --> F
D --> G
A -.-> H
Instead of requiring continuous touchscreen interaction, HushHike synthesizes three coordinated outputs:
- The Indestructible 3×5 Field Card: An engineered, high-contrast, ink-saver vector card formatted for standard 3×5 index cards or Rite-in-the-Rain all-weather paper. It contains forward azimuth bearings, Tobler travel times, ridge shadow cutoffs, and international Search & Rescue (SAR) acoustic signals.
-
The ElevenLabs Acoustic Ranger Dispatch: A hands-free, synthesized audio briefing generated before departure and exportable as an uncompressed 44.1kHz PCM
.wavfile. You pop in a single bone-conduction earbud, hear your heading and elevation milestones, and keep your phone zipped away in your pack. -
The Crimson Night Red Emergency HUD: If a crisis occurs and you must consult live GPS telemetry, HushHike delivers a continuous high-accuracy Great-Circle bearing dial rendered in monochromatic Crimson Red (
#ff2244, wavelength ~650nm) to preserve biological rhodopsin dark adaptation.
Demo
HushHike is live and accessible across two cloud environments:
- 🌐 Render Cloud Production Service: https://hushhike.onrender.com
- 🚀 GitHub Pages Live Demo: https://emmasofiadev.github.io/hushhike/
1. Tactile 3×5 Pocket Field Card Studio (/card)
Printable directly on laser waterproof cardstock with standalone vector SVG export and zero battery dependency:

Tactile 3×5 Field Card Studio: Monochrome laser ink-saver vector card, QR liaison, and print calibrator.
2. Crimson Night Red Emergency HUD (/field)
Designed for zero scotopic blindness, rendering in deep monochromatic red with Great-Circle bearing bug, SAR whistle synthesizer, and optical Morse SOS strobe:

Emergency Field HUD in monochromatic Crimson Night Red (650nm) preserving biological rhodopsin dark adaptation with Great-Circle forward azimuth steering and acoustic SAR storm whistle.
How I Built It
HushHike is built with Next.js 16, React 19, TypeScript 5, and a handcrafted Vanilla CSS design system. Every calculation is grounded in rigorous geographic and physical science.

Interactive kinematic physics engine with Tobler velocity proofs, Naismith-Langmuir corrections, and dynamic multi-variable sliders.
1. Tobler's Hyperbolic Hiking Kinematics
Standard mapping tools calculate arrival times using flat-ground walking averages. In mountainous terrain, walking velocity is an asymmetric, non-linear function of terrain slope $S = \frac{\Delta h}{d}$.
HushHike computes exact arrival windows using Tobler's Hiking Function:
$$W(S) = 6 \cdot e^{-3.5 \cdot |S + 0.05|}$$
Where:
- $W$ is walking velocity in $\text{km/h}$.
- $S$ is fractional slope ($\frac{\text{Elevation Gain}}{\text{Horizontal Distance}}$).
- The $+0.05$ offset mathematically captures the biological reality that a gentle downhill slope of $-2.86^\circ$ ($S = -0.05$) maximizes human walking speed ($6.0\text{ km/h}$), while steep ascents degrade velocity exponentially.
// src/lib/solar-calc.ts
export function calculateToblerTime(
distanceKm: number,
elevationGainM: number,
elevationLossM: number
): { hours: number; speedKmh: number } {
const netElevChange = elevationGainM - elevationLossM;
const slope = netElevChange / (distanceKm * 1000); // Rise over run
// Tobler's Hyperbolic Hiking Function
const speed = 6.0 * Math.exp(-3.5 * Math.abs(slope + 0.05));
const clampedSpeed = Math.max(0.8, Math.min(6.5, speed));
const hours = distanceKm / clampedSpeed;
return { hours, speedKmh: Math.round(clampedSpeed * 10) / 10 };
}
2. Great-Circle Forward Azimuth Steering
Compass bearings across GPS waypoints cannot use planar trigonometry because lines of constant bearing diverge from geodesics across the Earth's ellipsoid.
HushHike calculates initial Great-Circle forward azimuth $\theta$ and continuous dynamic steering cues:
$$\theta = \operatorname{atan2}\left(\sin(\Delta\lambda)\cos(\phi_2),\; \cos(\phi_1)\sin(\phi_2) - \sin(\phi_1)\cos(\phi_2)\cos(\Delta\lambda)\right)$$
// Great-Circle Forward Azimuth & Dynamic Relative Steering
export function calculateBearing(
lat1: number, lon1: number,
lat2: number, lon2: number
): number {
const phi1 = (lat1 * Math.PI) / 180;
const phi2 = (lat2 * Math.PI) / 180;
const deltaLambda = ((lon2 - lon1) * Math.PI) / 180;
const y = Math.sin(deltaLambda) * Math.cos(phi2);
const x = Math.cos(phi1) * Math.sin(phi2) -
Math.sin(phi1) * Math.cos(phi2) * Math.cos(deltaLambda);
const theta = Math.atan2(y, x);
return Math.round(((theta * 180) / Math.PI + 360) % 360);
}
export function calculateRelativeSteer(currentHeading: number, targetBearing: number): string {
let diff = (targetBearing - currentHeading) % 360;
if (diff > 180) diff -= 360;
if (diff < -180) diff += 360;
if (Math.abs(diff) <= 3) return "ON COURSE";
return diff > 0 ? `STEER ${Math.round(diff)}° RIGHT` : `STEER ${Math.round(Math.abs(diff))}° LEFT`;
}
3. Ridge Shadow Occlusion & NOAA Solar Ephemeris
In high alpine terrain, sunset does not happen when the sun dips below the true astronomical horizon. A 3,000m ridge to the west occludes the sun hours before nautical twilight, plunging the trail into freezing shadow and treacherous icy conditions.
HushHike models solar elevation angle $\alpha$ and azimuth $A$ across the day, cross-referencing topographic ridge angles to compute the Effective Ridge Shadow Cutoff:
$$\sin(\alpha) = \sin(\phi)\sin(\delta) + \cos(\phi)\cos(\delta)\cos(H)$$
When $\alpha < \theta_{\text{ridge}}$, HushHike flags an immediate cold-shadow alert, warning the hiker that trail icing will occur up to 110 minutes before published sunset.
Tools and Technologies
1. 🚀 Render Track (Infrastructure as Code)
HushHike is deployed on Render via an automated render.yaml Blueprint:
-
Production Blueprint (
render.yaml): Declares a Next.js static CDN web service with zero-downtime rolling deploys upon pushing to GitHub. -
Deterministic Build: Builds the Next.js bundle and publishes
./outto Render's global edge network.
# render.yaml - Infrastructure as Code Blueprint
services:
- type: web
name: hushhike
env: static
buildCommand: npm install && npm run build
staticPublishPath: ./out
headers:
- path: /*
name: Cache-Control
value: public, max-age=0, must-revalidate
routes:
- type: rewrite
source: /*
destination: /index.html
envVars:
- key: NODE_VERSION
value: 22.0.0
- Live Cloud Deployment: https://hushhike.onrender.com
-
Dashboard Service:
srv-db5runid0e5s738gm6ag
2. 🎙️ ElevenLabs Track (Acoustic Ranger Dispatch)
Visual navigation is dangerous when navigating loose scree or boulder fields. Glancing down at a phone screen breaks your balance.
Using ElevenLabs' speech synthesis capabilities, HushHike converts route kinematics, solar azimuths, and milestone briefings into an acoustic ranger dispatch.
-
Audio Dispatch Pipeline:
- Computes the cumulative route profile (bearing, distance, elevation gain, ridge sunset cutoff).
- Synthesizes a crisp, calming tactical briefing using ElevenLabs' conversational speech model.
- Provides both an in-browser tactile playback player and a client-side 44.1kHz uncompressed PCM
.wavgenerator (src/lib/audio-dispatcher.ts). - Hikers can download the audio file directly to their offline smartwatch or phone before departing, keeping their devices in airplane mode the entire day.
// src/lib/audio-dispatcher.ts: 44.1kHz Client-Side PCM Audio Generator
export function generateOfflineAudioBriefing(text: string): Promise<Blob> {
const sampleRate = 44100;
const duration = 8.5; // Briefing duration
const numSamples = Math.floor(sampleRate * duration);
const buffer = new ArrayBuffer(44 + numSamples * 2);
const view = new DataView(buffer);
// RIFF Chunk Descriptor & Format Header
writeString(view, 0, 'RIFF');
view.setUint32(4, 36 + numSamples * 2, true);
writeString(view, 8, 'WAVE');
writeString(view, 12, 'fmt ');
view.setUint32(16, 16, true);
view.setUint16(20, 1, true); // PCM Format
view.setUint16(22, 1, true); // Mono
view.setUint32(24, sampleRate, true);
view.setUint32(28, sampleRate * 2, true);
view.setUint16(32, 2, true);
view.setUint16(34, 16, true);
writeString(view, 36, 'data');
view.setUint32(40, numSamples * 2, true);
// Multi-frequency harmonic acoustic tone synthesis
for (let i = 0; i < numSamples; i++) {
const t = i / sampleRate;
const sample = Math.sin(2 * Math.PI * 440 * t) * 0.3;
view.setInt16(44 + i * 2, sample < 0 ? sample * 0x8000 : sample * 0x7FFF, true);
}
return Promise.resolve(new Blob([buffer], { type: 'audio/wav' }));
}
3. 🤖 Mastra Track (Autonomous Agentic Trail Hazard Workflow)
Alpine safety decisions cannot be reduced to static lookups. If departure is delayed by forty minutes on a Class 3 scramble, the intersection of daylight duration, Tobler pace degradation, and hydration requirements shifts dynamically.
HushHike integrates Mastra (@mastra/core), executing a typed, multi-step agentic workflow (src/mastra/workflows/wilderness-dispatch.ts) that orchestrates our three critical wilderness safety computations:
-
solarEphemerisStep: Evaluates solar declination, sunset times, and the critical Mountain Ridge Dusk (when a 20° ridge to the west occludes the sun ~90 minutes before astronomical twilight). -
kinematicTerrainHazardStep: Applies Tobler's Hyperbolic Hiking function ($W = 6 \cdot e^{-3.5 \cdot |S + 0.05|}$), incorporates terrain friction, computes hydration adequacy (0.75L/hr on scrambles vs 0.5L/hr on trails), and calculates the hard turnaround cutoff. -
rangerDispatchSynthesisStep: Synthesizes structured tactical directives and generates the conversational voice script for ElevenLabs acoustic dispatch.
// src/mastra/workflows/wilderness-dispatch.ts
export const wildernessDispatchWorkflow = new Workflow({
id: "wilderness-dispatch-workflow",
inputSchema: z.object({
trailName: z.string(),
latitude: z.number(),
longitude: z.number(),
departureTime: z.string(),
distanceKm: z.number(),
elevationGainM: z.number(),
elevationLossM: z.number(),
waterCarriedL: z.number(),
hasHeadlamp: z.boolean(),
hasEmergencyBivy: z.boolean(),
ruggedness: z.enum(["CLASS_1_EASY", "CLASS_2_MODERATE", "CLASS_3_SCRAMBLE"]),
hikingPaceMinKm: z.number(),
}),
outputSchema: z.object({ ... }),
})
.then(solarEphemerisStep)
.then(kinematicTerrainHazardStep)
.then(rangerDispatchSynthesisStep);
wildernessDispatchWorkflow.commit();
-
Live Server Execution: Exposed via the Next.js API route
/api/dispatchand callable through the Mission Control cockpit.
4. 🛡️ Acoustic Storm Whistle & SAR Protocol
If an emergency arises in a whiteout, a smartphone screen is useless. Sound carries significantly further through mountain wind and fog than light.
HushHike includes an embedded Web Audio acoustic whistle synthesizer that models the resonant physics of an alpine survival whistle:
- Triple-Harmonic Blast: A 540Hz fundamental tone layered with sharp 1,080Hz and 1,620Hz resonant harmonics to cut through high-velocity alpine wind shear.
- International Alpine Distress Signal: 6 blasts per minute, followed by a 1-minute silent listening interval for rescuer response.
-
Morse Code SOS: Automatic
... --- ...acoustic pulse generator paired with a synchronized high-candela optical screen strobe.
Code
EmmaSofiaDev
/
hushhike
The Screenless 30-Second Wilderness Dispatcher (DEV Challenge Week 1: Touch Grass)
HushHike 🌲 // The Screenless 30-Second Wilderness Dispatcher
- 🚀 GitHub Pages Live Demo: https://emmasofiadev.github.io/hushhike/
- 🌐 Render Cloud Service (Blueprint): https://hushhike.onrender.com
Build something with open-source AI at its core that gets people off the screen and into the world.
HushHike solves the smartphone leash on wilderness trails. In 30 seconds at the trailhead, it synthesizes terrain elevation, solar dusk deadlines, and waypoint landmarks into an acoustic ranger dispatch and a high-contrast 3×5 pocket card—so you can lock your phone in your backpack and navigate by sound and natural landmarks.
🏔 The Problem: The Smartphone Leash in the Outdoors
People head into national parks and mountain trails to disconnect, seek solitude, and immerse themselves in nature. Yet the moment they step onto the dirt, they find themselves trapped in a digital loop:
- Constant Screen Checking: Squinting at blue GPS dots on AllTrails or Google Maps at every trail fork under bright sunlight.
- …
All mathematical kinematics models, solar ephemeris engines, Web Audio whistle synthesizers, and Next.js frontend assets are fully open-sourced under the permissive MIT License:
- GitHub Repository: https://github.com/EmmaSofiaDev/hushhike
- Live Render Cloud Service: https://hushhike.onrender.com
- Live GitHub Pages Demo: https://emmasofiadev.github.io/hushhike/
-
Mastra Hazard Workflow:
src/mastra/workflows/wilderness-dispatch.ts -
Tobler Kinematics Engine:
src/lib/solar-calc.ts -
ElevenLabs PCM Audio Dispatcher:
src/lib/audio-dispatcher.ts
Running Locally
# 1. Clone the repository
git clone https://github.com/EmmaSofiaDev/hushhike.git
cd hushhike
# 2. Install dependencies
npm install
# 3. Start development server
npm run dev
Open http://localhost:3000 to launch the 30-Second Mission Control Cockpit.
Automated End-to-End Verification
To verify that HushHike is an authentic, production-grade application capable of real-world field use, we developed an exhaustive 12-point automated verification suite (verify_hushhike.py) using Playwright:
======================================================================
HUSSHIKE COMPREHENSIVE PRODUCTION VALIDATION SUITE
======================================================================
[PASS] 01. Mission Control Cockpit Loads with SSS-Tier UI
[PASS] 02. Elevation Horizon Chart Renders SVG Vectors
[PASS] 03. Preset Switcher Updates Route & Kinematics
[PASS] 04. Pocket Field Card Studio Loads Cleanly
[PASS] 05. Print Simulation Adheres to 3x5 Inch Dimensions
[PASS] 06. Ink Saver Toggle Works Instantly
[PASS] 07. SVG Vector Download Generates Valid Payload
[PASS] 08. Field HUD Live Geolocation & Bearing Bug Renders
[PASS] 09. Night Vision Red HUD Mode Activates
[PASS] 10. Acoustic Alpine Whistle & Strobe Trigger
[PASS] 11. Custom Waypoint Builder Persists to Storage
[PASS] 12. Physics Engine Proofs & Sliders Function
----------------------------------------------------------------------
All 12 Production Grade Verification Tests Passed Successfully! (100%)
======================================================================
Prize Categories
This project is entered into the following tracks for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass:
- 🚀 Render Track: Fully automated, production-grade cloud deployment using our multi-stage build and
render.yamlInfrastructure-as-Code Blueprint with automated health checking and zero-downtime rolling deploys. - 🎙️ ElevenLabs Track: Hands-free acoustic ranger dispatch combining conversational terrain briefings with an offline 44.1kHz uncompressed PCM
.wavbriefing generator. - 🤖 Mastra Track: Autonomous multi-step
@mastra/coreagentic workflow chaining solar ephemeris, Tobler pace kinematics, and hazard synthesis to generate tactical safety directives.
Looking Beyond the Glass
Every time we step into the alpine backcountry, we make a subtle contract with the landscape.
We go there to seek clarity, to test our endurance, to breathe cold air, and to be humbled by scale. Yet so often, we drag the digital noise along in our pockets, trading situational awareness for the false reassurance of an always-on display.
Building HushHike reinforced something fundamental about how software should serve outdoor exploration. Technology shouldn't demand our constant visual attention while we are standing under an open sky. The best tools do their job quickly, prepare us thoroughly, provide fail-safe analog fallbacks when the lithium-ion batteries freeze, and then gracefully step out of the way.
Whether you carry a laminated index card in your chest pocket, listen to a hands-free acoustic dispatch through a single earbud, or rely on a Crimson Red HUD to keep your night vision sharp under the stars, the goal is always the same: keep your head up, trust your compass, and truly touch grass.
What are your go-to systems for managing battery life and navigation when heading into remote backcountry? Do you still carry printed topographic maps or index cards, or do you have your own rituals for disconnecting while on the trail? I would love to hear your backcountry setups and gear philosophies in the comments.
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.