This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
Offline Adventures is a local-first activity recommender designed to make choosing an activity quick, then get out of the way.
The user selects available time, energy level, current weather, accessible places, group type, and interests. The app returns one primary adventure and two alternatives. Each recommendation includes a short explanation, a mission, practical notes, a memory prompt, and a personalized local-AI twist.
The catalog covers walking, running, cycling, photography, nature, public art, local history, gardening, games, reading outdoors, family activities, sheltered activities, and indoor activities that prepare the next trip outside.
The interface is available through Streamlit on the local network, so I can open the recommendation on a phone and take the mission outside without carrying a laptop.
Demo video: https://youtu.be/z00-rhXgSLA
Tested scenarios:
Dry weather, low energy, photography and nature
Heavy rain, family, games and nature
Restrictive conditions
Repository: https://github.com/xDanielQ/offline-adventures
The repository includes the curated 50-activity catalog, automated tests, a catalog validator, and a real Ollama smoke test.
The application uses a deliberately hybrid architecture.
Deterministic Python code handles hard constraints:
After filtering, up to 15 approved candidates are sent to a local llama3.1:8b-instruct-q4_K_M model through Ollama. The model performs semantic ranking, selects one primary activity and two alternatives, writes a natural explanation, and generates a small personalized_twist for each choice.
Pydantic generates the response schema and validates the structured JSON returned by Ollama. The model is not allowed to invent activity IDs. It also receives explicit boundaries against inventing locations, equipment, health advice, risky behavior, or laptop use during the activity.
The final flow is:
Streamlit input
→ deterministic constraints
→ varied approved candidate pool
→ local open-weight model
→ Pydantic-validated structured result
→ short mission for the real world
I first tested using the model to generate the whole catalog. The records were structurally valid, but the content was repetitive, overused a "find, photograph, research" pattern, and did not provide the desired activity distribution. That experiment changed the architecture: people curate the activity catalog, Python enforces hard rules, and the model handles semantic choice and personalization.
The tested system used:
llama3.1:8b-instruct-q4_K_M.
At submission time the project had 19 passing tests and a validated catalog distribution of 30 outdoor, 8 sheltered, and 12 indoor-bridge activities.
Local open-weight AI is important here for practical reasons, not just ideology.
The user's interests, available places, group context, and weather remain on the user's machine. The app does not need a hosted AI key, an account, or a per-request fee. The model can be replaced or its prompt and behavior can be inspected and changed. The project can continue to work in a local network even without an external AI service.
A closed API could generate similar text, but it would add a remote dependency to an application specifically designed to shorten screen time and keep everyday context private. Local inference makes the architecture match the product goal.
Open tooling also made the failures visible. I could inspect candidate lists, validate every output with Pydantic, compare model-generated catalog content with curated content, and keep deterministic rules outside the model.
https://dev.to/agent_sessions/building-offline-adventures-with-local-open-weight-ai-3rciyc
{% agent_session building-offline-adventures-with-local-open-weight-ai-3rciyc %}
The session documents the design decisions, catalog experiment, structured-output validation, local-model integration, and the choice to keep safety constraints deterministic.
I am entering the overall Hacktoberfest Open-Source AI Challenge: Week 1, Touch Grass category.