"Don't just take photos. Tell a story."
Travel Journal is a smart Android application that turns your camera roll into a living, breathing travel log. By leveraging Geolocation, Google Maps, and Generative AI, it organizes your memories, maps your journey, and even writes the captions for you.
Automatically pins your uploaded photos to an interactive map based on their geospatial metadata. See exactly where every memory happened.
Select a "trio" of your favorite moments, and Travel Journal stitches them into a cinematic highlight reel with background music.
A nostalgic, auto-generated collage mode that arranges your photos into beautiful layouts with customizable backgrounds.
- Auto-Captioning: The app sends your images to our backend, where the Llama 3 model (via Groq) analyzes the scene and generates witty, descriptive captions.
- Smart Caching: To save costs and speed up load times, captions are cached in MongoDB. If you view a memory twice, it loads instantly from the cache.
We built Travel Journal as a Full-Stack Kotlin Monolith, ensuring type safety and consistency from the UI all the way to the database.
- Language: Kotlin (100%)
- UI Framework: Jetpack Compose (Modern, declarative UI toolkit)
- Maps: Google Maps SDK for Android (Composable Maps library)
- Networking: Retrofit & OkHttp (For communicating with the backend)
- Async Processing: Kotlin Coroutines (For non-blocking background tasks like image uploading)
- Image Loading: Coil (Coroutines Image Loader)
- Framework: Spring Boot 3 (Kotlin)
- Database: MongoDB (NoSQL storage for flexibility with image metadata)
- AI Engine: Groq API (Running Llama 3 for ultra-fast inference)
- Tunneling: ngrok (Exposes localhost to the Android device securely)
- Android Studio (Koala or newer)
- IntelliJ IDEA (Recommended for Backend)
- MongoDB (Local or Atlas)
- ngrok account
- Open the
backend/folder in IntelliJ or any desired IDE. - Create a
.envfile insrc/main/resources(or set Environment Variables in Run Configuration):MONGO_URI=mongodb+srv://<user>:<pass>@cluster.mongodb.net/journaldb GROQ_API_KEY=gsk_your_groq_api_key_here PORT=8080
- Run
JournAIApplication.kt. - Expose port 8080:
ngrok http 8080. Copy the forwarded URL (e.g.,https://a1b2.ngrok-free.app).
- Open the
client/folder in Android Studio. - Navigate to
utils/Constants.kt(or whereverBASE_URLis defined). - Paste your ngrok URL:
const val BASE_URL = "[https://a1b2.ngrok-free.app/api/](https://a1b2.ngrok-free.app/api/)"
- Sync Gradle and run on an Emulator or Physical Device.
This project was built with ❤️ by:
- Kushi
- Joshua
- Louise
- Siddhesh
- Rachit