Ceylon Guider - Gamified Travel & Paid Opportunities Platform

Flutter Firebase RevenueCat Platform

A comprehensive Flutter application that gamifies travel exploration while connecting users with paid travel opportunities worldwide. Built with Firebase, RevenueCat, and modern Flutter architecture.


🌟 What Inspired This Project

The inspiration for Ceylon Guider came from observing three key trends:

1. The Rise of Digital Nomadism

Post-pandemic, millions of people discovered they could work from anywhere. However, finding legitimate paid travel opportunities remained fragmented across dozens of platforms. We wanted to create a single destination for travelers seeking income-generating experiences.

2. Gamification's Power to Drive Engagement

Apps like Duolingo proved that gamification could transform mundane tasks into engaging experiences. We asked: "What if we applied this to travel exploration?" The result was our CLR (Ceylon Rewards) points system, achievement badges, and streak tracking that turns travel planning into an addictive game.

3. The Social Travel Gap

While social media platforms let people share travel photos, there was no dedicated space for travelers to connect, share opportunities, and build a community around paid travel experiences. We envisioned a "LinkedIn meets Instagram for travelers."

Personal Motivation

As developers who love to travel, we experienced firsthand the frustration of:

  • Scattered information about work-travel opportunities
  • Lack of community support for aspiring digital nomads
  • No way to track and gamify our travel goals
  • Missing a platform that combined social networking with practical travel opportunities

Ceylon Guider was born from the desire to solve these problems for ourselves and millions of travelers worldwide.


🎓 What We Learned

Technical Learnings

1. Flutter State Management at Scale

  • Managing complex state across social features, gamification, and subscription systems
  • Learned when to use StatefulWidget vs Provider vs Riverpod
  • Mastered efficient widget rebuilds to prevent performance issues
  • Implemented proper lifecycle management for real-time listeners

2. Firebase Architecture

  • Firestore Data Modeling: Designed scalable collections for users, posts, followers, activity feeds
  • Security Rules: Implemented granular access control for user data
  • Real-time Listeners: Managed subscription lifecycles to prevent memory leaks
  • Cloud Functions: Built serverless functions for notifications and data aggregation
  • Firebase Storage: Optimized image uploads with compression and caching

3. RevenueCat Integration

  • Implemented subscription management across Android and iOS
  • Learned the intricacies of entitlements vs products vs offerings
  • Built a dual subscription system (RevenueCat + Firebase trial)
  • Handled subscription restoration and edge cases
  • Integrated with Google Play and App Store

4. Social Features Implementation

  • Built a complete social graph (followers, following, activity feeds)
  • Implemented real-time post creation, likes, and comments
  • Designed efficient queries to prevent N+1 problems
  • Created a notification system for social interactions
  • Handled image uploads with progress indicators

5. Gamification Systems

  • Designed a points economy (CLR rewards)
  • Implemented achievement badges with unlock conditions
  • Built streak tracking with daily check-ins
  • Created leaderboards with real-time updates
  • Balanced reward systems to prevent exploitation

6. UI/UX Design Principles

  • Responsive design for various screen sizes
  • Dark mode implementation with gradient aesthetics
  • Accessibility considerations (contrast, touch targets, screen readers)
  • Smooth animations and transitions
  • Loading states and error handling

Business Learnings

1. Monetization Strategy

  • Freemium model with clear value proposition
  • Trial system to reduce friction (1000 CLR = 7-day trial)
  • Lifetime purchase option for committed users
  • Pricing psychology (3x annual = lifetime)

2. User Acquisition

  • Gamification as a retention tool
  • Social features for viral growth
  • Premium content gating to drive conversions
  • Community building through shared experiences

3. Product Development

  • MVP approach: Launch with core features, iterate based on feedback
  • Feature prioritization: Social > Gamification > Premium content
  • User testing revealed unexpected use cases
  • Importance of onboarding flow for complex apps

