A modern social media mobile application built with React Native and Expo, featuring real-time post sharing, image uploads, and user authentication.
- π User Authentication - Firebase Authentication with email/password
- π± Post Creation - Share text and images with your network
- πΌοΈ Image Upload - Upload and share photos from your device
- β€οΈ Like System - Like posts with real-time updates
- π€ User Profiles - View and edit your profile
- π Real-time Feed - Live updates of posts using Firestore listeners
- ποΈ Post Management - Delete your own posts
- π¨ Dark Theme - Sleek black and gold UI design
- Framework: React Native with Expo SDK 54
- Language: TypeScript
- Navigation: React Navigation (Stack & Bottom Tabs)
- Backend: Firebase
- Authentication
- Firestore Database
- Storage (for images)
- State Management: React Context API
- UI Components: Custom components with consistent theming
- Date Handling: Day.js with relative time
- Image Handling: Expo Image Picker
- Storage: AsyncStorage for auth persistence
framez/
βββ src/
β βββ components/ # Reusable UI components
β β βββ ui/ # Base UI components (Button, Input)
β β βββ Header.tsx
β β βββ Logo.tsx
β β βββ PostCard.tsx
β β βββ ScreenHeader.tsx
β βββ context/ # React Context providers
β β βββ AuthContext.tsx # Authentication state management
β βββ lib/ # Third-party integrations
β β βββ firebase.ts # Firebase configuration
β βββ navigation/ # App navigation
β β βββ RootNavigator.tsx
β β βββ stacks/ # Stack navigators
β β βββ tabs/ # Tab navigators
β βββ screens/ # App screens
β β βββ auth/ # Authentication screens
β β βββ CreatePostScreen.tsx
β β βββ EditProfileScreen.tsx
β β βββ FeedScreen.tsx
β β βββ ProfileScreen.tsx
β βββ theme/ # Styling and theming
β β βββ colors.ts # Color palette
β β βββ index.ts
β βββ types/ # TypeScript type definitions
βββ assets/ # Static assets (images, icons)
βββ App.tsx # App entry point
βββ app.json # Expo configuration
βββ package.json
βββ tsconfig.json
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher)
- npm or pnpm
- Expo CLI
- Firebase Account with a project set up
-
Clone the repository
git clone <repository-url> cd framez
-
Install dependencies
pnpm install # or npm install -
Set up Firebase
- Create a Firebase project at Firebase Console
- Enable Authentication (Email/Password)
- Create a Firestore Database
- Set up Firebase Storage
- Copy your Firebase config credentials
-
Configure environment variables
Copy
.env.exampleto.envand fill in your Firebase credentials:cp .env.example .env
Update the
.envfile with your Firebase configuration:EXPO_PUBLIC_FIREBASE_API_KEY="your-api-key" EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN="your-auth-domain" EXPO_PUBLIC_FIREBASE_PROJECT_ID="your-project-id" EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET="your-storage-bucket" EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID="your-sender-id" EXPO_PUBLIC_FIREBASE_APP_ID="your-app-id" EXPO_PUBLIC_FIREBASE_MEASUREMENT_ID="your-measurement-id"
# Start the Expo development server
pnpm start
# Run on Android
pnpm android
# Run on iOS
pnpm ios
# Run on Web
pnpm web- Install Expo Go on your mobile device
- Scan the QR code from the terminal
- The app will load on your device
The app uses the following Firestore structure:
{
authorId: string, // User UID
authorName: string, // Display name
authorAvatar: string, // Profile photo URL
text: string, // Post content
imageUrl: string | null, // Uploaded image URL
likes: string[], // Array of user UIDs who liked
createdAt: Timestamp // Server timestamp
}Images are stored in Firebase Storage at:
posts/{userId}/{timestamp}
Make sure to configure appropriate Firestore and Storage security rules for production use.
- Unauthenticated users see Sign In/Sign Up screens
- Authentication state persists using AsyncStorage
- Authenticated users access the main app (Feed, Create, Profile)
- Posts feed updates in real-time using Firestore listeners
- Like counts update instantly across all users
- Profile posts sync automatically
- Users can pick images from their device library
- Images are compressed (70% quality) before upload
- Images are stored in Firebase Storage with unique timestamps
- Consistent dark theme with gold accents
- Centralized color palette in
src/theme/colors.ts - Reusable UI components for buttons and inputs
The app uses a sophisticated dark theme with gold accents:
- Background: Black (#000000) with subtle grays
- Text: Ivory (#FFFFF0) for primary text
- Accent: Gold (#FFD700) for highlights and CTAs
- Borders: Dark gray (#333333)
pnpm start- Start Expo development serverpnpm android- Run on Android device/emulatorpnpm ios- Run on iOS device/simulatorpnpm web- Run on web browser
This project uses EAS (Expo Application Services) for building and deployment.
The project is configured with:
- Android package:
com.leonesii.framez - EAS Project ID:
5c22002a-2d0b-47cd-b8eb-e1294365ef2b
# Android
eas build --platform android
# iOS
eas build --platform ios- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Verify all Firebase credentials in
.env - Ensure Firebase services (Auth, Firestore, Storage) are enabled
- Check Firebase Console for error logs
- Clear cache:
expo start -c - Reinstall dependencies:
rm -rf node_modules && pnpm install - Check Node.js version compatibility
- Verify Firebase Storage rules
- Check network connectivity
- Ensure storage bucket is properly configured
This project is private and proprietary.
- Built with Expo
- Backend powered by Firebase
- Icons by @expo/vector-icons
Note: This is a development project. Ensure proper security measures, error handling, and testing before deploying to production.