Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
94c7dd8
feat: follow initial account - [CU-869b67fph] (#113)
tonynagyy Dec 11, 2025
d2bf29f
test(e2e): add notifications e2e tests - [CU-869atcr1a] (#206)
im-saif Dec 11, 2025
5d05388
fix: fix input style to fit long inputs - [CU-869bf0qux] (#207)
Youssefwafa7 Dec 11, 2025
2641834
fix: trends response and loading - [CU-869berqhc] (#202)
HelanaNady Dec 11, 2025
8808908
test(e2e): add new features e2e from old tests - [CU-869bf3463] (#208)
im-saif Dec 11, 2025
167bd23
fix: handle retweet ids - [CU-869bfhtf3] (#214)
Exo1i Dec 12, 2025
dad8b7e
test(e2e): add messages e2e tests - [CU-869atcqz5] (#210)
im-saif Dec 12, 2025
6c712fd
fix: make reply button open composer - [CU-869bev5u2] (#205)
tonynagyy Dec 12, 2025
43a3a37
feat: add settings biosetup tests - [CU-869bfer83] (#211)
tonynagyy Dec 12, 2025
89576f5
refactor: update search cache with profile interactions - [CU-869begh…
AhmedSobhy01 Dec 12, 2025
4394a1d
refactor: replace hashtag-specific search with unified text suggestio…
AhmedSobhy01 Dec 12, 2025
53e9e79
test: chat related unit tests - [CU-869bfhnf0] (#212)
Youssefwafa7 Dec 12, 2025
3a4f2c3
perf: improve tweet list performance - [CU-869bfj8qz] (#215)
Exo1i Dec 13, 2025
1a2dbfe
fix: remove ai button from empty content tweets - [CU-869bfhk76] (#213)
Youssefwafa7 Dec 13, 2025
53694bc
feat: handle 410 for For You feed - [CU-869baxj8z] (#218)
AhmedSobhy01 Dec 13, 2025
fb2d877
refactor: update tweet author relationship structure across component…
AhmedSobhy01 Dec 14, 2025
b9bb883
refactor: user list responses - [CU-869bfnwfy] (#219)
HelanaNady Dec 14, 2025
0d3982a
fix: require cycle console warning - [CU-869bdcj5z] (#220)
HelanaNady Dec 14, 2025
48d5297
refactor: integrate follow button functionality in FollowSuggestions …
tonynagyy Dec 14, 2025
5b6a290
fix: add blocked status to tweet activity screens - [CU-869bfnwfy] (#…
AhmedSobhy01 Dec 14, 2025
efb68bb
feat: scroll to top when clicking on home button - [CU-869bfxq29] (#227)
AhmedSobhy01 Dec 14, 2025
3ecbf6c
test: increase test coverage for profile and user actions - [CU-869bf…
HelanaNady Dec 14, 2025
7fbde43
fix(profile): wrong blocked username - [CU-869bfywbt] (#228)
HelanaNady Dec 14, 2025
e28ae63
test(e2e): add privacy & interests settings e2e - [CU-869bfnb58] (#229)
im-saif Dec 14, 2025
eae1033
test(e2e): add profile actions e2e tests - [CU-869atcqz9] (#230)
im-saif Dec 15, 2025
ca23e05
fix: for you explore tab issues - [CU-869bfzf6k] (#232)
HelanaNady Dec 15, 2025
2de9221
fix: delete detailed tweet - [CU-869bfyzet] (#231)
HelanaNady Dec 15, 2025
5ccd11a
feat: err handling in chat - [CU-869bfkfuh] (#216)
Youssefwafa7 Dec 15, 2025
f4c06db
feat: add readme & terms of services & privacy policy - [CU-869bfzfx7…
AhmedSobhy01 Dec 15, 2025
420b227
refactor: combine sse hocks into one to avoid multiple connections - …
AhmedSobhy01 Dec 15, 2025
a1ac6bf
fix: remove expo localization - [CU-869bg4eez] (#235)
Exo1i Dec 15, 2025
387557c
fix: fix doubletap, longpress on media in chat - [CU-869bfzm37] (#236)
Youssefwafa7 Dec 15, 2025
9d0adb5
fix: resolve data caching issues across all screens - [CU-869bftb9v] …
Exo1i Dec 15, 2025
48d7758
test: add new unit tests for notifications screen - [CU-869bg7h5t] (#…
Exo1i Dec 15, 2025
f3be827
feat: exclude current user from recipient suggestions in NewMessageCo…
AhmedSobhy01 Dec 15, 2025
1ed6d19
fix: push profile screen instead of navigating with check if same pro…
AhmedSobhy01 Dec 15, 2025
7693061
fix: limit media size in tweet composer media uploads - [CU-869bga43d…
Exo1i Dec 15, 2025
c17574c
fix: composer styling - [CU-869bfu16g] (#223)
tonynagyy Dec 15, 2025
3eea9d8
test(e2e): add tweets & timeline e2e tests - [CU-869atcr0v] (#245)
im-saif Dec 15, 2025
f38c81c
fix: chat initial seen after js opening the app - [CU-869bgcfqh] (#243)
Youssefwafa7 Dec 15, 2025
17d9449
feat: tweet files test - [CU-869bgekwc] (#248)
tonynagyy Dec 15, 2025
17c2f74
feat: add reply functionality to tweet quotes - [CU-869bcu3fq] (#241)
AhmedSobhy01 Dec 15, 2025
167b13c
feat: new tweets indicator - [CU-869bge67z] (#247)
AhmedSobhy01 Dec 15, 2025
841c4be
refactor: top tabs indicators styles - [CU-869bgdwnk] (#246)
HelanaNady Dec 15, 2025
e0d5006
feat: add tests for useFeed and Tweet Component - [CU-869bgekwc] (#249)
AhmedSobhy01 Dec 15, 2025
90a277b
feat: Add OTP resend timer functionality to ConfirmCode - [CU-869bgc2…
Exo1i Dec 15, 2025
c199ab2
test: add missing unit tests - [CU-869bgfmvj] (#250)
Exo1i Dec 15, 2025
22d1950
test: add missing unit tests - [CU-869bgfmvj] (#253)
Exo1i Dec 15, 2025
cf423d1
fix: "You reposted" on tweet component - [CU-869az53zm] (#252)
AhmedSobhy01 Dec 15, 2025
d216976
feat: add tests captcha and tweet composer content - [CU-869bgg6by] (…
tonynagyy Dec 15, 2025
0f02737
test(e2e): add explore & search e2e tests - [CU-869atcqzn] (#254)
im-saif Dec 15, 2025
3bb4ba2
fix: tweet drawer button hard to open - [CU-869bfpkjc] (#234)
HelanaNady Dec 15, 2025
66937f1
fix: hashtags case sentitivity - [CU-869bggh0x] (#256)
AhmedSobhy01 Dec 15, 2025
70cfdd8
test: add unit tests - [CU-869bggf9c] (#255)
Youssefwafa7 Dec 15, 2025
770047a
fix: likers & retweeters cache update - [CU-869bcu3fq] (#257)
AhmedSobhy01 Dec 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
262 changes: 261 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,261 @@
# Cross Platform
<div align="center">
<img src="https://cdn.raven.cmp27.space/light-raven.png" alt="Raven Logo" width="150" height="150">

# Raven Mobile App

**Caw Your Thoughts**

A modern, cross-platform social media application built with React Native and Expo.

[![React Native](https://img.shields.io/badge/React%20Native-0.81.5-61DAFB?logo=react)](https://reactnative.dev/)
[![Expo](https://img.shields.io/badge/Expo-SDK%2054-000020?logo=expo)](https://expo.dev/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript)](https://www.typescriptlang.org/)

</div>

## Features

### Authentication & Security

- **Email/Password Authentication** - Secure sign-up and sign-in with email verification
- **OAuth Integration** - Third-party authentication support
- **Password Recovery** - Forgot password flow with email-based reset
- **Multi-Account Support** - Account switcher for managing multiple profiles
- **Secure Token Storage** - Uses Expo Secure Store for sensitive data

### Timeline & Feed

- **Home Timeline** - Personalized feed with posts from followed users
- **Real-time Updates** - Live feed updates via Server-Sent Events (SSE)
- **Infinite Scrolling** - Cursor-based pagination for smooth scrolling
- **Pull-to-Refresh** - Refresh feed with pull gesture

### Tweets/Posts

- **Tweet Composer** - Rich text editor with support for:
- Hashtag and mention highlighting
- Emoji picker integration
- Media attachments (up to 4 images/videos per tweet)
- **Quote Tweets** - Retweet with your own commentary
- **Reply Threads** - Nested conversation threads
- **Tweet Actions** - Like, retweet, quote, and reply
- **Media Grid** - Responsive media display for images and videos

### Direct Messaging

- **Real-time Chat** - Instant messaging with Socket.IO
- **Message Reactions** - React to messages with emojis
- **Image Sharing** - Send and view images in conversations
- **Message Deletion** - Delete sent messages
- **Conversation List** - View all active conversations

### Explore & Discovery

- **For You** - Curated content discovery
- **Trending Topics** - Popular hashtags and trends
- **Category Sections** - Browse by category (News, Sports, Entertainment)
- **User Search** - Find users by name or username
- **Tweet Search** - Search content with filters

### Search

- **Advanced Filters** - Filter by users, tweets, hashtags
- **Recent Searches** - Quick access to search history
- **Real-time Results** - Instant search suggestions

### Profile Management

- **Profile Customization** - Edit display name, bio, location, website
- **Profile Picture** - Upload and crop profile images
- **Header Image** - Custom profile banner
- **Following/Followers** - View and manage connections
- **Profile Tabs** - View tweets, replies, media, and likes

### Notifications

- **Push Notifications** - Firebase Cloud Messaging integration
- **In-App Notifications** - Real-time notification feed
- **Notification Types** - Likes, retweets, mentions, follows, replies

### Settings & Privacy

- **Appearance** - Theme customization (light/dark mode)
- **Account Settings** - Manage account information
- **Privacy Controls**:
- Muted accounts management
- Blocked accounts management
- Content preferences
- Interest customization

## Tech Stack

### Core

- **React Native** 0.81.5
- **Expo** SDK 54
- **TypeScript** 5.9

### State Management

- **Zustand** - Lightweight state management
- **TanStack Query** (React Query) - Server state and caching

### Styling

- **NativeWind** 4 - TailwindCSS for React Native
- **TailwindCSS** 3.4

### Navigation

- **React Navigation** 7 - Stack, Tab, Drawer, and Material Top Tabs

### Real-time

- **Socket.IO Client** - WebSocket-based real-time messaging
- **React Native SSE** - Server-Sent Events for live updates

### Media

- **Expo Image** - High-performance image component
- **Expo Image Picker** - Camera and gallery access
- **Expo Video** - Video playback with Picture-in-Picture
- **Expo Media Library** - Save and access device media

### Testing

- **Jest** - Unit testing framework
- **Testing Library** - React Native testing utilities
- **WebdriverIO** - End-to-end testing
- **Appium** - Mobile automation
- **MSW** - API mocking

### Other Notable Libraries

- **Shopify FlashList** - High-performance lists
- **Lucide Icons** - Modern icon set
- **React Native Gesture Handler** - Touch gestures
- **React Native Popover View** - Contextual menus
- **RN Emoji Keyboard** - Native emoji picker

## Getting Started

### Prerequisites

- Node.js 18+
- pnpm
- Expo CLI
- Android Studio (for Android development)
- Xcode (for iOS development, macOS only)

### Installation

1. Clone the repository:

```bash
git clone https://github.com/Exo1i/raven-cross-platform
cd raven
```

2. Install dependencies:

```bash
pnpm install
```

3. Set up environment variables:

```bash
cp .env.example .env
```

Edit `.env` with your configuration values.

4. Start the development server:

```bash
pnpm start
```

### Running on Devices

```bash
# Android
pnpm android

# iOS
pnpm ios
```

### Building

Debug builds:

```bash
./build-debug.sh
```

Release builds:

```bash
./build-release.sh
```

## Scripts

| Command | Description |
| --------------- | ------------------------------ |
| `pnpm start` | Start Expo development server |
| `pnpm android` | Run on Android device/emulator |
| `pnpm ios` | Run on iOS device/simulator |
| `pnpm web` | Run in web browser |
| `pnpm test` | Run tests in watch mode |
| `pnpm test:cov` | Run tests with coverage |
| `pnpm e2e` | Run end-to-end tests |

## Configuration

### EAS Build

The project uses Expo Application Services (EAS) for building. Configuration is in `eas.json`:

- **Development** - Debug builds for development
- **Preview** - Internal testing builds
- **Production** - Release builds for app stores

### Firebase

Push notifications require Firebase configuration:

1. Create a Firebase project
2. Add `google-services.json` for Android
3. Set `GOOGLE_SERVICES_JSON` environment variable for CI/CD

## Licenses

### Fonts

- **Inter** - The app uses the [Inter font family](https://fonts.google.com/specimen/Inter) by Rasmus Andersson, licensed under the [SIL Open Font License 1.1](https://scripts.sil.org/OFL).

### Icons

- **Lucide Icons** - Licensed under the [ISC License](https://github.com/lucide-icons/lucide/blob/main/LICENSE).
- **Ionicons** - Licensed under the [MIT License](https://github.com/ionic-team/ionicons/blob/main/LICENSE).
- **Expo Vector Icons** - A collection of icon sets, each with their respective licenses.

### Images

- App logo and splash screen images are original assets created for this project.
- User-uploaded content is subject to the platform's terms of service.

### Code Quality

The project enforces code quality with:

- **ESLint** - Linting with Expo and TypeScript rules
- **Prettier** - Code formatting
- **Husky** - Git hooks for pre-commit checks
- **TypeScript** - Strict type checking

## License

This project is licensed under the [MIT License](LICENSE).
1 change: 0 additions & 1 deletion app.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ export default ({ config }) => ({

plugins: [
'expo-secure-store',
'expo-localization',
[
'expo-media-library',
{
Expand Down
5 changes: 5 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,10 @@ module.exports = function (api) {
api.cache(true);
return {
presets: [['babel-preset-expo', { jsxImportSource: 'nativewind' }], 'nativewind/babel'],
env: {
test: {
plugins: ['dynamic-import-node'],
},
},
};
};
Loading