Soft Skills Developed

  • Problem-Solving: Debugging complex state management issues
  • Documentation: Writing comprehensive setup guides for team members
  • Code Review: Maintaining code quality across a large codebase
  • Time Management: Balancing feature development with bug fixes
  • Communication: Explaining technical decisions to non-technical stakeholders

🛠️ How We Built This Project

Development Timeline

Phase 1: Foundation (Weeks 1-3)

  • Set up Flutter project structure
  • Integrated Firebase (Auth, Firestore, Storage)
  • Built authentication flow (Email, Google, Facebook)
  • Created basic user profile system

Phase 2: Social Features (Weeks 4-7)

  • Implemented post creation with image upload
  • Built follower/following system
  • Created activity feed with real-time updates
  • Added likes, comments, and notifications
  • Designed profile pages with stats

Phase 3: Gamification (Weeks 8-10)

  • Designed CLR points economy
  • Implemented achievement badges (Silver, Gold)
  • Built streak tracking system
  • Created leaderboards
  • Added motivational messages

Phase 4: Premium Features (Weeks 11-13)

  • Integrated RevenueCat for subscriptions
  • Built PTO Dashboard with 7 opportunities
  • Implemented advanced filtering system
  • Created paywall UI
  • Added trial redemption system

Phase 5: Polish & Optimization (Weeks 14-16)

  • Fixed UI overflow issues
  • Optimized performance (lazy loading, caching)
  • Improved error handling
  • Added loading states
  • Conducted user testing
  • Prepared for production release

Technology Stack

Frontend:

  • Flutter 3.0+: Cross-platform UI framework
  • Dart: Programming language
  • Material Design: UI components
  • Lottie: Animations for badges and empty states
  • Cached Network Image: Efficient image loading
  • Confetti: Celebration animations

Backend:

  • Firebase Authentication: User management
  • Cloud Firestore: NoSQL database
  • Firebase Storage: Image and media storage
  • Cloud Functions: Serverless backend logic
  • Firebase Messaging: Push notifications

Monetization:

  • RevenueCat: Subscription management
  • Google Play Billing: Android in-app purchases
  • App Store Connect: iOS in-app purchases

Development Tools:

  • VS Code / Android Studio: IDEs
  • Git: Version control
  • GitHub: Code repository
  • Figma: UI/UX design
  • Postman: API testing

Architecture Patterns

1. Feature-Based Structure

lib/
├── core/                 # Shared utilities, constants
├── models/              # Data models
├── presentation/        # UI screens
│   ├── home_screen/
│   ├── social_screen/
│   ├── profile/
│   └── pto_page/
├── widgets/             # Reusable components
├── revenue_cat/         # Subscription logic
└── streak/              # Gamification features

2. Separation of Concerns

  • Models: Data structures
  • Presentation: UI logic
  • Widgets: Reusable components
  • Core: Shared utilities

3. Firebase Integration

  • Centralized Firebase references
  • Reusable query builders
  • Error handling wrappers

Key Implementation Details

1. Social Graph Implementation

// Efficient follower/following structure
followersRef
  .doc(userId)
  .collection('userFollowers')
  .doc(followerId)

followingRef
  .doc(userId)
  .collection('userFollowing')
  .doc(followingId)

2. Points Economy

// CLR rewards for actions
- Follow Ceylon Guider: +50 CLR
- Follow other users: +10 CLR
- Create post: +5 CLR
- Daily streak: +10 CLR
- Redeem trial: -1000 CLR

3. Subscription Validation

// Dual subscription check
bool hasAccess = hasRevenueCatSubscription || hasTempSubscription;

4. Advanced Filtering

// Multi-criteria filtering
opportunities.where((opp) {
  return locationMatch && 
         typeMatch && 
         categoryMatch && 
         fundingMatch && 
         durationMatch;
});

Design Decisions

1. Dark Theme

  • Reduces eye strain for travel planning at night
  • Modern, premium aesthetic
  • Better battery life on OLED screens

2. Gradient Backgrounds

  • Visual hierarchy and depth
  • Distinguishes different sections
  • Premium feel

