DEV Community

Cover image for TrailTape: Step Outside, Come Back With a Story
Rohan Saxena
Rohan Saxena

Posted on Fully Autonomous

TrailTape: Step Outside, Come Back With a Story

Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Submission 🌿

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass

What I Built

TrailTape turns a short outdoor break into three observation missions and a journal grounded in your own notes.

I wanted something that gave me a reason to step outside without turning the whole walk into another activity on my phone. The workflow is simple: prepare before leaving, pay attention outside, and reflect after returning.

Choose your available time, surroundings, and interests. Gemma generates a mission card you can print or save before putting the screen away.

The card in my demo asks you to compare rustling leaves during a breeze, notice differences between two trees’ bark, and listen for bird calls. You don’t have to complete every mission.

After returning, you can type observations or record or upload voice notes. You review and correct the transcript before saving it. TrailTape then creates a field journal containing your original missions, observations, tentative reflections, and one suggestion for your next outing.

Source links let you return to the notes behind the journal. You can also revisit saved walks and export them as Markdown.

It’s for anyone who wants a small, achievable reason to get outside—especially when “go for a walk” feels too vague.

Demo

Try TrailTape

Watch the video walkthrough

The video demonstrates mission creation, audio uploads and transcription, saved observations, and the finished journal.

It is a live app walkthrough using scripted sample observations, rather than a recording of an outdoor field test.

Code

TrailTape on GitHub

The repository includes setup instructions, an environment-variable example, and verification notes.

How I Built It

TrailTape uses Next.js and TypeScript for the interface, an Express backend, Gemma for mission and journal generation, and a separate Whisper transcription adapter for audio notes. The application is deployed on Render.

Gemma has two roles:

  • Before an outing, it turns the user’s time, setting, and interests into short observation tasks.
  • Afterwards, it organizes saved notes into a journal and proposes a follow-up mission.

The backend validates structured model responses with Zod before the interface uses them. Journal observations retain the saved note text, and source references connect generated sections to their inputs. That makes the output easier to inspect, though it doesn’t guarantee every interpretation is correct.

Transcription is deliberately editable. A recording shouldn’t become the final record until the person who made it has checked what the model heard.

An early journal felt too generic. I refined the prompts to ask for more specific missions and reflections tied to the notes, then made the original missions and source notes easier to find in the finished journal.

Deployment also exposed a practical issue: the production install skipped the development dependencies needed to compile TypeScript. Including those dependencies during the build fixed it.

Walk history stays in browser storage. Generation and transcription use hosted APIs, so this version requires internet access and sends the relevant inputs to those providers.

I used Codex to help implement and iterate on the project.

Why Does Open Innovation Matter?

Gemma’s open weights give TrailTape options beyond one hosted API. They make it possible to explore other hosting arrangements or a future local version, subject to the model’s terms and hardware requirements.

That flexibility matters for an application built around personal observations. I chose hosted inference for this version, but local processing is a direction I can explore without replacing the core model family with a proprietary alternative.

Generation and transcription are separate adapters, which helps keep provider-specific code out of the interface. Changing providers would still need implementation and testing, but the application isn’t built entirely around one provider’s client library.

The source-linked journal reflects another priority: people should be able to inspect what the system produced. A reader can return to the original observation and decide whether a reflection is supported.

Prize Categories

  • Best Use of Gemma: Gemma powers the observation missions and the journal generated from saved notes.
  • Best Use of Render: Render hosts the Next.js interface and Express API together, providing the public application linked above.

Top comments (0)