{"id":15723330,"url":"https://github.com/ECarry/photography-website","last_synced_at":"2025-05-07T21:33:48.882Z","repository":{"id":208461378,"uuid":"696129843","full_name":"ECarry/photography-website-nextjs14","owner":"ECarry","description":"An open-source Photo Blog📸🌟 built using Next.js 14, Drizzle, postgresql, Auth.js V5, Shadcn/ui and Hono.js.","archived":false,"fork":false,"pushed_at":"2024-11-11T16:10:00.000Z","size":48693,"stargazers_count":77,"open_issues_count":0,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-14T17:04:42.259Z","etag":null,"topics":["authjs","drizzle-orm","honojs","nextjs14","postgresql","shadcn-ui"],"latest_commit_sha":null,"homepage":"https://p.ecarry.me","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/ECarry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-25T06:35:00.000Z","updated_at":"2024-11-11T16:10:04.000Z","dependencies_parsed_at":"2023-11-27T10:25:54.040Z","dependency_job_id":"feca5af1-3534-4e2f-87ce-dc0ef91fd4fd","html_url":"https://github.com/ECarry/photography-website-nextjs14","commit_stats":null,"previous_names":["ecarry/photography-website-nextjs14-full-stack","ecarry/photography-website-nextjs14"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ECarry%2Fphotography-website-nextjs14","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ECarry%2Fphotography-website-nextjs14/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ECarry%2Fphotography-website-nextjs14/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ECarry%2Fphotography-website-nextjs14/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ECarry","download_url":"https://codeload.github.com/ECarry/photography-website-nextjs14/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224660004,"owners_count":17348501,"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":["authjs","drizzle-orm","honojs","nextjs14","postgresql","shadcn-ui"],"created_at":"2024-10-03T22:11:13.854Z","updated_at":"2025-05-07T21:33:48.871Z","avatar_url":"https://github.com/ECarry.png","language":"TypeScript","funding_links":[],"categories":["Boilerplates \u0026 Starters"],"sub_categories":[],"readme":"# Photography Blog 📸\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/ECarry/photography-website)\n\nA modern, open-source photography blog platform built with the latest web technologies. Share your photography journey with style and efficiency.\n\n## ✨ Features\n\n- 📱 Responsive design for all devices\n- 🖼️ Automatic EXIF data extraction from photos\n- 🔐 Secure authentication with Better Auth\n- ☁️ Cloud storage with Cloudflare R2\n- 🎨 Beautiful UI with Shadcn/ui components\n- 🚀 Lightning-fast performance\n- 📍 Location-based photo organization\n- 🌐 SEO optimized\n- 🎯 API powered by tRPC\n\n## 📸 Screenshots\n\n\u003cimg src=\"https://github.com/ECarry/photography-website/blob/main/screen/home.png?raw=true\" alt=\"page\"\u003e\n\u003cimg src=\"https://github.com/ECarry/photography-website/blob/main/screen/travel.png?raw=true\" alt=\"page\"\u003e\n\u003cimg src=\"https://github.com/ECarry/photography-website/blob/main/screen/discover.png?raw=true\" alt=\"page\"\u003e\n\u003cimg src=\"https://github.com/ECarry/photography-website/blob/main/screen/about.png?raw=true\" alt=\"page\"\u003e\n\u003cimg src=\"https://github.com/ECarry/photography-website/blob/main/screen/photograph.png?raw=true\" alt=\"page\"\u003e\n\n## 🌈 Support Theme\n\n- 🌈 Dark\n- 🌈 Light\n\n\u003cimg src=\"https://github.com/ECarry/photography-website/blob/main/screen/theme.png?raw=true\" alt=\"page\"\u003e\n\n## 🛠️ Tech Stack\n\n- **Framework:** [Next.js 15](https://nextjs.org/)\n- **Database:** [Neon](https://neon.tech/) (Serverless Postgres)\n- **ORM:** [Drizzle](https://orm.drizzle.team/)\n- **Authentication:** [Better Auth](https://better-auth.com/)\n- **UI Components:** [Shadcn/ui](https://ui.shadcn.com/)\n- **API Layer:** [tRPC](https://trpc.io/)\n- **Storage:** [Cloudflare R2](https://www.cloudflare.com/products/r2/)\n- **Deployment:** [Vercel](https://vercel.com)\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js 20+\n- bun (recommended) or npm\n- Neon Database\n- Cloudflare R2 Account\n\n### Environment Variables\n\nCreate a `.env.local` file in the root directory:\n\n```bash\n# Database\nDATABASE_URL=your_neon_database_url\n\n# Auth\nBETTER_AUTH_SECRET=\nBETTER_AUTH_URL=http://localhost:3000 #Base URL of your app\n\nNEXT_PUBLIC_APP_URL='http://localhost:3000'\n\n# Cloudflare R2\nCLOUDFLARE_R2_ENDPOINT=\nCLOUDFLARE_R2_ACCESS_KEY_ID=\nCLOUDFLARE_R2_SECRET_ACCESS_KEY=\nCLOUDFLARE_R2_BUCKET_NAME=\nCLOUDFLARE_R2_PUBLIC_URL=\n\n# Mapbox\nNEXT_PUBLIC_MAPBOX_ACCESS_TOKEN=\n```\n\nReplace `your-domain.com` with your actual domain name. This is required for Cloudflare Image Optimization to work correctly.\n\n### Installation\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/your-username/photography-website.git\ncd photography-website\n```\n\n2. Install dependencies:\n\n```bash\nbun install\n```\n\n3. Set up the database:\n\n```bash\nbun db:push\n```\n\n4. Start the development server:\n\n```bash\nbun run dev\n```\n\n### Initial User Registration\n\nWhen you first deploy the application, you'll need to create an admin user. You can do this by visiting:\n\n```\nhttp://localhost:3000/sign-up\n```\n\nNote: After the first admin user is created, the `/sign-up` route will be disabled for security purposes. Any subsequent attempts to access the sign-up page will automatically redirect to the sign-in page (`/sign-in`).\n\n### Custom Domain Configuration\n\nBefore deploying, you need to update the custom domain in `image-loader.ts`:\n\n```typescript\n// image-loader.ts\nreturn `https://your-domain.com/cdn-cgi/image/${paramsString}/${normalizeSrc(\n  src\n)}`;\n```\n\nVisit `http://localhost:3000` to see your application.\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🤝 Contributing\n\nContributions are welcome! Feel free to open issues and pull requests.\n\n## 💖 Support\n\nIf you find this project helpful, please give it a ⭐️ on GitHub!\n\n## ⭐️ Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ECarry/photography-website\u0026type=Date)](https://star-history.com/#ECarry/photography-website\u0026Date)\n\n## 📝 Changelog\n\n- 2025-02-13: tRPC instead of Hono.js\n- 2025-01-12: Better Auth instead of Next Auth\n\n## 🏃‍♂️ Todo\n\n- [x] Home page with tRPC\n- [x] Discover page with tRPC\n- [x] Dashboard photos \u0026 photo id page with tRPC\n- [ ] Blog page with tRPC\n- [x] Travel page with tRPC\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FECarry%2Fphotography-website","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FECarry%2Fphotography-website","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FECarry%2Fphotography-website/lists"}