3. Gamification Elements

  • Lottie animations for achievements
  • Confetti for celebrations
  • Progress bars for streaks
  • Badges for milestones

4. Responsive Design

  • Breakpoint at 350px width
  • Dynamic font sizing
  • Flexible layouts
  • Overflow handling

🚧 Challenges We Faced

1. UI Overflow Issues

Problem: Encountered multiple RenderFlex overflow errors, particularly:

  • Profile page gray area (achievement badges)
  • Message bubble overflow (0.666 pixels)
  • Filter chips on small screens

Solution:

  • Removed unnecessary Expanded and Flexible wrappers
  • Added crossAxisAlignment: CrossAxisAlignment.start to Rows
  • Constrained Lottie animations with explicit SizedBox dimensions
  • Used mainAxisSize: MainAxisSize.min on Columns
  • Implemented responsive breakpoints for small screens

Learning: Flutter's constraint system requires careful attention to widget hierarchy. Always test on multiple screen sizes.

2. Subscription State Management

Problem: Managing two subscription types (RevenueCat + Firebase trial) led to:

  • Race conditions during initialization
  • Inconsistent state between checks
  • Users seeing paywall despite having trial access

Solution:

Future<void> _initAsync() async {
  await _checkSubscriptionStatus();  // Check RevenueCat first
  if (!hasSubscription) {
    await _checkTempSubscription();  // Then check Firebase
  }
}

Learning: Async operations need careful sequencing. Always check premium subscriptions before fallback options.

3. Firebase Security Rules

Problem: Initial security rules were too permissive, allowing:

  • Users to modify other users' data
  • Unauthorized access to private posts
  • Score manipulation

Solution: Implemented granular rules:

match /users/{userId} {
  allow read: if request.auth != null;
  allow write: if request.auth.uid == userId;
}

match /posts/{postId} {
  allow read: if request.auth != null;
  allow write: if request.auth.uid == resource.data.ownerId;
}

Learning: Security should be designed from day one, not retrofitted.

4. Image Upload Performance

Problem: Large image uploads caused:

  • App freezing during upload
  • Excessive bandwidth usage
  • Storage costs

Solution:

  • Implemented image compression before upload
  • Added progress indicators
  • Used cached network images for display
  • Lazy loading for image grids

Learning: Always optimize media before uploading. User experience > image quality.

5. Real-time Listener Memory Leaks

Problem: Firestore listeners not properly disposed caused:

  • Memory leaks
  • Multiple subscriptions to same data
  • App slowdown over time

Solution:

StreamSubscription? _subscription;

@override
void dispose() {
  _subscription?.cancel();
  super.dispose();
}

Learning: Always dispose of listeners in the dispose() method. Use StreamSubscription for better control.

6. Package Name Migration

Problem: Needed to change package name from com.ceylonguider.app to com.ceylonguider.global:

  • AndroidManifest.xml updates
  • MainActivity.kt package changes
  • iOS bundle identifier changes
  • Firebase configuration updates
  • Google Services JSON updates

Solution: Created comprehensive migration guide (PACKAGE_NAME_MIGRATION.md) and updated:

  • All AndroidManifest files (main, debug, profile)
  • Kotlin package structure
  • iOS project.pbxproj
  • Firebase configuration files
  • RevenueCat settings

Learning: Package name changes are complex. Document every step for team members.

7. Font Migration

Problem: Original Orbitron font caused:

  • Text overflow on small screens
  • Poor readability for long descriptions
  • Inconsistent spacing

Solution:

  • Migrated to Poppins font family
  • Implemented proper font weights (Regular, Medium, SemiBold, Bold)
  • Updated all text styles across the app
  • Created FONT_MIGRATION.md documentation

Learning: Font choice significantly impacts UX. Test with real content, not Lorem Ipsum.

8. RevenueCat Integration Complexity

Problem: Understanding RevenueCat's architecture:

  • Difference between products, packages, offerings, and entitlements
  • Platform-specific product IDs
  • Subscription restoration
  • Webhook configuration

