Semaphore is a full-featured RSS reader application designed for modern content consumption. It consists of a cross-platform mobile application built with Flutter and a robust backend API server written in Go. The project emphasizes clean architecture, scalability, and user experience.
- π± Cross-platform mobile app - Native iOS and Android applications built with Flutter
- π User authentication - Secure email/username login with Google Sign-In integration
- π° RSS/Atom feed management - Subscribe to and organize your favorite content sources
- π― Topic-based organization - Curated topics and categories for content discovery
- π Content walls - Create custom collections of feeds for focused reading
- πΎ Save articles - Save articles for later
- β€οΈ Social features - Like and share articles
- π Advanced search - Full-text search across feeds
- π Analytics integration - Firebase Analytics and Crashlytics support
- π¨ Adaptive theming - Light and dark mode support
- π° Popular sources - Easily follow subreddits, medium publications, substacks, youtube channels etc.
Semaphore follows a clean architecture pattern with clear separation of concerns:
server/
βββ cmd/api/ # Application entry point and HTTP handlers
βββ internal/
β βββ data/ # Database models and queries
β βββ cache/ # Redis caching layer
β βββ mailer/ # Email service
β βββ validator/ # Input validation
βββ migrations/ # Database schema migrations
βββ vendor/ # Vendored dependencies
Tech Stack:
- Language: Go 1.23+
- Database: PostgreSQL with pgx driver
- Cache: Redis
- HTTP Router: httprouter
- RSS Parsing: gofeed
- Migrations: Goose
app/lib/
βββ features/ # Feature-based modules
β βββ auth/ # Authentication
β βββ feed/ # RSS feed management
β βββ home/ # Main navigation
β βββ profile/ # User profile
βββ core/ # Shared components
β βββ router/ # Navigation (go_router)
β βββ theme/ # UI theming
β βββ common/ # Shared widgets and utilities
βββ packages/smphr_sdk/ # Custom SDK for Auth and request interceptors
Tech Stack:
- Framework: Flutter 3.4.3+
- State Management: flutter_bloc
- Navigation: go_router
- HTTP Client: dio
- Local Storage: Hive + shared_preferences
- UI: Material Design with adaptive theming
The smphr_sdk provides a clean interface between the Flutter app and Go backend:
- Authentication management with automatic token refresh
- Session persistence across app restarts
- Standardized error handling
- Network connectivity monitoring
- Go 1.23+ - Install Go
- Flutter 3.4.3+ - Install Flutter
- PostgreSQL 15+ - Install PostgreSQL
- Redis 7+ - Install Redis
- Docker & Docker Compose (optional, for easier development setup)
-
Clone the repository:
git clone https://github.com/araaavind/semaphore.git cd semaphore -
Set up environment variables: Create a
.envrcfile in the project root:export SEMAPHORE_DSN="postgres://username:password@localhost/semaphore?sslmode=disable" export SMTP_USERNAME="test-smtp-username" export SMTP_PASSWORD="test-smtp-password" export PROD_IP="production-server-ip"
The easiest way to get started is using Docker Compose for the database services:
# Start PostgreSQL and Redis services
docker-compose up -d
# The services will be available at:
# - PostgreSQL: localhost:5432 (dev-db)
# - PostgreSQL Test: localhost:5433 (test-db)
# - Redis: localhost:6379-
Navigate to the server directory:
cd server -
Install Go dependencies:
go mod download
-
Set up the database:
# Install goose migration tool go install github.com/pressly/goose/v3/cmd/goose@latest # Run database migrations make db/migrations/up
-
Start the API server:
make run/api
The API server will be available at
http://localhost:4000
-
Navigate to the app directory:
cd app -
Install Flutter dependencies:
flutter pub get
-
Configure Firebase (optional):
- Add your
google-services.json(Android) andGoogleService-Info.plist(iOS) - Update Firebase configuration in
lib/firebase_options.dart
- Add your
-
Update server configuration:
// In lib/core/constants/server_constants.dart static const String baseUrl = 'http://localhost:4000/v1';
-
Run the app:
# For development flutter run # Or build for specific platforms flutter build apk # Android flutter build ios # iOS
We welcome contributions! Please see our Contributing Guide for details on:
- Setting up your development environment
- Code style and standards
- Submitting pull requests
- Reporting issues
This project is licensed under the MIT License - see the LICENSE file for details.
- gofeed - RSS/Atom parsing
- pgx - PostgreSQL driver
- httprouter - HTTP routing
- Issues: GitHub Issues
- Discussions: GitHub Discussions






