Gossip is a privacy-first, secure messaging application built with React, TypeScript, and Vite. It provides end-to-end encrypted communication with local data storage, ensuring your conversations remain private and secure.
- 🔐 Privacy First: All messages are encrypted and stored locally on your device
- 💬 Secure Messaging: End-to-end encryption for all communications
- 📱 Progressive Web App: Install as a native app on any device
- 🏠 Local Storage: Your data never leaves your device
- 👤 User Profiles: Create and manage your secure identity
- 🎨 Modern UI: Clean, responsive interface built with Tailwind CSS
- Frontend: React 19 + TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- State Management: Zustand
- Database: Dexie (IndexedDB wrapper)
- PWA: Vite PWA Plugin
- Blockchain: Massa Web3 SDK
- Node.js (version specified in
.nvmrc) - npm or yarn
- Clone the repository:
git clone <repository-url>
cd Gossip- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and navigate to
http://localhost:5173
npm run buildThe built files will be in the dist directory, ready for deployment.
src/
├── components/ # React components
│ ├── ErrorBoundary.tsx
│ ├── DiscussionList.tsx
│ ├── OnboardingFlow.tsx
│ └── AccountCreation.tsx
├── stores/ # State management
│ └── accountStore.tsx
├── db.ts # Database schema and operations
├── App.tsx # Main application component
└── main.tsx # Application entry point
Gossip uses Dexie (IndexedDB) for local data storage with the following entities:
- UserProfile: User account information and blockchain credentials
- Contacts: Contact list with usernames and public keys
- Messages: Encrypted message storage with metadata
- Conversations: Chat thread management
- Settings: Application preferences
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
This project uses ESLint with TypeScript support. The configuration can be found in eslint.config.js.
Gossip can be built as a native iOS app using Capacitor. This allows you to distribute the app through the App Store and provides native iOS features and performance.
- Xcode: Download from the Mac App Store (requires macOS)
- iOS Simulator: Included with Xcode
- CocoaPods: Install with
sudo gem install cocoapods - Apple Developer Account: Required for App Store distribution
- Install Capacitor CLI (if not already installed):
npm install -g @capacitor/cli- Add iOS Platform (already done):
npm run cap:sync:ios- Open Xcode Project:
npm run cap:open:ios- Start the development server:
npm run dev- In a new terminal, sync changes to iOS:
npm run cap:sync:ios- Open iOS Simulator from Xcode (Cmd + Shift + 2) or run:
npm run cap:run:ios- Build the web app:
npm run build- Sync to iOS:
npm run cap:sync:ios- Open in Xcode:
npm run cap:open:ios- Run on simulator or device from Xcode
| Command | Description |
|---|---|
npm run cap:sync:ios |
Build web assets and sync to iOS project |
npm run cap:open:ios |
Open iOS project in Xcode |
npm run cap:run:ios |
Build, sync, and run on iOS simulator |
npm run cap:build:ios |
Build web assets and sync to iOS |
npm run cap:copy:ios |
Copy web assets to iOS without rebuilding |
The app is configured in capacitor.config.ts with iOS-specific settings:
- App ID:
net.massa.gossip - App Name:
Gossip - Scheme:
Gossip - Background Color: Black (
#000000) - Content Inset: Automatic
- Scroll Enabled: True
- Open Xcode project:
npm run cap:open:ios - Select a simulator device from the dropdown
- Click the play button (
▶️ ) or press Cmd + R - The app will launch in the iOS Simulator
- Connect an iOS device to your Mac
- Trust the device when prompted
- In Xcode, select your device from the dropdown
- Click play to build and run on device
- Use Safari's Web Inspector: Safari → Develop → [Your Device] → [App Name]
- Console logs and debugging work the same as web development
-
Update App Information:
- Open
ios/App/App/Info.plist - Update app name, version, and bundle ID
- Open
-
Generate App Icons:
- Icons are automatically generated from
assets/icon.svg - Custom icons can be placed in
ios/App/App/Assets.xcassets/AppIcon.appiconset/
- Icons are automatically generated from
-
Configure Signing:
- In Xcode: Select target → Signing & Capabilities
- Choose your development team
- Enable required capabilities (if any)
-
Build for App Store:
- In Xcode: Product → Archive
- Upload to App Store Connect via Xcode Organizer
CocoaPods Issues:
cd ios/App
pod installBuild Errors:
- Clean build folder: Cmd + Shift + K in Xcode
- Clean derived data: Xcode → Settings → Locations → Derived Data → Delete
Simulator Not Launching:
- Restart Xcode
- Reset simulator: Simulator → Device → Erase All Content and Settings
Plugin Issues:
- Re-sync plugins:
npm run cap:sync:ios - Update pods:
cd ios/App && pod update
The app uses these Capacitor plugins:
- @capacitor/status-bar: Controls status bar appearance
- @aparajita/capacitor-biometric-auth: Biometric authentication support
- Test on actual devices for accurate performance metrics
- Monitor memory usage in Xcode Instruments
- Use Safari Web Inspector for performance profiling
- Consider using
CapacitorHttpfor native HTTP requests when needed
App not loading in simulator:
- Check that web server is running (
npm run dev) - Re-sync:
npm run cap:sync:ios - Clean and rebuild in Xcode
Blank screen on device:
- Check device logs in Xcode console
- Verify network permissions
- Test with a simple HTML page to isolate issues
Build failures:
- Update Xcode to latest version
- Clear derived data
- Reinstall pods:
cd ios/App && pod deintegrate && pod install
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and linting
- Submit a pull request
Gossip prioritizes user privacy and security:
- All data is stored locally on your device
- Messages are encrypted before storage
- No data is transmitted to external servers
- Built with modern security best practices
- Real-time messaging implementation
- Contact discovery and management
- File sharing capabilities
- Voice and video calling
- Group messaging
- Message backup and restore