- 📱 Responsive design for all devices
- 🖼️ Automatic EXIF data extraction from photos
- 🔐 Secure authentication with Better Auth
- ☁️ Cloud storage with Cloudflare R2
- 🎨 Beautiful UI with Shadcn/ui components
- 🚀 Lightning-fast performance
- 📍 Location-based photo organization
- 🌐 SEO optimized
- 🎯 API powered by tRPC
- Framework: Next.js 15
- Database: Neon (Serverless Postgres)
- ORM: Drizzle
- Authentication: Better Auth
- UI Components: Shadcn/ui
- API Layer: tRPC
- Storage: Cloudflare R2
- Deployment: Vercel
- Node.js 20+
- bun (recommended) or npm
- Neon Database
- Cloudflare R2 Account
- Mapbox Account
Create a .env.local file in the root directory:
# Database
DATABASE_URL=your_database_url
# Auth
# You can generate a random secret using `openssl rand -base64 32`
BETTER_AUTH_SECRET=
BETTER_AUTH_URL=http://localhost:3000 #Base URL of your app
NEXT_PUBLIC_APP_URL='http://localhost:3000'
# Cloudflare R2
CLOUDFLARE_R2_ENDPOINT=
CLOUDFLARE_R2_ACCESS_KEY_ID=
CLOUDFLARE_R2_SECRET_ACCESS_KEY=
CLOUDFLARE_R2_BUCKET_NAME=
CLOUDFLARE_R2_PUBLIC_URL=
# Mapbox
NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN=Replace your-domain.com with your actual domain name. This is required for Cloudflare Image Optimization to work correctly.
- Clone the repository:
git clone git@github.com:anarbabashov/juliagart.com.git
cd juliagart.com- Install dependencies:
bun install- Set up the database:
bun db:push- Start the development server:
bun run devVisit http://localhost:3000 to see your application.
- Home page with tRPC
- Discover page with tRPC
- Dashboard photos & photo id page with tRPC
- Blog page with tRPC
- Travel page with tRPC