A web application that helps dog owners find and share dog-friendly locations including restaurants, parks, stores, and more.
- πΊοΈ Interactive Map - Explore dog-friendly locations on Google Maps
- β Reviews & Ratings - Read and write reviews for locations
- πΈ Photo Sharing - Upload and view photos of locations
- β€οΈ Favorites - Save your favorite dog-friendly spots
- π Search & Filter - Find locations by type, name, or area
- π€ User Profiles - Track your contributions and favorites
- π Authentication - Secure sign-in with Clerk
- Nuxt 3 - Vue 3 framework with SSR
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first CSS framework
- Pinia - State management
- Google Maps API - Interactive maps
- Nuxt Server API - API routes
- PostgreSQL - Database with PostGIS
- Prisma - Type-safe ORM
- Clerk - Authentication
- Cloudinary - Image hosting and optimization
- Vercel - Hosting (production)
- Docker - Local development
- Node.js 18+
- Docker & Docker Compose
- npm or yarn
Create a .env file in the root directory:
# Database
DATABASE_URL="postgresql://postgres:password@localhost:5432/onlypaws?schema=public"
# Clerk Authentication
CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
# Google Maps
GOOGLE_MAPS_API_KEY=your_google_maps_api_key
GOOGLE_MAPS_DEFAULT_LAT=40.7128
GOOGLE_MAPS_DEFAULT_LNG=-74.0060
GOOGLE_MAPS_DEFAULT_ZOOM=13
# Cloudinary
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
CLOUDINARY_UPLOAD_PRESET=your_upload_presetnpm installdocker-compose up -dnpm run prisma:generate
npm run prisma:migratenpm run prisma:seednpm run devThe application will be available at http://localhost:3000
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run lint:fix- Fix ESLint errorsnpm run format- Format code with Prettiernpm run typecheck- Run TypeScript compiler checknpm run test:unit- Run unit testsnpm run test:e2e- Run end-to-end testsnpm run prisma:generate- Generate Prisma clientnpm run prisma:migrate- Run database migrationsnpm run prisma:studio- Open Prisma Studio
only-paws/
βββ src/
β βββ app/
β β βββ components/ # Vue components
β β βββ composables/ # Reusable logic
β β βββ layouts/ # Page layouts
β β βββ pages/ # File-based routes
β β βββ stores/ # Pinia stores
β β βββ types/ # TypeScript types
β β βββ utils/ # Utility functions
β βββ server/
β βββ api/ # API endpoints
β βββ utils/ # Server utilities
βββ prisma/
β βββ schema.prisma # Database schema
β βββ seed.ts # Database seed data
βββ tests/ # Test files
βββ docker-compose.yml # Docker configuration
βββ nuxt.config.ts # Nuxt configuration
GET /api/locations- List all locationsPOST /api/locations- Create a location (auth required)GET /api/locations/:id- Get location detailsDELETE /api/locations/:id- Delete location (auth required)
POST /api/reviews- Create a review (auth required)DELETE /api/reviews/:id- Delete review (auth required)
POST /api/photos- Create a photo (auth required)DELETE /api/photos/:id- Delete photo (auth required)
GET /api/favorites- Get user favorites (auth required)POST /api/favorites- Add favorite (auth required)DELETE /api/favorites/:locationId- Remove favorite (auth required)
POST /api/users/sync- Sync Clerk user with databaseGET /api/users/profile- Get user profile (auth required)
- Push your code to GitHub
- Import project in Vercel
- Add environment variables
- Deploy
- Create PostgreSQL database on Render
- Update
DATABASE_URLin Vercel - Run migrations:
npm run prisma:migrate:deploy
Please follow the coding guidelines in AGENTS.md when contributing to this project.
MIT License - see LICENSE file for details