This is a submission for the Redis AI Challenge: Real-Time AI Innovators.
What I Built
CloudStroll is a travel-journaling app that captures every moment of your trip—location, text notes, mood, weather, and makes them instantly searchable, mappable, and analyzable in real time.
-
Create & Store Memories
Each memory is saved as a RedisJSON document with fields for
location,entry,mood,weather,timestamp,uidand an embedding vector. - Tag & Full-Text Search Instantly filter by mood or keyword with RediSearch’s TAG and TEXT indexes.
- Geo-Search & Map View Geo-index every entry so you can find things “within 5 km of me” or pan/zoom on an interactive map.
- Semantic Search You can turn your search (ex: "hot sun") into an embedding and run a KNN vector search to retrieve memories that talk about beaches, coastlines, or sunsets—even if they never explicitly say "beach"
- Mood Trends Stream mood counts into RedisTimeSeries and display beautiful charts to show how your emotional journey evolved over time.
All of this is powered by a single Redis 8 deployment—no separate cache, search engine, or time-series database.
Demo
Github - https://github.com/ameysunu/cloudstroll-redishack
YouTube - https://youtu.be/A5UaeEVElyg
How I Used Redis 8
1. RedisJSON
-
Storage: Each memory as a JSON doc under
memory:<id>. - Updates: After computing embeddings, I update the vector field:
JSON.SET memory:<id> $.embedding "<json-array-of-floats>"
2. RediSearch V8
I created a unified JSON index for tags, text, and vectors:
FT.CREATE memory-idx ON JSON PREFIX 1 "memory:" SCHEMA \
$.uid AS uid TAG \
$.mood AS mood TAG \
$.entry AS entry TEXT \
$.embedding AS vec VECTOR FLAT 6 \
TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE
TAG Queries
FT.SEARCH memory-idx "@mood:{happy}"
TEXT Queries
FT.SEARCH memory-idx "@entry:beach"
KNN Vector Queries
FT.SEARCH memory-idx "* => [KNN 5 @vec $BLOB]" DIALECT 2 \
PARAMS 2 BLOB <binary-blob> \
RETURN 1 "$" LIMIT 0 5
3. RedisTimeSeries
- Track per-mood counts in real time
TS.CREATE mood:trend:<mood> RETENTION 0 LABELS mood <mood>
TS.ADD mood:trend:<mood> * 1
- Power the trend chart after
TS.RANGE mood:trend:happy 2025-07-01 2025-08-07
4. GeoIndexing
Each memory is geo-indexed for location search
GEOADD memory:geo <lon> <lat> memory:<id>
GEOSEARCH memory:geo FROMLONLAT <lon> <lat> BYRADIUS 5 km
5. RealTime AI Flows
Semantic Search: External embedding service to store vector in RedisJSON FT.SEARCH KNN on @vec to find semantically similar memories.
Stack
- Frontend - I used SwiftUI to build the mobile app for iOS.
- Backend - I built the backend with Go, and hosted it on Google Cloud Run
- Misc - Google Cloud, Redis (of course), Firebase Auth, Hugging Face (for generating embedding)
Architecture
Screenshots
Notes
To build the app, clone the code, build it using Xcode. For Secrets.xcconfig, please email me privately, and I'll send that over. Install this onto a simulator or an actual device for testing. For any bugs encountered, please feel free to open an Issue and raise a PR on my Git Repo






Top comments (0)