{"id":29007717,"url":"https://github.com/triptigithub/memer","last_synced_at":"2025-06-25T13:38:22.691Z","repository":{"id":299661724,"uuid":"1003749395","full_name":"Triptigithub/Memer","owner":"Triptigithub","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-17T16:20:02.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-17T17:32:56.165Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://memer-inky.vercel.app/","language":"JavaScript","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/Triptigithub.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,"zenodo":null}},"created_at":"2025-06-17T15:55:17.000Z","updated_at":"2025-06-17T16:20:05.000Z","dependencies_parsed_at":"2025-06-17T17:36:15.912Z","dependency_job_id":"acd33e38-c55e-4ec7-91fb-9737333c219d","html_url":"https://github.com/Triptigithub/Memer","commit_stats":null,"previous_names":["triptigithub/memer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Triptigithub/Memer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Triptigithub%2FMemer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Triptigithub%2FMemer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Triptigithub%2FMemer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Triptigithub%2FMemer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Triptigithub","download_url":"https://codeload.github.com/Triptigithub/Memer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Triptigithub%2FMemer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261883862,"owners_count":23224572,"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":[],"created_at":"2025-06-25T13:38:21.585Z","updated_at":"2025-06-25T13:38:22.641Z","avatar_url":"https://github.com/Triptigithub.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MemeHustle\n\nA cutting-edge meme marketplace where users can create memes, place bids, upvote favorites, and enjoy AI-generated captions and vibes. Built with a React + Vite frontend (styled with Tailwind CSS) and a Node.js + Express backend, powered by Supabase (PostgreSQL) and Socket.IO for real-time updates. AI caption and vibe features are stubbed with fallback logic, ready for full API integration.\n\n\u003c!-- Badges (example) --\u003e\n[![Node.js](https://img.shields.io/badge/Node.js-16%2B-43853D?logo=node.js\u0026logoColor=white)](https://nodejs.org/)\n[![React](https://img.shields.io/badge/React-18.2.0-61DAFB?logo=react\u0026logoColor=white)](https://reactjs.org/)\n[![Vite](https://img.shields.io/badge/Vite-4.x-646CFF?logo=vite\u0026logoColor=white)](https://vitejs.dev/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-3.x-38B2AC?logo=tailwind-css\u0026logoColor=white)](https://tailwindcss.com/)\n[![Supabase](https://img.shields.io/badge/Supabase-PostgreSQL-3ECF8E?logo=supabase\u0026logoColor=white)](https://supabase.com/)\n[![Socket.IO](https://img.shields.io/badge/Socket.IO-realtime-010101?logo=socket.io\u0026logoColor=white)](https://socket.io/)\n\n---\n\n## ✨ Features\n\n- **📝 Meme Creation**:Easily add memes by submitting a title, image URL, and tags.\n- **⚡ Real-Time Bidding**: Place live bids on memes with instant updates showing the highest bid.\n- **👍 Upvote/Downvote \u0026 Leaderboard**: Upvote or downvote memes and explore the top-ranked submissions Generate clever captions and vibe descriptions (currently stubbed, replaceable with real AI API).Generate witty captions and “vibe” descriptions (stubbed with fallback; replace with real API if available).\n- **🔍 Search \u0026 Grid View**: Search memes by title or tags with a clean, always-grid layout.\n- **🔒 Mock Authentication**: User sessions identified by random UUIDs stored in localStorage.\n- **🎨 Modern UI**: Responsive design featuring clean cards, a search bar, and smooth loading states.\n---\n\n## 🛠️ Tech Stack\n\n- **Frontend**: React, Vite, Tailwind CSS, lucide-react icons, Axios, Socket.IO client.\n- **Backend**: Node.js, Express, Socket.IO, @supabase/supabase-js, Axios (for AI stubs), dotenv.\n- **Database**: Supabase (PostgreSQL). Tables: `memes`, `bids`; RPC for upvote increments.\n- **Deployment**: \n  - Backend: Render.\n  - Frontend: Vercel.\n- **AI Integration**: Stubbed calls with random fallback; replace in `backend/src/services/aiService.js` if you have a key/spec.\n\n---\n\n## 🔧 Prerequisites\n\n- Node.js (v16+), npm\n- Supabase project (hosted) with URL and Service Role Key\n- (Optional) AI API key for real integration; otherwise stub/fallback is used\n\n---\n\n## Environment Variables\n\n### Backend (`backend/.env`)\n\nCopy `backend/.env.example` and fill:\n```env\nSUPABASE_URL=https://\u003cyour-project-ref\u003e.supabase.co\nSUPABASE_SERVICE_KEY=\u003cyour-service-role-key\u003e\nGOOGLE_GEMINI_API_KEY=\u003coptional; leave blank for fallback\u003e\nPORT=5000\n```\n### Frontend (frontend/.env)\n```env\nVITE_API_URL=https://\u003cyour-backend-domain\u003e/api\nVITE_SOCKET_URL=https://\u003cyour-backend-domain\u003e\n```\n## Supabase Schema\nIn Supabase Dashboard → SQL Editor, run:\n\n1. **Enable UUID extension** (if needed):\n```sql\ncreate extension if not exists \"uuid-ossp\";\n```\n2. **Create memes table**:\n```sql\ncreate table if not exists memes (\n  id uuid primary key default uuid_generate_v4(),\n  title text not null,\n  image_url text not null,\n  tags text[] not null,\n  upvotes integer not null default 0,\n  owner_id text not null,\n  caption text,\n  vibe text,\n  created_at timestamp with time zone default now()\n);\ncreate index if not exists idx_memes_tags on memes using gin (tags);\n```\n3. **Create bids table**:\n```sql\ncreate table if not exists bids (\n  id uuid primary key default uuid_generate_v4(),\n  meme_id uuid references memes(id) on delete cascade,\n  user_id text not null,\n  credits integer not null,\n  created_at timestamp with time zone default now()\n);\ncreate index if not exists idx_bids_meme_id on bids(meme_id);\n```\n4. **Create RPC to increment upvotes**:\n```sql\ncreate or replace function increment_upvotes(p_meme_id uuid, p_delta int)\nreturns void language plpgsql as $$\nbegin\n  update memes\n    set upvotes = coalesce(upvotes, 0) + p_delta\n    where id = p_meme_id;\nend;\n$$;\n```\nConfirm tables and function in Table Editor.\n\n##  Local Development\n### Backend\n```bash\ncd backend\nnpm install\ncp .env.example .env\n# Edit .env with your Supabase details\nnpm run dev\n```\n### Frontend\n```bash\ncd frontend\nnpm install\n# (Optional) create .env with VITE_API_URL/VITE_SOCKET_URL if needed\nnpm run dev\n```\n## Deployment\n### Backend on Render\n- Root Directory:\n```bash\nbackend\n```\n- Build Command:\n```bash\nnpm install\n```\n\n- Start Command:\n```bash\n  npm start\n  ```\n\n- Set environment variables in Render: SUPABASE_URL, SUPABASE_SERVICE_KEY, GOOGLE_GEMINI_API_KEY, etc.\n\n- Ensure CORS allows your frontend domain.\n\n## Frontend on Vercel\n- Connect repo to Vercel.\n\n- Build Command:\n```bash\nnpm run build\n```\n\n- Output Directory:\n  ```bash\n  dist\n  ```\n\n- Set environment variables:\n```env\nVITE_API_URL=https://\u003cbackend-url\u003e/api\n\nVITE_SOCKET_URL=https://\u003cbackend-url\u003e\n```\n- Deploy and verify live site.\n\n## Usage\n- **Home**: Browse memes in a responsive grid.\n\n- **Search**: Filter by title or tags.\n\n- **Create**: Click “Create”, fill title, image URL, tags.\n\n- **Bid**: Enter bid amount on a meme card; highest bid updates live.\n\n- **Vote**: Upvote or Downvote; leaderboard reflects votes.\n\n- **AI Buttons**: “Caption” / “Vibe” show fallback or real API result if configured.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftriptigithub%2Fmemer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftriptigithub%2Fmemer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftriptigithub%2Fmemer/lists"}