-
-
app logo : azad means free in persian
-
Sign up and login page
-
code verification page.
-
setting the password
-
password reset email by Azad app
-
first page after login
-
Welcome screen.
-
Generic Feed
-
Ongoing ride.User has marked a stop( yellow flag)
-
Ride is done.Summary of ride.
-
automated geo-decoded data of the user he has marked stop during ride.
-
Option to update the auto-geodecoded name of the stop.
-
Ride summary page
-
settings page.User has option to enable auto-save rides.Also option to make his shared rides available to people around.
-
The feed page.You can see there is option to fist bump.Bikers bumps fist :) .It's kind of like button.Also clip button to bookmark trip
-
Garage page or unshared rides or auto-saved rides.
-
Find pack page
-
in-app notification page
-
Nav bar
-
Find riders page
-
Ride summary page
-
clipped rides page.User can bookmark rides which will appear here.If you tap here it will open the same ride summary screen.
-
Once you click on navigate button on summary page , automatically the google maps will open with exact stop the rider took.
-
Recorded route of the user with stop description.
-
Group ride or ride with pack landing page
-
Captain inviting his pack members for group ride.Instant notification will be triggered for all invitees.
-
Captain invited his crew an waiting for crew to join.
-
Crew received request for the ride.
-
Crew member marking him safely reached home.Instant notification will be sent to all group riders : " X reached home safely".
-
Group ride in progress.We can navigate to anyone's live location.
-
SOS alert triggered by one of the crew.Phone vibrates and navigation button is also visible for group riders to reach rider in distress.
-
Captain marks stop.We can see a yellow flag and yellow alert to everyone with notification.
🏍️ Azad - Your Personal Riding Butler
آزاد
Azad means "free" in Persian
Ride Free · Stay Connected · Share Adventures
💡 Inspiration
This winter, I embarked on a 4-week solo motorcycle journey starting at Motoverse in Goa—India's biggest motorcycle festival.
The trip was incredible:
- 🛣️ Scenic roads that took my breath away
- 🤝 Amazing people who became friends
- 🌅 Epic sunsets I'll never forget
- ☕ Hidden cafes and breakfast joints
- 🏍️ Fellow riders with incredible stories
But here's the problem: I had to squeeze an entire month of memories into one Instagram story.
During the ride, I kept thinking—riders need better tools to:
- 📍 Track the roads we take
- 🗺️ Remember the underrated places we discover
- 🤝 Connect with fellow riders we meet along the way
I cut my trip short to attend FlutterCon in Bengaluru. There, I met Viktor from Serverpod, who encouraged me to join this hackathon.
It felt like the tech Gods and biking Gods—are giving me clear sign to build what I'd been craving about on those long rides.
🎯 What It Does
Azad is your personal riding butler that handles everything so you can focus on the road.
🏍️ For Solo Riders
- 🤖 Automatic Ride Detection - Intelligent motion detection logs your rides automatically. No buttons, no hassle.
- 📍 Route Tracking - Every road, every place, automatically recorded with GPS precision
- 📊 Ride Statistics - Distance, duration, speed, tracked
- 🗺️ Google Maps Integration - Seamless navigation
- 📸 Memory Preservation - Add photos, notes, and mark special locations
👥 For Group Rides
- 📡 Real-Time Location Sharing - See your entire crew on the map, updated every second via Serverpod's WebSockets
- 👨✈️ Captain Controls - Ride leader manages stops, destinations, and the group
- 🔔 Instant Notifications - Captain marks a stop? Everyone knows immediately
- 🆘 Emergency Alerts - One-tap SOS button alerts the entire pack with your location
- 💬 Stay Connected - Group coordination made easy
🌍 Social & Community
- 📱 Share Your Adventures - Post rides with photos, routes, and stories
- 🔍 Discover New Routes - Explore rides shared by the community
- ⭐ Find Hidden Gems - Put underrated places on the map—literally and poetically
- 🤝 Connect with Riders - Build your pack, find riding buddies
- 💬 Engage - Comment and interact with fellow riders' adventures
🛠️ How We Built It
🏗️ System Architecture
┌─────────────────────────────────────────────────────────────────┐
│ AZAD ARCHITECTURE │
└─────────────────────────────────────────────────────────────────┘
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Flutter App │ │ Flutter App │ │ Flutter App │
│ (Rider 1) │ │ (Rider 2) │ │ (Rider 3) │
│ │ │ │ │ │
│ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │
│ │ BLoC │ │ │ │ BLoC │ │ │ │ BLoC │ │
│ │ Pattern │ │ │ │ Pattern │ │ │ │ Pattern │ │
│ └────────────┘ │ │ └────────────┘ │ │ └────────────┘ │
│ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │
│ │Google Maps │ │ │ │Google Maps │ │ │ │Google Maps │ │
│ └────────────┘ │ │ └────────────┘ │ │ └────────────┘ │
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
│ │ │
│ RPC / WebSocket │ RPC / WebSocket │
│ │ │
└────────────────────────────┼────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ SERVERPOD 3.x BACKEND │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Real-Time Streaming Engine │ │
│ │ • WebSocket Connection Pool │ │
│ │ • Location Broadcast Service │ │
│ │ • Group State Synchronization │ │
│ └──────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ RPC-Style Endpoints │ │
│ │ • Ride Management │ │
│ │ • User Profiles │ │
│ │ • Pack (Group) Management │ │
│ │ • Feed & Social Features │ │
│ └──────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Authentication & Security │ │
│ │ • Built-in Serverpod Auth │ │
│ │ • Session Management │ │
│ └──────────────────────────────────────────────────┘ │
└────────────────────┬───────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ PostgreSQL Database │
│ • Users & Profiles • Rides & Routes │
│ • Groups (Packs) • Social Feed Posts │
│ • Notifications • Comments & Interactions │
└────────────────────────────────────────────────────────┘
🎯 Why Serverpod Was Perfect for Azad
Serverpod made the impossible possible in 4 weeks:
🚀 Built-in WebSocket Support
- No need to set up separate WebSocket servers
- Serverpod's streaming endpoints handled real-time location updates out of the box
- Connection management, reconnection logic, and error handling included
📊 Type-Safe API Generation
- Defined data models once in Dart
- Serverpod automatically generated client/server code
- No JSON parsing errors, no API documentation drift
🔐 Authentication Made Easy
- Built-in user authentication system
- Session management handled automatically
- Secure by default
⚡ Real-Time Streaming
- Serverpod's streaming capabilities perfect for live location updates
- Broadcast to multiple clients simultaneously
- Efficient bandwidth usage
🗄️ Database Integration
- Seamless PostgreSQL integration
- ORM-like experience with type safety
- Automatic migrations
🛠️ Developer Experience
- Code generation with
--watchmode for rapid development - Quick server restarts for backend changes
- Clear error messages
- Excellent documentation
- All in Dart - one language for frontend and backend
- Code generation with
☁️ Cloud Deployment & Storage
- Deployed on Serverpod Cloud (scloud) for production hosting
- Serverpod Cloud Storage for uploaded images and media files
- Seamless integration with Serverpod backend
- Scalable infrastructure out of the box
Frontend Stack
- Flutter 3.x - Cross-platform mobile (tested on Android, iOS support planned)
- BLoC Pattern - State management for complex ride and group states
- Google Maps Flutter - Real-time mapping and navigation
- Activity Recognition - Intelligent motion detection
- Geolocator - High-precision GPS tracking
- Flutter Local Notifications - Push notifications and alerts
- Firebase Cloud Messaging - Remote notifications
Backend Stack (Powered by Serverpod)
- Serverpod 3.x - Modern Dart backend framework with RPC-style endpoints
- PostgreSQL - Relational database
- WebSockets - Real-time bidirectional communication
- Serverpod Streaming - Live location updates
- Serverpod Cloud (scloud) - Production deployment and hosting
- Serverpod Cloud Storage - Image and media file storage
- Firebase Integration - Push notification delivery
- Type-Safe APIs - Auto-generated client code
🎯 Feature Architecture: Authentication & Login Flow
┌─────────────────────────────────────────────────────────────────────┐
│ AUTHENTICATION & LOGIN FLOW │
└─────────────────────────────────────────────────────────────────────┘
User Registration
┌──────────────┐
│ Flutter App │ RPC: registerUser()
│ │ ──────────────────────────────► ┌──────────────────┐
│ │ { │ Serverpod │
│ │ email, │ Auth Module │
│ │ password, │ │
│ │ name │ • Validate │
│ │ } │ • Hash pwd │
│ │ │ • Create user │
│ │ │ • Store in DB │
│ │ ◄──────────────────────────── │ • Return token │
│ │ {userId, authToken} └──────────────────┘
└──────────────┘
User Login
┌──────────────┐
│ Flutter App │ RPC: authenticateUser()
│ │ ──────────────────────────────► ┌──────────────────┐
│ │ { │ Serverpod │
│ │ email, │ Auth Module │
│ │ password │ │
│ │ } │ • Verify creds │
│ │ │ • Create │
│ │ │ session │
│ │ ◄──────────────────────────── │ • Return token │
│ │ {userId, authToken, └──────────────────┘
│ │ sessionId}
└──────────────┘
│
▼
┌──────────────────────┐
│ Store Auth Token │ Secure Storage
│ (Local Device) │ • SharedPreferences (encrypted)
└──────────────────────┘ • Used for all subsequent API calls
Authenticated API Calls
┌──────────────┐
│ Flutter App │ RPC: anyProtectedEndpoint()
│ │ ──────────────────────────────► ┌──────────────────┐
│ │ Headers: │ Serverpod │
│ │ Authorization: Bearer token │ │
│ │ │ • Validate │
│ │ │ token │
│ │ │ • Get session │
│ │ │ • Check perms │
│ │ ◄──────────────────────────── │ • Execute │
│ │ {response data} └──────────────────┘
└──────────────┘
Session Management
┌──────────────────────────────────────────────────────────────┐
│ Serverpod Built-in Session Management │
│ • Automatic session creation on login │
│ • Session stored in PostgreSQL │
│ • Token-based authentication │
│ • Automatic session expiry handling │
│ • Secure password hashing (bcrypt) │
└──────────────────────────────────────────────────────────────┘
Logout
┌──────────────┐
│ Flutter App │ RPC: logout()
│ │ ──────────────────────────────► ┌──────────────────┐
│ │ │ Serverpod │
│ │ │ • Invalidate │
│ │ │ session │
│ │ │ • Remove from │
│ │ ◄──────────────────────────── │ DB │
│ │ {success: true} └──────────────────┘
└──────────────┘
│
▼
┌──────────────────────┐
│ Clear Local Token │ Remove from device
│ Redirect to Login │
└──────────────────────┘
Why Serverpod Auth is Powerful:
- ✅ Built-in Security - Password hashing, token management, session handling all included
- ✅ Type-Safe - Authentication methods are type-safe RPC calls
- ✅ Automatic Session Management - No need to build session infrastructure
- ✅ PostgreSQL Integration - User data and sessions stored securely
- ✅ Easy to Extend - Add OAuth, social login, or custom auth logic easily
🎯 Feature Architecture: Real-Time Group Ride Tracking
┌─────────────────────────────────────────────────────────────────────┐
│ GROUP RIDE - REAL-TIME FLOW │
└─────────────────────────────────────────────────────────────────────┘
Step 1: Captain Creates Ride
┌──────────────┐
│ Captain's │ RPC: createGroupRide()
│ Flutter App │ ────────────────────────────► ┌──────────────────┐
└──────────────┘ │ Serverpod │
│ • Create ride │
│ • Store in DB │
│ • Return ID │
└──────────────────┘
Step 2: Members Join & Subscribe to Message Channel
┌──────────────┐ ┌──────────────────────┐
│ Captain │ WebSocket Connect │ Serverpod │
│ Flutter App │ ◄─────────────────────────────►│ Streaming Endpoint │
└──────────────┘ Subscribe to channel: │ │
"group_ride_{rideId}" │ • Create channel │
│ • Add subscriber │
┌──────────────┐ └──────────────────────┘
│ Member 1 │ WebSocket Connect │
│ Flutter App │ ◄───────────────────────────────────────►│
└──────────────┘ Subscribe to same channel │
│
┌──────────────┐ │
│ Member 2 │ WebSocket Connect │
│ Flutter App │ ◄───────────────────────────────────────►│
└──────────────┘ Subscribe to same channel │
Step 3: Real-Time Location Broadcasting (Every 3-5 seconds)
┌──────────────┐
│ Rider 1 │ Send Location via Stream
│ (Captain) │ ──────────────────────────────►
│ │ {lat, lng, speed, heading}
└──────────────┘
┌──────────────────────┐
│ Serverpod │
│ Message Channel │
│ "group_ride_123" │
│ │
│ • Receive message │
│ • Validate │
│ • Broadcast to all │
│ subscribers │
└────────┬─────────────┘
│
┌─────────────────────────────────────┼─────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Rider 2 │ WebSocket Push │ Rider 3 │ │ Rider 4 │
│ (Member) │ ◄─────────────── │ (Member) │ │ (Member) │
│ Updates Map │ via channel │ Updates Map │ │ Updates Map │
└──────────────┘ └──────────────┘ └──────────────┘
Step 4: Emergency Alert (SOS)
┌──────────────┐
│ Rider 3 │ Tap SOS Button
│ (In Trouble)│ ──────────────────────────────►
│ │ RPC: sendSOSAlert()
└──────────────┘
┌──────────────────────┐
│ Serverpod │
│ Message Channel │
│ "group_ride_123" │
│ │
│ • Priority message │
│ • Broadcast to all │
│ • FCM Notify │
└────────┬─────────────┘
│
┌─────────────────────────────────────┤
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Captain │ 🚨 URGENT ALERT │ All Members │
│ Gets Alert │ ◄─────────────── │ Get Alert │
│ + Location │ via channel │ + Location │
└──────────────┘ └──────────────┘
How Serverpod Powers This:
✨ Serverpod's Streaming Endpoints & Message Channels - Built-in WebSocket support with channel-based broadcasting
- Message channels allow pub/sub pattern for group communication
- Each group ride has its own channel (e.g., "group_ride_{rideId}")
- All members subscribe to the same channel
- No need for separate WebSocket server setup
- Automatic connection management and reconnection
- Type-safe message passing
✨ Efficient Broadcasting via Channels - Serverpod handles concurrent connections elegantly
- One rider sends location → Message channel receives it
- Channel broadcasts to all subscribers instantly
- Low latency real-time updates
- Handles multiple riders per group smoothly
- No direct peer-to-peer - all messages go through the channel
✨ State Synchronization - Group state kept in sync across all devices via the channel
- Captain marks stop → Broadcast via channel → Everyone sees it instantly
- Member leaves → Channel updates for all riders
- No polling needed - push-based updates through message channel
🎯 Feature Architecture: Automatic Ride Detection
┌─────────────────────────────────────────────────────────────────┐
│ INTELLIGENT AUTO-RIDE DETECTION │
└─────────────────────────────────────────────────────────────────┘
User starts riding (phone in pocket)
│
▼
┌──────────────────────┐
│ Activity Recognition│ Detects: IN_VEHICLE
│ Service (Flutter) │ Confidence: 85%+
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Speed Check │ GPS Speed > 20 km/h
│ (Geolocator) │ Duration > 2 minutes
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 🏍️ RIDE DETECTED! │
│ Start GPS Tracking │
└──────────┬───────────┘
│
├─────► Background Service Starts
│ • GPS sampling every 5 seconds
│ • Local storage during ride
│
▼
┌──────────────────────┐
│ Ride in Progress │ Tracking:
│ (Foreground Service)│ • Route (lat/lng points)
└──────────┬───────────┘ • Speed, elevation
│ • Duration, distance
│ • Auto-stop detection
│
▼
┌──────────────────────┐
│ Configuration-Based │ Monitors:
│ Auto-Stop Detection │ • Speed = 0 for configurable duration
└──────────┬───────────┘ • Default: 5 minutes (user adjustable)
│ • Detects pit stops automatically
│
├─────► Pit Stop Detected
│ • Mark stop location
│ • Pause GPS tracking
│ • Resume when movement detected
│
▼
User stops riding (vehicle parked, speed = 0 for configured time)
│
▼
┌──────────────────────┐
│ Ride Auto-Saved │ RPC: saveRideDraft()
│ to Serverpod │ ──────────────────► Serverpod stores ride
└──────────────────────┘ User can review & post later
Why This Works:
- No user interaction needed - Completely automatic
- Configurable auto-stop detection - Users can adjust stop duration threshold
- Intelligent pit stop tracking - Automatically detects and marks stops during rides
- Battery optimized - Smart GPS sampling, pauses during stops
- Reliable storage - Saves to Serverpod for later review
- Accurate detection - Combines activity recognition + speed + duration + configurable thresholds
📱 Feature Architecture: Social Feed & Community
┌─────────────────────────────────────────────────────────────────┐
│ SOCIAL FEED ARCHITECTURE │
└─────────────────────────────────────────────────────────────────┘
User posts a ride
┌──────────────┐
│ Flutter App │ 1. Upload images (compressed)
│ │ ──────────────────────────────► ┌──────────────────┐
│ │ RPC: uploadImage() │ Serverpod │
│ │ │ Cloud Storage │
│ │ │ • Store image │
│ │ ◄──────────────────────────── │ • Return URL │
│ │ {imageUrl} └──────────────────┘
│ │
│ │ 2. RPC: createFeedPost()
│ │ ──────────────────────────────► ┌──────────────┐
│ │ { │ Serverpod │
│ │ rideId, │ • Create │
│ │ caption, │ post │
│ │ imageUrls[] │ • Notify │
│ │ } │ followers │
└──────────────┘ └──────────────┘
Other users view feed
┌──────────────┐
│ Flutter App │ RPC: getFeed()
│ (Pull to │ ──────────────────────────────► ┌──────────────┐
│ Refresh) │ │ Serverpod │
│ │ ◄──────────────────────────── │ • Query DB │
│ │ Returns: │ • Join with │
│ │ [ │ user data │
│ │ {post, user, ride, stats} │ • Sort by │
│ │ ] │ recent │
└──────────────┘ └──────────────┘
User taps on route
┌──────────────┐
│ Route │ RPC: getRideRoute(rideId)
│ Viewer │ ──────────────────────────────► ┌──────────────┐
│ Screen │ │ Serverpod │
│ │ ◄──────────────────────────── │ Returns: │
│ Google Maps │ { │ • GPS points│
│ + Polyline │ points: [{lat,lng}], │ • Stats │
│ │ stats: {...} │ • Metadata │
└──────────────┘ } └──────────────┘
Serverpod's Role:
- Efficient Queries - Serverpod's database queries fetch feed data smoothly
- Cloud Storage Integration - Serverpod Cloud Storage handles image uploads and serving
- Scalable Media Hosting - Images stored on Serverpod's cloud infrastructure
- Relational Queries - Joins users, rides, posts seamlessly
- Type Safety - Post models shared between client and server
🔔 Feature Architecture: Rider Connections & Notifications
┌─────────────────────────────────────────────────────────────────┐
│ RIDER CONNECTION SYSTEM (PACK) │
└─────────────────────────────────────────────────────────────────┘
User sends connection request (Add to Pack)
┌──────────────┐
│ Flutter App │ RPC: sendPackRequest()
│ (User A) │ ──────────────────────────────► ┌──────────────┐
│ │ {targetUserId} │ Serverpod │
│ │ │ • Create │
│ │ │ request │
│ │ │ • Send FCM │
└──────────────┘ └──────┬───────┘
│
▼
┌──────────────────┐
│ Firebase Cloud │
│ Messaging │
└────────┬─────────┘
│
▼
┌──────────────┐
│ User B's │
│ Device │
│ 🔔 "User A │
│ wants to │
│ connect" │
└──────────────┘
User accepts connection
┌──────────────┐
│ Flutter App │ RPC: acceptPackRequest()
│ (User B) │ ──────────────────────────────► ┌──────────────┐
│ │ │ Serverpod │
│ │ │ • Add both │
│ │ │ to pack │
│ │ │ • Create │
│ │ │ connection│
│ │ │ • Notify │
│ │ ◄──────────────────────────── │ User A │
│ │ {success: true} └──────────────┘
└──────────────┘
Now connected riders can:
┌──────────────────────────────────────────────────────────────┐
│ • See each other's rides in feed │
│ • Invite each other to group rides │
│ • Comment and interact on posts │
│ • Build their riding community │
└──────────────────────────────────────────────────────────────┘
What is "Pack"?
- Pack = Your riding crew/network - Similar to friend connections
- When you "add to pack", you're connecting with another rider
- It's like sending a friend/connection request
- Once connected, you can ride together and share adventures
- Think of it as building your personal riding community
Serverpod Advantages:
- Built-in Auth - User management handled automatically
- Relational Data - Rider connections, requests, permissions all type-safe
- Firebase Integration - Serverpod + FCM work seamlessly for notifications
- Real-time Updates - Connection changes broadcast via WebSocket streams
🚧 Challenges We Ran Into
1. 🎭 Wearing All Hats Simultaneously
As a solo developer, I had to be:
- Product Manager - Deciding features, prioritizing roadmap
- Frontend Engineer - Building Flutter UI/UX
- Backend Engineer - Designing APIs and database schema
- QA Engineer - Testing on multiple devices
- DevOps - Server deployment, monitoring
- Designer - UI/UX decisions
- Release Engineer - App distribution, versioning
Plot twist: I'm primarily a backend engineer who loves riding motorcycles! 🏍️
How Serverpod Helped:
- Serverpod's all-in-one approach meant less infrastructure decisions
- Type-safe code caught bugs before they reached production
- Built-in features (auth, database, WebSockets) meant less code to write and maintain
2. ⚡ Real-Time Location Sync Without Killing Batteries
The Problem:
- Need to update locations every few seconds for smooth tracking
- GPS is battery-intensive
- WebSocket connections drain power
- Users ride for hours - battery life critical
The Solution:
┌─────────────────────────────────────────────────────────┐
│ BATTERY OPTIMIZATION STRATEGY │
└─────────────────────────────────────────────────────────┘
Smart GPS Sampling:
• Active ride: Update every 3-5 seconds
• Straight road (low heading change): Every 10 seconds
• Stopped: Pause GPS until movement detected
WebSocket Optimization:
• Single persistent connection (not polling)
• Efficient binary serialization
• Automatic reconnection with exponential backoff
Serverpod's Role:
• Efficient streaming protocol
• Minimal overhead per message
• Smart connection pooling
Result: Users can ride for 4-6 hours with real-time tracking active
3. 👥 Synchronizing Group State Across Devices
The Challenge:
- Captain marks stop → All members must see it instantly
- Member leaves → Update everyone's UI
- Emergency alert → Priority notification to all
- Handle network disconnections gracefully
How Serverpod Solved This:
- Streaming endpoints broadcast state changes automatically
- Type-safe messages ensured consistent state across devices
- Built-in error handling managed disconnections
- Automatic reconnection kept everyone in sync
4. ⏰ Learning Serverpod While Building
The Reality:
- Never used Serverpod before FlutterCon
- 4 weeks to learn + build production app
- Complex features (real-time, auth, database)
The Surprise:
- Serverpod's documentation was excellent
- Type safety caught mistakes early
- Code generation (
--watchmode) kept client/server in sync automatically - Community Discord was super helpful
Lesson: Good tools make learning faster!
5. 🗺️ Map Performance with Long Routes
The Problem:
- Some rides have many GPS points
- Rendering routes on maps needs optimization
The Solution:
- Efficient polyline rendering with Google Maps
- Serverpod efficiently serves route data
- Marker icon caching for better performance
6. 📱 Cross-Platform Development
Current Status:
- ✅ Android - Fully tested and working
- ⏳ iOS - Not yet tested (planned for future release)
Platform Considerations:
- Background location permissions differ between platforms
- Notification handling varies
- Activity recognition APIs different
Flutter + Serverpod Advantage:
- Flutter provides cross-platform foundation
- Serverpod backend works identically for all platforms
- One codebase, ready for multi-platform deployment once iOS testing is complete
🏆 Accomplishments We're Proud Of
| Development Time | Features Delivered |
|---|---|
| 4 weeks | Solo + Group + Social |
✅ Solving a Real Problem - Built the app I literally bet my money in or I need personally
✅ Real-Time Magic - Smooth, battery-efficient location sharing using Serverpod's WebSockets
✅ Smart Auto-Detection - Motion detection that actually works
✅ Complete Feature Set - Solo tracking + group rides + social feed in 4 weeks
✅ Community Building - Platform for riders to share, discover, and connect
✅ Seamless and clean UX - Intuitive interface that needs no tutorials
✅ Technical Excellence - Leveraged Serverpod for scalable real-time features
Impact = Real Problem × Technical Excellence × Community
📚 What We Learned
🎯 About Building Products
- Passion drives execution - Building in a domain you're excited about makes the impossible possible
- Solve your own problems - The best products come from personal pain points
- MVP mindset - 4 weeks forced ruthless prioritization on features that matter
📱 About Mobile Development
- This was my first mobile app! - Learned the entire lifecycle from scratch
- State management is crucial - BLoC pattern saved me from spaghetti code
- Background services are tricky - Android/iOS location permissions are complex but manageable
- Battery optimization matters - Real-time features need careful power management
⚡ About Serverpod (The Game Changer!)
What Made Serverpod Perfect:
🚀 WebSocket Streaming Out of the Box
- Didn't need to set up Socket.io, Redis, or separate WebSocket servers
- Serverpod's streaming endpoints just worked
- Saved weeks of infrastructure setup
🎯 Type Safety Everywhere
- Define models once, use everywhere
- No JSON parsing bugs
- Compile-time error catching saved countless hours
🔥 Streamlined Development Workflow
- Code generation with
--watchmode auto-regenerates client/server code - Type-safe APIs generated automatically - no manual API documentation
- Server restarts are quick and straightforward
- Code generation with
🔐 Built-in Authentication
- User management, sessions, security handled
- Didn't need to build auth from scratch
- Focus on features, not infrastructure
📊 Database Integration
- PostgreSQL integration seamless
- Type-safe queries
- Migrations handled automatically
🛠️ Developer Experience
- Clear error messages
- Excellent documentation
- Active community support
☁️ Serverpod Cloud (scloud) Deployment
- One-command deployment to production
- No need to configure AWS, GCP, or other cloud providers manually
- Automatic scaling and infrastructure management
- Integrated with Serverpod backend seamlessly
📦 Serverpod Cloud Storage
- Built-in file storage for images and media
- No need for separate S3 buckets or storage services
- Type-safe upload/download APIs
- Automatic URL generation for stored files
The Serverpod Advantage:
As a solo developer, Serverpod let me focus on building Azad's unique features instead of reinventing infrastructure. Real-time group tracking would have taken months with traditional stacks - Serverpod made it possible in weeks. Deployment to production was a single command with scloud, and image storage was built-in - no DevOps headaches!
🏗️ Technical Learnings
- Real-time at scale - Broadcasting location to 10+ riders efficiently
- Offline-first architecture - Critical for riders in remote areas
- WebSocket connection management - Handling disconnects and reconnects gracefully
- GPS optimization - Balancing accuracy with battery life
🎨 About UX
- Simplicity wins - Auto-detection means users don't think about the app
- Real-time feels magical - Seeing your crew move on the map creates wow moments
- Polish matters - Small animations and feedback make it feel professional
🚀 What's Next for Azad
Immediate (Testing & Launch)
- 📱 iOS testing and App Store submission - Currently tested only on Android
- ⚡ Performance optimization
- 🐛 Bug fixes from testing
- 👥 User feedback and iteration
Short-Term
- 📊 Motorcyle park location - Automatically store the location of place where bike is parked last.( Will use activity & GPS to automatically detect it)
- 💬 Direct Messaging - Private chats between Bikers
- 🏍️ User Profiles and QR code - QR stickers with Azad branding which takes them to profile and link to connect with the biker. These would be physical stickers which riders can stick on thier motorcycle.It would also have emergency contacts that people can call during emergency.
- Intelligent Ride summaries - Integrate Agent to give smart ride summaries.Something that would be rather ignored..For eg. time you were struck in traffic, beautiful heat maps on basis of the time spend on particular road, track switching of gears etc..
Long-Term
- Biking clubs- Integrate motorcyling clubs, add riders in the club , schedule rides etc.
- 🔍 Discover Tab - AI-powered route recommendations
- ⭐ Route Ratings - Community reviews for routes
- 🎧 Gear Integration - Connect with helmet cameras and intercoms
- 🎮 Gamification - Achievements, badges, challenges
Built With
- dart
- firebase
- flutter
- google-maps
- postgresql
- resend
- rpc
- serverpod
- websockets

Log in or sign up for Devpost to join the conversation.