A modern, real-time collaborative code sharing platform with Progressive Web App (PWA) capabilities. CodeMe enables developers to share, collaborate, and work together on code projects in real-time with offline support and installable app experience.
- Real-time Collaboration: Multiple users can edit code simultaneously
- Syntax Highlighting: Support for multiple programming languages
- File Management: Create, edit, and organize files in a collaborative environment
- Room-based Editing: Create dedicated rooms for different projects
- Offline Support: Work on your code even without internet connection
- Installable: Install CodeMe on your device for a native app experience
- Responsive Design: Works seamlessly on desktop, tablet, and mobile devices
- Push Notifications Ready: Infrastructure for future notification features
- Fast Loading: Optimized for quick startup and smooth performance
- Frontend: Next.js 15 with App Router
- Code Editor: CodeMirror 6 for powerful code viewing and editing
- Real-time Sharing: Yjs for CRDT-based collaborative sharing and editing
- Real-time Communication: WebSockets for instant code sharing
- PWA: Service Workers and Web App Manifest for offline sharing
- Styling: Tailwind CSS with custom components
- Code Editor Themes: CodeMirror Community Themes for beautiful code display
- State Management: Jotai for reactive state synchronization
- TypeScript: Full type safety throughout the application
- Node.js 18.0 or later
- npm, yarn, pnpm, or bun
-
Clone the repository
git clone <repository-url> cd codeme/client
-
Install dependencies
npm install # or yarn install # or pnpm install
-
Run the development server
npm run dev # or yarn dev # or pnpm dev
-
Open your browser Navigate to http://localhost:3000 to see the application.
- Open the application in your browser
- Click the install icon (📥) in the address bar
- Click "Install" to add CodeMe to your desktop
- Open the application in Chrome
- Tap the menu (⋮) and select "Add to Home screen"
- Tap "Add" to install the app
- Open the application in Safari
- Tap the share button (📤)
- Scroll down and tap "Add to Home Screen"
- Tap "Add" to install the app
Once installed as a PWA, CodeMe works offline:
- Offline Editing: Continue editing your files without internet
- Automatic Sync: Changes sync automatically when connection is restored
- Cached Resources: All necessary assets are cached for offline use
client/
├── public/ # Static assets and PWA files
│ ├── manifest.json # PWA manifest
│ ├── sw.js # Service worker
│ └── *.png # App icons
├── src/
│ ├── app/ # Next.js app router
│ │ ├── layout.tsx # Root layout with PWA meta tags
│ │ └── page.tsx # Main landing page
│ ├── components/ # React components
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utility functions
│ │ ├── sw-register.js # Service worker registration
│ │ └── utils.ts # Common utilities
│ ├── store/ # State management
│ └── types/ # TypeScript type definitions
├── next.config.ts # Next.js configuration
└── package.json # Dependencies and scripts
The PWA is configured through:
public/manifest.json- App manifest with icons and metadatapublic/sw.js- Service worker for offline functionalitysrc/app/layout.tsx- PWA meta tags and service worker registration
To customize the PWA:
- Update
manifest.jsonwith your app name, colors, and icons - Modify the service worker in
sw.jsfor custom caching strategies - Adjust PWA meta tags in
layout.tsx
npm run build
npm start- 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
This project is licensed under the MIT License.
- Next.js for the amazing React framework
- CodeMirror 6 for the powerful and extensible code viewing and editing
- Yjs for CRDT-based real-time sharing and collaboration framework
- CodeMirror Community Themes for beautiful code display themes
- Tailwind CSS for the utility-first CSS framework
- Jotai for atomic state synchronization
- The PWA community for inspiration and best practices
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue if needed
Made with ❤️ for collaborative coding
