{"id":16433290,"url":"https://github.com/vikyw89/pinterestclone","last_synced_at":"2026-04-11T01:03:00.090Z","repository":{"id":160330678,"uuid":"622227468","full_name":"vikyw89/pinterestClone","owner":"vikyw89","description":"A pinterest clone with a twist","archived":false,"fork":false,"pushed_at":"2023-07-26T05:53:32.000Z","size":1637,"stargazers_count":3,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2025-02-10T01:44:53.076Z","etag":null,"topics":["css3","github-actions","html5","javascript","nextjs","postgresql","react","supabase","tailwindcss"],"latest_commit_sha":null,"homepage":"https://pinterest-clone-lemon.vercel.app/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vikyw89.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-04-01T13:54:17.000Z","updated_at":"2023-12-01T06:11:44.000Z","dependencies_parsed_at":"2024-12-17T19:42:41.340Z","dependency_job_id":"028503c7-86c0-4c7c-9e4a-56effa53f9cb","html_url":"https://github.com/vikyw89/pinterestClone","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikyw89%2FpinterestClone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikyw89%2FpinterestClone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikyw89%2FpinterestClone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vikyw89%2FpinterestClone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vikyw89","download_url":"https://codeload.github.com/vikyw89/pinterestClone/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247208371,"owners_count":20901570,"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":["css3","github-actions","html5","javascript","nextjs","postgresql","react","supabase","tailwindcss"],"created_at":"2024-10-11T08:45:41.006Z","updated_at":"2026-04-11T01:03:00.079Z","avatar_url":"https://github.com/vikyw89.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pinterest Clone - A Pinterest-inspired Image Sharing Platform\n\nA full-featured Pinterest clone built with Next.js, Supabase, and TailwindCSS. Share, save, and discover visual content in a beautiful masonry-style grid layout.\n\n![Pinterest Clone Screenshot](https://github.com/vikyw89/pinterestClone/assets/112059651/5732c5ca-4a9d-4e86-9c8a-ab3309f2c9ca)\n\n## Live Demo\n\n- **Alpha:** https://vikyw89.github.io/pinterestClone/\n- **Beta:** https://pinterest-clone-lemon.vercel.app/\n\n## Lighthouse Score\n\n![Lighthouse Score](https://github.com/vikyw89/pinterestClone/assets/112059651/49057d9f-3883-4d4f-9034-30f3adf7b7cd)\n\n## Features\n\n### Core Functionality\n- **Infinite Scroll Feed** - Masonry-style grid displaying pins with automatic infinite loading\n- **User Authentication** - Sign up, sign in, and sign out via Supabase Auth\n- **Pin Creation** - Upload and share images with titles, descriptions, and links\n- **Pin Details** - View full pin information with comments and creator details\n- **Save to Boards** - Save pins to organized boards\n- **User Profiles** - View user profiles with their boards and created pins\n- **Theme Switching** - Multiple visual themes with dark mode support\n\n### Technical Highlights\n- **SWR Data Fetching** - Efficient data fetching with stale-while-revalidate pattern\n- **Real-time Subscriptions** - Live auth state updates via Supabase subscriptions\n- **Image Optimization** - Cloudinary-powered image storage with WebP conversion and blur placeholders\n- **Responsive Design** - Mobile-first approach with TailwindCSS and daisyUI\n- **CI/CD Pipeline** - GitHub Actions for automated linting and deployment\n\n## Tech Stack\n\n| Category | Technology |\n|----------|------------|\n| **Frontend Framework** | [Next.js 13](https://nextjs.org/) (SSG) |\n| **UI Library** | [React 18](https://react.dev/) |\n| **Styling** | [TailwindCSS](https://tailwindcss.com/) + [daisyUI](https://daisyui.com/) |\n| **Backend/Auth** | [Supabase](https://supabase.com/) (BAAS) |\n| **Image Storage** | [Cloudinary](https://cloudinary.com/) |\n| **Data Fetching** | [SWR](https://swr.vercel.app/) + [swr-sync-state](https://www.npmjs.com/package/swr-sync-state) |\n| **Icons** | [MUI Icons](https://mui.com/material-ui/material-icons/) |\n| **Image Compression** | [browser-image-compression](https://www.npmjs.com/package/browser-image-compression) |\n| **Deployment** | Vercel (frontend) + Firebase (legacy) |\n\n## Database Schema\n\n```\nusers ──────────\u003c boards ──────────\u003c boards_pins \u003e──────── pins\n    │                    │                    │\n    │                    │                    │\n    └── users_followers ─┘    pins_comments ──┘\n                │\n                └── boards_comments\n```\n\n### Tables\n- **users** - User profiles and metadata\n- **boards** - User-created pin collections\n- **pins** - Image pins with titles, descriptions, and links\n- **boards_pins** - Many-to-many relationship between pins and boards\n- **pins_comments** - Comments on pins\n- **boards_comments** - Comments on boards\n- **boards_members** - Board collaboration\n- **users_followers** - User follow relationships\n\n## Page Routing\n\n| Route | Description |\n|-------|-------------|\n| `/` | Home feed with all pins (infinite scroll) |\n| `/pin/[pin_uuid]` | Pin detail page with comments |\n| `/profile` | User profile page |\n| `/profile/[board_uuid]` | Board page with pins |\n| `/createPin` | Create new pin page |\n\n## Installation\n\n### Prerequisites\n- Node.js 16+ \n- npm or yarn\n- Supabase account\n- Cloudinary account\n\n### Setup\n\n1. **Clone the repository**\n```bash\ngit clone https://github.com/vikyw89/pinterestClone.git\ncd pinterestClone\n```\n\n2. **Install dependencies**\n```bash\ncd client\nnpm install\n```\n\n3. **Configure environment variables**\n```bash\ncp .env.example .env.local\n```\n\nEdit `.env.local` with your credentials:\n```env\nNEXT_PUBLIC_SUPABASE_PROJECT_URL=your_supabase_project_url\nNEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key\nNEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name\n```\n\n4. **Initialize Supabase database**\nRun the SQL schema in `client/supabase.sql` in your Supabase SQL editor.\n\n5. **Start development server**\n```bash\nnpm run dev\n```\n\n6. **Open browser**\nNavigate to http://localhost:3000\n\n## Project Structure\n\n```\npinterestClone/\n├── client/                    # Next.js frontend\n│   ├── src/\n│   │   ├── components/       # React components\n│   │   │   ├── boards/       # Board-related components\n│   │   │   ├── feed/         # Feed and pin card components\n│   │   │   ├── pin/          # Pin detail components\n│   │   │   ├── profile/      # Profile components\n│   │   │   └── signIn/       # Authentication components\n│   │   ├── common/           # Shared components\n│   │   │   ├── layout/       # Header, footer, page layout\n│   │   │   ├── loading/      # Loading states\n│   │   │   └── notif/        # Notifications\n│   │   ├── lib/              # Utilities\n│   │   │   ├── hooks/        # Custom React hooks\n│   │   │   ├── supabase/      # Supabase client\n│   │   │   ├── cloudinary/    # Cloudinary utilities\n│   │   │   └── store/         # State management\n│   │   ├── pages/            # Next.js pages\n│   │   └── styles/           # Global styles\n│   └── supabase.sql          # Database schema\n└── initSupabase.js            # Supabase initialization script\n```\n\n## Available Scripts\n\n```bash\n# Development\nnpm run dev          # Start development server\n\n# Production\nnpm run build        # Build for production\nnpm run start        # Start production server\nnpm run export        # Static export\n\n# Code Quality\nnpm run lint          # Run ESLint\nnpm run lint:fix      # Fix ESLint issues\n```\n\n## Contributing\n\nThis project was created as part of [The Odin Project](https://www.theodinproject.com/) curriculum. Contributions welcome!\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nThis project is available under the MIT License.\n\n## Acknowledgments\n\n- Design inspired by [Pinterest](https://pinterest.com/)\n- Built as a learning project for [The Odin Project](https://www.theodinproject.com/)\n- Image storage powered by [Cloudinary](https://cloudinary.com/)\n- Backend services by [Supabase](https://supabase.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikyw89%2Fpinterestclone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvikyw89%2Fpinterestclone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikyw89%2Fpinterestclone/lists"}