This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
I've spent a lot of time camping and exploring the outdoors — forests, jungles, mountains, waterfalls, and open meadows. Some of my favourite experiences have come from being away from screens and noticing things I would otherwise have missed.
But exploring nature also comes with questions. What is that unfamiliar flower? Which bird made that sound? How do I preserve an observation so I can learn more about it later?
That's why I built Tulip, an AI-powered nature journal for people who want to explore the world, document their experiences, and learn from what they discover.
The idea is simple: use AI to make outdoor exploration more meaningful, not to replace it.
Tulip is an Android field journal with a calm, botanical design. It combines personal observations, photographs, and AI assistance in one place.
Here's what you can do with it:
- Capture discoveries: Take photographs or import them from your gallery and attach personal notes.
- Write in your own language: Record observations naturally, without worrying about perfect English.
- Fix & Translate: Correct grammar and punctuation or translate multilingual notes into English while preserving the original text.
- Ask AI about nature: Ask questions about photographed plants, birds, flowers, landscapes, and other observations.
- Organize your journal: Search entries and use tags and optional location information to rediscover past experiences.
- Keep your data under your control: Store entries and photographs locally, export your journal as JSON, and clear stored data when needed.
I wanted to build something that encourages curiosity outside. Take a photograph, ask a question, record what you learned, and return to exploring.
Technology should not become the destination of an outdoor adventure. Sometimes, it should simply help you notice more.
Demo
🎥 Watch the demo:
https://youtube.com/shorts/a3gcUFznVxo
💻 Source code:
https://github.com/dev-Ninjaa/tulip
The video demonstrates Tulip as a working Android application. I've also included a screenshot of the project demonstrating its local AI setup with Ollama and Gemma 3 4B.
Code
GitHub repository: https://github.com/dev-Ninjaa/tulip
Tulip is built with Kotlin for Android, with Room and SQLite for local persistence. The repository includes the application source code, AI provider integrations, a TypeScript-based local AI routing module, tests, and automated build and release workflows.
The application uses a shared AI service interface so that its core journal features can work with different AI providers without being tied to a single backend.
The initial stable release is v1.0.0.
How I Built It
I approached Tulip as a field journal first and an AI application second.
The Android application
The Android app is built with Kotlin. Room and SQLite handle local persistence, allowing users to save journal entries and photographs on their devices.
The interface uses warm cream surfaces, muted sage, and forest-green accents to create a calm, botanical, field-notebook aesthetic rather than another generic chatbot interface.
Gemini for cloud-based AI
Gemini is Tulip's default AI provider. It supports text correction, translation, and image-based questions.
Gemma 3 4B through Ollama for local inference
I also integrated Gemma 3 4B, an open-weight multimodal model, through Ollama.
This gives Tulip a local AI option: the model runs on my computer, while the Android application runs on my phone. When both devices can communicate over the same local network, Tulip can send supported requests to the Ollama instance on my computer.
That means those requests can be processed on my own hardware rather than being sent to Gemini.
The application can use the model for supported text and image workflows, including writing assistance and questions about photographs.
The TypeScript local AI router
The repository also contains a TypeScript-based local-ai-routing/ module that helps configure and diagnose the local Ollama setup and exposes a compatible API endpoint for the Android application.
It provides a lightweight routing layer between Tulip and the Ollama API, with setup, health checks, and inference testing. It is designed to run locally rather than requiring a cloud deployment.
Testing
I manually tested the application on an Android device and verified the main application workflows. The project also includes unit tests and automated build and release workflows.
The goal was to deliver a working application, not just a concept or a mockup.
Why Does Open Innovation Matter?
For Tulip, open innovation means having more control over how AI is used and where inference happens.
Gemma 3 4B gives the application a local-inference option that a cloud-only architecture would not provide on its own.
Control over AI execution: When the local provider is selected, supported requests can be processed by a model running on my own computer instead of being sent to Gemini.
Flexibility: The shared AI provider interface separates the journal's core functionality from its AI backend, making it easier to experiment with different providers.
A practical approach to local AI: The phone can provide the field-journal experience while a computer handles model inference. This is useful when running the model directly on a phone isn't practical.
Room to experiment: Open-weight models let developers explore how AI fits into real applications, including multimodal workflows, without relying exclusively on a hosted AI API.
There is an important distinction: local journal storage does not automatically make every AI feature offline. Gemini requires its cloud service, while local Gemma inference requires Ollama to be running and reachable. In this setup, the phone communicates with the computer over the local network.
That's what open innovation makes possible here: a choice between cloud AI and a local model, with a clearer understanding of where processing happens.
I don't think every moment outdoors needs AI. But when curiosity strikes, AI can help someone learn something new, preserve an observation, and return to exploring with a little more understanding.
Prize Categories
- Best Use of Gemma: Tulip integrates Gemma 3 4B through Ollama for local text and image inference.
Final Thoughts
I built Tulip because some of my favourite experiences have happened away from a screen.
The interesting part of being outdoors is noticing something unfamiliar, becoming curious, and deciding to learn more. I wanted to build a tool that supports that moment without taking over the experience itself.
Go outside. Notice something. Write it down. Learn a little more.
That's Tulip. 🌿
Built with Kotlin, Gemma 3 4B, and Ollama for the Hacktoberfest Touch Grass challenge.

Top comments (0)