LinkSmash is a mobile application that allows you to save, organize, and manage links shared from other apps. It automatically fetches rich metadata (titles, descriptions, images) for saved links and provides a clean interface to browse and organize them with tags.
- Share Links: Share links from any app on your device directly to LinkSmash
- Rich Metadata: Automatically fetches titles, descriptions, and images for saved links
- Platform Support: Special handling for popular platforms (Instagram, Twitter, YouTube, etc.)
- Tag Organization: Organize links with custom tags and filter by tags
- Edit Links: Edit link metadata, tags, and descriptions
- Dark Mode: Full support for light and dark themes
- Offline Storage: All links are stored locally on your device
LinkSmash is a React Native mobile application built with Expo:
apps/expo: React Native mobile app built with Expo
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI (installed globally or via npx)
- For iOS development: Xcode and CocoaPods
- For Android development: Android Studio and Android SDK
- Redis (optional, for API caching - defaults to localhost:6379)
- Clone the repository:
git clone <repository-url>
cd LinkSmash- Install dependencies:
npm installThe Expo app requires an API URL to fetch metadata. Set up your environment:
- Navigate to the Expo app directory:
cd apps/expo- Run the setup script (recommended):
npm run setup:envThis interactive script will help you configure the API URL for development or production.
- Or manually create a
.envfile:
touch .envAdd the following (replace with your actual API URL):
EXPO_PUBLIC_API_URL=http://YOUR_LOCAL_IP:8080Note: For development on physical devices, use your machine's local IP address instead of localhost. See apps/expo/ENV_SETUP.md for detailed instructions.
Start Expo app:
npm start
# or
cd apps/expo && npm startAndroid:
npm run androidiOS:
npm run iosWeb:
npm run webLinkSmash/
├── apps/
│ └── expo/ # React Native mobile app
│ ├── components/ # React components
│ ├── screens/ # App screens
│ ├── services/ # App services (storage, metadata, etc.)
│ ├── types/ # TypeScript types
│ └── package.json
├── package.json # Root package.json with scripts
└── tsconfig.base.json # TypeScript base configuration
Production build (Android):
npm run build-localPreview build:
npm run build-local:previewDevelopment build:
npm run build-local:devnpm start- Start Expo appnpm run android- Run on Androidnpm run ios- Run on iOSnpm run web- Run on webnpm run prebuild- Generate native code for Exponpm run prebuild:clean- Clean prebuild
npm run setup:env- Interactive environment setupnpm run prebuild- Generate native codenpm run fix:manifest- Fix Android manifest
- React Native - Mobile framework
- Expo - Development platform
- TypeScript - Type safety
- React Navigation - Navigation
- AsyncStorage - Local storage
- AWS App Runner - Deployment (see
DEPLOYMENT.md)
- Check API URL: Ensure
EXPO_PUBLIC_API_URLis set correctly inapps/expo/.envif using an external API - Restart Expo: Always restart Expo after changing
.envfiles
- Clean prebuild: Run
npm run prebuild:cleanto regenerate native code - Clear cache: Clear Expo cache with
expo start -c - Reinstall dependencies: Delete
node_modulesand reinstall
iOS:
- Run
cd apps/expo/ios && pod installif CocoaPods dependencies are missing
Android:
- Ensure Android SDK is properly configured
- Check that
ANDROID_HOMEenvironment variable is set
- Create a feature branch
- Make your changes
- Test thoroughly on both iOS and Android
- Submit a pull request
MIT