{"id":25951065,"url":"https://github.com/pingsubhajit/halycon","last_synced_at":"2025-03-04T13:31:03.726Z","repository":{"id":278945625,"uuid":"933210009","full_name":"pingSubhajit/halycon","owner":"pingSubhajit","description":"Halycron is a highly secure, end-to-end encrypted photo storage solution. Store, organize, and manage your photos in your personal or private S3 bucket with zero-knowledge encryption.","archived":false,"fork":false,"pushed_at":"2025-02-22T18:17:33.000Z","size":9938,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T18:29:33.422Z","etag":null,"topics":["aws","drizzle-orm","encrypted-photo-storage","end-to-end-encrypted-gallery","expo","nativewind","nextjs15","postgresql","react-native","s3","secure-photo-vault","shadcn-ui","tailwindcss","turborepo","upstash-redis"],"latest_commit_sha":null,"homepage":"https://halycron-web.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pingSubhajit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security-requirements.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-15T12:23:01.000Z","updated_at":"2025-02-22T18:17:36.000Z","dependencies_parsed_at":"2025-02-22T18:41:34.082Z","dependency_job_id":null,"html_url":"https://github.com/pingSubhajit/halycon","commit_stats":null,"previous_names":["pingsubhajit/halycon"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pingSubhajit%2Fhalycon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pingSubhajit%2Fhalycon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pingSubhajit%2Fhalycon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pingSubhajit%2Fhalycon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pingSubhajit","download_url":"https://codeload.github.com/pingSubhajit/halycon/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241855315,"owners_count":20031592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","drizzle-orm","encrypted-photo-storage","end-to-end-encrypted-gallery","expo","nativewind","nextjs15","postgresql","react-native","s3","secure-photo-vault","shadcn-ui","tailwindcss","turborepo","upstash-redis"],"created_at":"2025-03-04T13:30:42.255Z","updated_at":"2025-03-04T13:31:03.720Z","avatar_url":"https://github.com/pingSubhajit.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Halycon\n\nA highly secure, private photo vault service that allows users to store and manage their photos with end-to-end encryption. Similar to Google Photos in functionality but with a primary focus on security and privacy. Users can store photos in their own S3 bucket or use the provided storage solution.\n\n## 🌟 Features\n\n- **Secure Photo Storage**: End-to-end encryption for all photos with client-side encryption\n- **Multi-Platform Support**: \n  - Web application built with Next.js 15\n  - Mobile application using Expo v50 and React Native\n- **Advanced Security**:\n  - Multi-factor authentication\n  - Zero-knowledge architecture\n  - AES-256-GCM encryption for files\n  - RSA-4096 for key exchange\n- **Photo Management**:\n  - Upload and batch upload support\n  - Photo tagging and organization\n  - Album creation and management\n  - Secure thumbnail generation\n- **User Control**:\n  - Custom S3 bucket support\n  - Encrypted metadata storage\n  - Secure sharing capabilities\n- **Modern Development**:\n  - Full TypeScript support\n  - Built with Bun and Turborepo\n  - Comprehensive security measures\n\n## 📦 Project Structure\n\n```\nhalycon/\n├── apps/\n│   ├── web/          # Next.js 15 web application\n│   └── mobile/       # Expo v50 React Native application\n├── packages/\n│   ├── ui/           # Shared UI components (shadcn/ui)\n│   ├── eslint-config/# Shared ESLint configuration\n│   └── typescript-config/ # Shared TypeScript configuration\n├── docs/             # Project documentation\n```\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js \u003e= 22\n- Bun \u003e= 1.1.42\n- PostgreSQL 15\n- Redis 7.x\n- AWS Account (for S3 and KMS)\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/yourusername/halycon.git\ncd halycon\n```\n\n2. Install dependencies:\n```bash\nbun install\n```\n\n3. Set up environment variables:\n```bash\ncp ./apps/web/.env.example ./apps/web/.env\n```\n\n4. Set up the database:\n```bash\nbunx drizzle-kit migrate\n```\n\n5. Start development servers:\n```bash\nbun turbo tun dev\n```\n\n### Environment Variables\n\nCreate a `.env` files in the apps directories with the help of the respective .env.example:\n\n## 🛠️ Development\n\n### Tech Stack\n\n#### Frontend (Web)\n- Next.js 15\n- TypeScript 5.x\n- TanStack Query v5\n- Zustand v4\n- Tailwind CSS\n- shadcn/ui\n\n#### Mobile\n- Expo v53\n- React Native v0.78\n- Expo Router\n- TanStack Query v5\n- Nativewind v4\n\n#### Backend\n- Next.js 15 API Routes\n- PostgreSQL 15 with Drizzle ORM\n- Upstash Redis\n- AWS S3\n\n### Available Scripts\n\n- `bun dev` - Start all applications in development mode\n- `bun build` - Build all applications and packages\n- `bun lint` - Run ESLint across the project\n- `bun lint:fix` - Run ESLint across the project with auto-fixing\n- `bun format` - Run Prettier across the project\n\n### Security Considerations\n\n- All API endpoints except authentication require JWT tokens\n- Files are encrypted using AES-256-GCM before upload\n- Each user has a unique master key for encryption\n- MFA is required for all accounts\n- Rate limiting is enabled on all endpoints\n- Regular security audits are performed\n\n## 🤝 Contributing\n\nContributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) first.\n\n1. Fork the project\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n### Development Guidelines\n\n- Maintain 90%+ test coverage\n- Follow security best practices\n- Update documentation for significant changes\n- Add appropriate logging for security events\n\n## 📝 License\n\nThis project is open source and available under the [MIT License](LICENSE).\n\n## 🙏 Acknowledgments\n\n- [Turborepo](https://turbo.build/repo)\n- [shadcn/ui](https://ui.shadcn.com/)\n- [Next.js](https://nextjs.org/)\n- [React Native](https://reactnative.dev/)\n- [Expo](https://expo.dev/)\n- [BetterAuth](https://better-auth.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpingsubhajit%2Fhalycon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpingsubhajit%2Fhalycon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpingsubhajit%2Fhalycon/lists"}