Fenice
Fenice is our multi-tenant reading application monorepo that provides white-label reading apps for publishers and content distributors across multiple platforms (iOS, Android, macOS, Windows), maintaining a consistent experience and unified codebase.
Overview
Fenice serves as our comprehensive B2B white-label reading application solution, providing:
- Multi-platform reading applications (Mobile, Desktop)
- White-label customization for 25+ active publishers/tenants
- Universal "Publica Reader" app for accessing content from any tenant
- Unified codebase with shared business logic
- Cross-platform content synchronization and offline reading
- DRM content protection
- Reading session tracking and limited analytics
- Multi-tenant configuration and branding management
Architecture
Monorepo Structure
Core (/fenice/)
Shared library containing all business logic
- Version: 1.23.6
- Technology: React/JavaScript modular architecture
- Components: UI components, screens, services, state management (Redux), navigation, themes, localization
- Purpose: Centralized business logic shared across all platforms
Mobile (/mobile/)
React Native application for iOS and Android
- Name: "publicalamobile"
- Technology: React Native 0.75.4
- Dependency:
"fenice": "link:../fenice" - Features: Google/Apple/Facebook authentication, Firebase messaging, offline storage, DRM protection
Desktop (/desktop/)
Electron application for Windows and macOS
- Name: "PublicaReader"
- Version: 0.12.2
- Technology: React + Electron + Tailwind CSS
- Dependency:
"fenice": "link:../fenice" - Features: Auto-updates, deep linking, cross-platform distribution (Windows x64, macOS x64/ARM64)
Technology Stack
Frontend/Core
- React: Primary UI library
- Redux: Global state management
- React Navigation: Screen navigation
- i18next: Internationalization
- Axios: HTTP client
Mobile Specific
- React Native: Cross-platform mobile framework
- Firebase: Analytics, messaging, crashlytics
- AsyncStorage: Local storage
- React Native Reanimated: Animations
Desktop Specific
- Electron: Desktop application framework
- Tailwind CSS: Styling framework
- Electron Builder: Packaging and distribution
- Electron Updater: Auto-update system
Key Features
Multi-Tenant System
- 25+ Active Publishers/Tenants: Including La Tercera, Santillana, Planeta, Bajalibros, UNAM, and more
- Custom Branding: Colors, logos, icons per tenant
- Independent Versioning: Each tenant maintains their own version
- Flexible Configuration: Staging and production environments per tenant
Reading Experience
- Offline Reading: Content synchronization and local storage
- Cross-Platform Sync: Consistent experience across mobile and desktop
- DRM Protection: Digital content protection and rights management
- Multi-Format Support: PDF, EPUB, and audiobooks
- Accessibility: Screen reader support and accessibility features
Platform Features
- White-Label Solution: Complete customization for publishers
- Universal App: "Publica Reader" for accessing content from any tenant
- Deep Linking: Custom URL schemes for content access
- Push Notifications: Content updates and engagement notifications
- Multi-Language Support: Internationalization for global markets
- Auto-Updates: Seamless application updates across platforms
Integration Capabilities
Fenice integrates with multiple platform services:
Core Platform Integration
- Farfalla: Main backend API for content management, user data, and all monetization features
- Coniglio: Reading and listening session event tracking
- Volpe: Content reader/player integration
External Services
- Firebase: Analytics, messaging, and crash reporting
- Google Analytics: Limited analytics and engagement tracking
- Sentry: Error tracking and performance monitoring
- CloudFlare: CDN for content and application distribution
- AWS S3: Content storage and delivery
- Social Auth: Google, Apple, Facebook authentication
Distribution Channels
- App Stores: iOS App Store, Google Play Store
- Web: Browser-based reading applications
- Desktop: Windows and macOS native applications
Development Workflow
Environment Management
/env/default/
├── config.env # General configuration
├── client/app.env # Client configuration
└── backend/app.env # Backend configuration
Automation Scripts (/node_scripts/)
create_env.js: Environment generationbuild_tenant.js: Tenant-specific buildsupgrade_version.js: Version managementswitch_tenant.js: Tenant switchingrun.js: Application execution
Development Commands
# Platform Development
yarn desktop # Run desktop application
yarn android # Run Android application
yarn ios # Run iOS application
# Environment Management
yarn create_env [env] # Create environment
yarn clone_env # Clone environment
# Version Management
yarn upgrade_version # Update versions
yarn build_tenant # Build specific tenant
Architecture Benefits
- Consistency: Same experience across all platforms
- Scalability: Easy addition of new tenants
- Maintainability: Centralized changes in Core
- Efficiency: Parallel development across platforms
- Flexibility: Per-tenant customization without code duplication
- Quality: Centralized testing and unified quality tools
Development
For detailed development information, tenant configuration guides, deployment procedures, and platform-specific implementation details, refer to the additional documentation sections in this project area.