8000
Skip to content

Latest commit

Β 

History

142 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🐾 Adopt Don't Shop - Pet Adoption Community

A modern, open-source pet adoption platform and community hub connecting shelters, rescues, and potential pet parents. Built with Next.js for SEO-first rendering and deployed on Cloudflare Pages.

🌐 Live Site: adoptdontshop.xyz

Build Status TypeScript License Next.js Cloudflare Pages Live Demo


✨ Features

For Pet Adopters

  • πŸ” Advanced Search & Filtering β€” Find pets by type, breed, age, location, and more
  • πŸ“± Responsive Design β€” Seamless experience across desktop, tablet, and mobile
  • πŸ–ΌοΈ Pet Profiles β€” Detailed information including photos, medical history, and personality
  • πŸ’¬ Direct Contact β€” Connect directly with shelters and caregivers

For Shelters & Caregivers

  • πŸ“ Easy Pet Listing β€” Simple form to list pets for adoption
  • πŸ”’ Secure β€” Supabase Auth with Row-Level Security

Community & Engagement

  • πŸ’¬ Community Forums β€” Discuss tips, share success stories, and ask for advice
  • πŸ›οΈ Pet Essentials Store β€” Browse recommended products and essential starter kits
  • πŸ“¬ Direct Messaging β€” Connect directly with shelters, caregivers, and fellow adopters
  • πŸ›‘οΈ Admin Safety Monitoring β€” Platform communications are monitored to ensure a safe environment

Technical Highlights

  • πŸš€ SSR + SEO β€” Server-rendered pages with dynamic Open Graph meta tags per pet
  • ⚑ Fast Performance β€” Next.js App Router with static generation and ISR
  • 🎨 Modern UI β€” Playful design with Framer Motion animations and shadcn/ui
  • πŸ” Secure Backend β€” Supabase with Row-Level Security (RLS)
  • βœ… Type-Safe β€” Full TypeScript with strict mode

πŸ› οΈ Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
Language TypeScript 5 (strict)
Styling Tailwind CSS 3
UI Components shadcn/ui (Radix UI)
State TanStack Query (React Query)
Animations Framer Motion
Database Supabase (PostgreSQL)
Auth Supabase Auth
Storage Supabase Storage
Deployment Cloudflare Pages via @opennextjs/cloudflare
Linting ESLint 9 + Prettier

πŸš€ Getting Started

Prerequisites

Installation

A424
# Clone the repository
git clone https://github.com/mouhurtik/adoptdontshop.git
cd adoptdontshop-website

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your Supabase credentials

# Start development server
npm run dev

Open http://localhost:3000 to see the app.


πŸ” Environment Setup

Create a .env.local file with your Supabase credentials:

NEXT_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-here

Security: The anon key is a publishable key β€” safe to use client-side. Your data is protected by Row-Level Security (RLS) policies in Supabase.


πŸ’» Development

Available Scripts

npm run dev          # Start dev server (localhost:3000)
npm run build        # Production build
npm run start        # Start production server
npm run lint         # Run ESLint
npm run type-check   # TypeScript check

# Cloudflare Pages
npm run cf:build     # Build for Cloudflare Workers
npm run cf:dev       # Local Cloudflare dev
npm run cf:deploy    # Build + deploy to Cloudflare

πŸ“ Project Structure

adoptdontshop-website/
β”œβ”€β”€ app/                    # Next.js App Router (route pages)
β”‚   β”œβ”€β”€ layout.tsx          # Root layout (Navbar + Footer + Providers)
β”‚   β”œβ”€β”€ page.tsx            # Home page
β”‚   β”œβ”€β”€ globals.css         # Global styles
β”‚   β”œβ”€β”€ providers.tsx       # Client providers (QueryClient, Auth, etc.)
β”‚   β”œβ”€β”€ not-found.tsx       # Custom 404 page
β”‚   β”œβ”€β”€ browse/page.tsx
β”‚   β”œβ”€β”€ pet/[slug]/page.tsx # Dynamic pet page (SSR + generateMetadata)
β”‚   β”œβ”€β”€ about/page.tsx
β”‚   β”œβ”€β”€ pet-essentials/page.tsx
β”‚   β”œβ”€β”€ success-stories/page.tsx
β”‚   β”œβ”€β”€ sponsors/page.tsx
β”‚   β”œβ”€β”€ list-pet/page.tsx
β”‚   β”œβ”€β”€ terms/page.tsx
β”‚   └── privacy-policy/page.tsx
β”œβ”€β”€ views/                  # Page-level view components
β”œβ”€β”€ components/             # Reusable UI components
β”‚   β”œβ”€β”€ ui/                 # shadcn/ui primitives
β”‚   β”œβ”€β”€ home/               # Home page sections
β”‚   β”œβ”€β”€ browse/             # Browse components
β”‚   β”œβ”€β”€ pet-details/        # Pet detail sections
β”‚   β”œβ”€β”€ pet-listing/        # Listing form sections
β”‚   β”œβ”€β”€ Navbar.tsx
β”‚   └── Footer.tsx
β”œβ”€β”€ hooks/                  # Custom React hooks
β”œβ”€β”€ contexts/               # React Context providers
β”œβ”€β”€ lib/                    # Utilities
β”‚   β”œβ”€β”€ supabase/client.ts  # Browser Supabase client
β”‚   β”œβ”€β”€ supabase/server.ts  # Server Supabase client (SSR)
β”‚   └── imageLoader.ts      # Cloudflare image loader
β”œβ”€β”€ types/                  # TypeScript type definitions
β”œβ”€β”€ constants/              # App constants
β”œβ”€β”€ utils/                  # Utility functions
β”œβ”€β”€ public/                 # Static assets
β”œβ”€β”€ next.config.mjs         # Next.js configuration
β”œβ”€β”€ tailwind.config.ts      # Tailwind CSS configuration
β”œβ”€β”€ wrangler.toml           # Cloudflare Workers config
└── open-next.config.ts     # OpenNext adapter config

πŸ—οΈ Deployment

Cloudflare Pages

The app is deployed to Cloudflare Pages via @opennextjs/cloudflare:

  1. Connect your GitHub repo to Cloudflare Pages
  2. Configure build settings:
    • Build command: npx opennextjs-cloudflare build
    • Build output: .open-next/assets
  3. Add environment variables:
    • NEXT_PUBLIC_SUPABASE_URL
    • NEXT_PUBLIC_SUPABASE_ANON_KEY
    • NODE_VERSION = 20
  4. Add compatibility flag: nodejs_compat

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Ensure TypeScript check passes (npm run type-check)
  5. Commit (git commit -m 'feat: add amazing feature')
  6. Push (git push origin feature/amazing-feature)
  7. Open a Pull Request

πŸ“„ License

AGPL-3.0 β€” see LICENSE for details.


Made with ❀️ for pets looking for their forever homes 🐾

Report Bug Β· Request Feature

About

A modern, open-source pet adoption platform and community hub connecting shelters, rescues, and potential pet parents.

Topics

Resources

Code of conduct

Contributing

Stars

33 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0