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
,uid
and 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)