Solution:

  • Created detailed setup guides (GOOGLE_PLAY_SUBSCRIPTION_SETUP_GUIDE.md)
  • Documented Pub/Sub topic configuration
  • Implemented proper error handling
  • Added comprehensive testing checklist

Learning: Third-party integrations require thorough documentation. Don't rely on memory.

9. Gamification Balance

Problem: Initial points economy was:

  • Too easy to exploit (unlimited post creation)
  • Not rewarding enough (users lost interest)
  • Unclear value proposition (why earn CLR?)

Solution:

  • Balanced reward amounts based on user effort
  • Added cooldowns for repeatable actions
  • Created tangible benefits (1000 CLR = trial)
  • Implemented achievement milestones

Learning: Gamification requires constant iteration based on user behavior analytics.

10. Cross-Platform Consistency

Problem: Differences between Android and iOS:

  • Permission handling
  • Navigation patterns
  • UI rendering
  • In-app purchase flows

Solution:

  • Platform-specific code where necessary
  • Extensive testing on both platforms
  • Conditional UI based on Platform.isAndroid/isIOS
  • Separate configuration files

Learning: "Write once, run anywhere" is aspirational. Always test on both platforms.

11. State Persistence

Problem: Users lost data when:

  • App was killed by system
  • Network connection dropped
  • Navigating between screens

Solution:

  • Implemented proper state management
  • Added offline support with Firestore caching
  • Used SharedPreferences for simple data
  • Implemented pull-to-refresh

Learning: Mobile apps must handle interruptions gracefully. Never assume continuous connectivity.

12. Performance Optimization

Problem: App became sluggish with:

  • Large follower lists
  • Many posts in feed
  • Complex UI animations

Solution:

  • Implemented pagination (20 posts at a time)
  • Used ListView.builder for lazy loading
  • Optimized widget rebuilds with const constructors
  • Cached expensive computations

Learning: Performance optimization is ongoing. Profile regularly with Flutter DevTools.


📊 Project Statistics

  • Total Lines of Code: ~15,000+
  • Number of Screens: 25+
  • Firebase Collections: 8 (users, posts, followers, following, activity, comments, likes, notifications)
  • Reusable Widgets: 50+
  • Development Time: 16 weeks
  • Team Size: Solo developer (with AI assistance)
  • Supported Platforms: Android, iOS
  • Minimum SDK: Android 21 (Lollipop), iOS 12.0
  • Target SDK: Android 35 (Android 15), iOS 17.0

🚀 Future Roadmap

Short-term (Next 3 months)

  • [ ] Implement actual PTO application system
  • [ ] Add in-app messaging between users
  • [ ] Create detailed opportunity pages
  • [ ] Build notification center
  • [ ] Add search functionality

Mid-term (3-6 months)

  • [ ] AI-powered opportunity recommendations
  • [ ] Video content support
  • [ ] Stories feature (24-hour posts)
  • [ ] Advanced analytics dashboard
  • [ ] Multi-language support

Long-term (6-12 months)

  • [ ] Web version (Flutter Web)
  • [ ] Desktop apps (Windows, macOS, Linux)
  • [ ] API for third-party integrations
  • [ ] Marketplace for travel services
  • [ ] Virtual events and meetups

🤝 Contributing

This is currently a private project, but we welcome feedback and suggestions. If you're interested in contributing or have ideas for features, please reach out.


📄 License

Copyright © 2026 Ceylon Guider. All rights reserved.


🙏 Acknowledgments

  • Flutter Team: For an amazing cross-platform framework
  • Firebase: For robust backend infrastructure
  • RevenueCat: For simplifying subscription management
  • Lottie: For beautiful animations
  • Open Source Community: For countless packages and solutions
  • Beta Testers: For invaluable feedback and bug reports


Built with ❤️ and ☕ by travelers, for travelers.

"Turn your wanderlust into income"

Built With

Share this project:

Updates