What I built

Fieldcard is a single-command tool that turns "I have 90 minutes" into a one-page printable A5 field card. You type a command (or fill a form), wait 10 seconds, and walk out the door holding a card that tells you:

  • A mission written for your exact terrain and season
  • A radial map of real nearby parks, water, and viewpoints pulled from OpenStreetMap
  • A "notice nine things" bingo grid tuned to what's actually observable right now
  • Sunset time, turn-around time, and how far you can reach — all computed in code, never guessed by the model
  • Live weather conditions and real local species from iNaturalist

The screen is the shortest part. That's the point.

# Generate a 90-minute walk card for Central Park python fieldcard.py --lat 40.7678 --lon -73.9718 --minutes 90 --activity walk # → Writes fieldcard.html. Print it (A5). Put the phone away. # Or run the local web UI (no frameworks, no build step) python fieldcard.py serve --port 8000 # → Open http://localhost:8000, fill the form, print, go. 

The open-source AI part

The local open-weight model (default: llama3.2:3b via Ollama) writes only the words — the title, the mission paragraph, and the nine sensory prompts. It's given real facts: your season, the actual place names nearby, the activity, the species observed this month. It writes poetry grounded in your specific terrain.

The code handles everything safety-critical: sunset time (NOAA solar equations), turn-around time, reach radius, daylight warnings. These are never left to the model.

# The LLM writes the poetry. Code does the safety math. # Design rule: if Ollama is offline, the card still works. got = llm_copy(facts, places, fallback_copy) if not got: # Built-in seasonal sensory prompts kick in automatically  copy = fallback_copy 

You can swap any open-weight model with --model gemma2:2b or --model qwen2.5:3b. No API key. No cloud. No subscription.

Why open-source AI made this possible

It runs offline. On the trail, in a park with patchy signal, or on a plane — the card generates regardless. A cloud API would break the moment you most need the card.

Location data never leaves your machine. Your coordinates go to Overpass (OpenStreetMap) and iNaturalist for real place data, but the AI reasoning about your location happens entirely on your own hardware.

You can swap, fine-tune, or inspect the model. The prompt is visible in the source. You could fine-tune on your own field journals. A closed model makes that impossible.

It costs nothing to run. A 3B model on a laptop. No metered tokens, no monthly bill.

Architecture

graph LR A[CLI / Web Form] --> B[build pipeline] B --> C[OpenStreetMap Overpass<br/>real nearby places] B --> D[iNaturalist API<br/>local species this month] B --> E[Open-Meteo<br/>live weather, no key] B --> F[NOAA solar equations<br/>sunset + turn-around] B --> G[Ollama local model<br/>llama3.2:3b default] C --> H[render_card] D --> H E --> H F --> H G --> H H --> I[A5 printable HTML] I --> J[Printer] J --> K[Outside]

Design rule: every external source degrades gracefully. No OpenStreetMap? Dead-reckoning rule prints instead. No Ollama? Built-in seasonal bingo prompts. No iNaturalist? Card omits the species bar. The card always prints.

Activity modes

Mode What changes
walk Radial map at 4.5 km/h, sensory bingo
run Wider radius at 9 km/h, trail-focused prompts
birding Slower 2.5 km/h, species bar prominent, iNaturalist birds
garden No map, frost-date-aware planting advice from local crop database
--group Pace routes (conversational / steady / long) + QR code to meetup point

The web UI: a doorway, not a dashboard

Running python fieldcard.py serve starts a local server (Python stdlib http.server — no frameworks, no npm, works offline). The form has:

  • Streak counter — consecutive days you've gone outside
  • Achievement badges — First Steps, 3-Day Streak, Week Explorer, Bird Watcher, Green Thumb
  • Live weather — current conditions fetched from Open-Meteo (free, no key)
  • Card history — last 5 cards you generated
  • One button — Generate Field Card

Time at the screen: under 30 seconds.

Tech stack (all open-source)

  • Python 3.9+ stdlib only — no pip install required for core
  • Ollama — local LLM inference runtime
  • llama3.2:3b (default) — swap to gemma2:2b, qwen2.5:3b, or anything you have
  • OpenStreetMap / Overpass API — real nearby places, cached locally
  • iNaturalist API — research-grade species observations
  • Open-Meteo API — free weather, no key, no account
  • NOAA solar equations — pure Python sunrise/sunset math
  • 26 unit tests — geometry, solar, places, web server

I took it outside

I generated a birding card for a local park, printed it, and spent 45 minutes looking for the nine things on the bingo grid. The model had written: "A bird puffed into a ball against the wind" — and I found one within 10 minutes perched in an oak. The card stayed in my pocket for the whole walk. The phone didn't come out once.

That's the test that matters.

Why open innovation matters here

A closed-model version of Fieldcard would require an internet connection, bill you per card, and own your location history. The open-weight version runs on a 2019 MacBook, works in airplane mode, and costs nothing after the first ollama pull.

For something designed to get you away from your phone and into the world, that's not just a technical preference — it's the whole point.

Agent session transcript

DevRelay recorded our development transcript including the prompt iterations, offline-first fallback logic, solar calculation constraints, and streak engine:

Building Fieldcard: Local AI, Printable Pocket Cards, & Streak Tracking
You

Build Fieldcard: an offline-first tool that generates a printable A5 physical pocket card for outdoor micro-explorations using local open-weight LLMs, NOAA solar equations, and Open-Meteo weather.

Agent

Designing Fieldcard around a zero-screen, print-first philosophy:
1. Deterministic NOAA solar calculation module for exact turn-around time and sunset warnings without network connectivity.
2. Local inference pipeline using Ollama (Llama 3.2 3B / Gemma 2 2B) for sensory cues grounded in local coordinates, with procedural fallback if Ollama is absent.
3. CSS print layout styled for A5 paper with micro-typography, turn-around timers, and field-note checklists.
4. Local observation journal for recording bird sightings, plants, and trail thoughts after returning.

▸ run_command pytest tests/ -v
$ pytest tests/ -v
=================== 26 passed in 0.42s ===================
You

Add streak tracking and achievement badges to motivate daily outdoor walks, and redesign the UI for instant A5 card preview and printing.

Agent

Implemented streak engine and achievement system:
- Consecutive-day streak calculation stored locally with milestone checks.
- 8 outdoor achievement badges (First Steps, Dawn Patrol, Night Owl, Weather Hardened, Weekend Wanderer, 7-Day Explorer, Deep Woods, Century Walk).
- Real-time Open-Meteo forecast fetching with automatic fallback to seasonal climate tables when offline.
- Responsive web dashboard with live A5 print preview, one-click print button, and badge drawer.

▸ run_command git commit -m "feat: add streak tracker, achievement badges, live weather, re...
$ git commit -m "feat: add streak tracker, achievement badges, live weather, redesigned web UI"
[main 7f21a8d] feat: add streak tracker, achievement badges, live weather, redesigned web UI

Direct link: dev.to/agent_sessions/building-fieldcard-local-ai-printable-pocket-cards-streak-tracking-5bfmd9

Links

Submitted to the Hacktoberfest Open-Source AI Challenge: Week 1 — Touch Grass theme.
Built during October 5–11, 2026. New project, built for this challenge.