A comprehensive cross-platform note-taking application built with React Native and Expo, featuring rich media support, cloud synchronization, and advanced storage management.
SuperNote is a modern, feature-rich note-taking application that allows users to create, manage, and synchronize notes across multiple platforms. The app supports text, audio recordings, images, and videos, making it a comprehensive solution for digital note-taking and content organization.
- Cross-Platform: Native iOS, Android, and Web support
- Rich Media: Text, audio, images, and video attachments
- Cloud Sync: Optional Supabase integration with offline-first approach
- Advanced Storage: Flexible storage location management
- Modern UI: Intuitive interface with gesture support and animations
- π Rich Text Notes: Create and edit notes with full text formatting
- ποΈ Audio Recording: Record and playback audio notes with professional controls
- π· Image Attachments: Capture photos or select from gallery
- π₯ Video Support: Record and attach videos to notes
- β Favorites System: Mark important notes for quick access
- π Search & Filter: Find notes quickly with advanced search capabilities
- π·οΈ Tagging System: Organize notes with custom tags
- π± Offline-First: Full functionality without internet connection
- βοΈ Cloud Synchronization: Optional sync with Supabase backend
- π Authentication: Secure user accounts with Supabase Auth
- π³ Subscription Management: Stripe integration for premium features
- π Storage Management: Custom storage locations and file organization
- π€ Import/Export: Backup and restore notes
- π¨ Modern UI: Smooth animations and gesture-based interactions
- iOS: Optimized for iOS 16+ with native file browser integration
- Android: Direct file manager access with Intent Launcher
- Web: Responsive design with limited file system access
- Node.js (v18 or higher)
- npm or yarn package manager
- Expo CLI (
npm install -g @expo/cli) - For iOS development: Xcode and iOS Simulator
- For Android development: Android Studio and Android Emulator
-
Clone the repository
git clone <repository-url> cd SuperNote
-
Install dependencies
npm install # or yarn install -
Environment Configuration (Optional) Create a
.envfile in the root directory for Supabase integration:EXPO_PUBLIC_SUPABASE_URL=your_supabase_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_key
-
Start the development server
npm run dev # or expo start -
Run on your preferred platform
- iOS: Press
iin the terminal or scan QR code with Expo Go - Android: Press
ain the terminal or scan QR code with Expo Go - Web: Press
win the terminal or visithttp://localhost:8081
- iOS: Press
If you want to use cloud synchronization and authentication:
-
Supabase Setup
- Create a Supabase project at supabase.com
- Run the migrations in the
supabase/migrationsfolder - Add your Supabase URL and anon key to the
.envfile
-
Stripe Setup (for premium features)
- Create a Stripe account at stripe.com
- Add your publishable key to the
.envfile
// Basic note creation
const newNote = {
title: "Meeting Notes",
content: "Discussion points...",
images: [],
audioRecordings: [],
videos: [],
isFavorite: false,
tags: ["work", "meeting"]
};
await createNote(newNote);// Start audio recording
const recording = new Audio.Recording();
await recording.prepareAsync(Audio.RECORDING_OPTIONS_PRESET_HIGH_QUALITY);
await recording.startAsync();
// Stop and save
await recording.stopAndUnloadAsync();
const uri = recording.getURI();// Search through notes
const results = searchNotes("meeting");
const favoriteNotes = getFavoriteNotes();
const recentNotes = getRecentNotes(5);SuperNote/
βββ app/ # Expo Router screens
β βββ (tabs)/ # Tab-based navigation
β β βββ index.tsx # Home/Dashboard screen
β β βββ create.tsx # Note creation screen
β β βββ notes.tsx # Notes listing screen
β β βββ settings.tsx # App settings
β β βββ storage.tsx # Storage management
β βββ auth/ # Authentication screens
β βββ payment/ # Payment success screen
β βββ _layout.tsx # Root layout with auth logic
β βββ note-detail.tsx # Note editing screen
βββ components/ # Reusable UI components
β βββ AudioPlayer.tsx # Audio playback component
β βββ AudioRecorder.tsx # Audio recording component
β βββ VideoPlayer.tsx # Video playback component
β βββ NoteCard.tsx # Note display card
β βββ SearchBar.tsx # Search functionality
β βββ MediaPicker.tsx # Image/video selection
βββ contexts/ # React Context providers
β βββ NotesContext.tsx # Global notes state management
βββ hooks/ # Custom React hooks
β βββ useStorageInfo.ts # Storage monitoring
β βββ useIOSOptimization.ts # iOS performance hooks
β βββ useNotesSync.ts # Sync state management
βββ services/ # Business logic layer
β βββ noteService.ts # Basic CRUD operations
β βββ enhancedNoteService.ts # Advanced storage features
β βββ authService.ts # Authentication logic
β βββ storageLocationService.ts # Storage management
β βββ syncService.ts # Cloud synchronization
β βββ stripeService.ts # Payment processing
βββ types/ # TypeScript definitions
β βββ note.ts # Note interface definitions
βββ supabase/ # Supabase configuration
β βββ functions/ # Edge functions
β βββ migrations/ # Database migrations
βββ assets/ # Images, fonts, etc.
- React Native: 0.79.4 - Cross-platform mobile development
- Expo SDK: 53.0.13 - Development platform and tools
- TypeScript: 5.8.3 - Type-safe JavaScript
- Expo Router: 5.1.1 - File-based routing system
- React Native Gesture Handler: 2.24.0 - Advanced gesture recognition
- React Native Reanimated: 3.17.4 - Smooth animations
- Lucide React Native: 0.475.0 - Modern icon library
- Expo Linear Gradient: 14.1.5 - UI enhancements
- AsyncStorage: Primary local storage solution
- Expo FileSystem: Custom storage locations and file management
- Expo SecureStore: Secure authentication data storage
- Supabase: Optional cloud backend for sync and auth
- Expo Camera: 16.1.9 - Photo capture functionality
- Expo Image Picker: 16.1.4 - Gallery access and image selection
- Expo AV: 15.1.6 - Audio recording and playback
- Expo Video: 2.2.2 - Video recording and playback
- Expo Document Picker: 13.1.6 - File selection capabilities
- Supabase: Authentication, database, and storage
- Stripe: Payment processing for premium features
- Expo Secure Store: Encrypted local storage
- ESLint: Code linting and quality assurance
- Prettier: Code formatting
- Jest: Testing framework
- TypeScript: Static type checking
We welcome contributions to SuperNote! Please follow these guidelines:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes following our coding standards
- Test your changes thoroughly
- Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Use meaningful variable and function names
- Add comments for complex logic
- Ensure all tests pass before submitting
- Follow the existing code style (Prettier configuration)
# Run tests
npm test
# Run linting
npm run lint
# Type checking
npx tsc --noEmit- Use the GitHub issue tracker
- Provide detailed reproduction steps
- Include device/platform information
- Add screenshots or videos when helpful
- Check existing issues first
- Provide clear use cases
- Explain the expected behavior
- Consider implementation complexity
This project is currently proprietary software. All rights reserved.
For licensing inquiries or commercial use, please contact the project maintainers.
- Issues: Use GitHub Issues for bug reports and feature requests
- Documentation: Check the
/docfolder for detailed implementation reports - Development: See
/memory-bankfor project context and patterns
# Development
npm run dev # Start development server
npm run dev:tunnel # Start with tunnel for external testing
npm run dev:clear # Start with cleared cache
# Building
npm run build:web # Build for web platform
# Maintenance
npm run clean # Clear Expo cache
npm run reset # Full reset (node_modules + cache)
npm run lint # Run ESLint
npm test # Run Jest testsnpm run build:web
# Deploy the generated files from dist/ folder- iOS App Store: Use EAS Build for production builds
- Google Play Store: Use EAS Build for Android APK/AAB
# Install EAS CLI
npm install -g @expo/eas-cli
# Configure EAS
eas build:configure
# Build for production
eas build --platform all- Offline-First: App works fully without internet connection
- Lazy Loading: Components and screens load on demand
- Memory Management: Proper cleanup of audio/video resources
- Storage Optimization: Efficient file management and caching
- iOS Optimizations: Special handling for iOS 16+ file system restrictions
- Encrypted Storage: Sensitive data stored securely
- Authentication: Optional Supabase Auth integration
- Data Privacy: Local-first approach with optional cloud sync
- File Security: Proper file permissions and access controls
Built with β€οΈ using React Native and Expo