{"id":26498700,"url":"https://github.com/ramgoel/tour-play","last_synced_at":"2026-04-12T15:08:42.658Z","repository":{"id":280026407,"uuid":"940761004","full_name":"RamGoel/tour-play","owner":"RamGoel","description":"A full-stack travel places guessing game","archived":false,"fork":false,"pushed_at":"2025-03-01T15:22:09.000Z","size":657,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T14:46:59.515Z","etag":null,"topics":["mongodb","nextjs","prisma"],"latest_commit_sha":null,"homepage":"https://tour-play.vercel.app","language":"TypeScript","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/RamGoel.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}},"created_at":"2025-02-28T18:36:37.000Z","updated_at":"2025-03-01T15:22:13.000Z","dependencies_parsed_at":"2025-02-28T23:04:04.985Z","dependency_job_id":"39f3c2b1-9222-4569-a36c-3a4a3699a59e","html_url":"https://github.com/RamGoel/tour-play","commit_stats":null,"previous_names":["ramgoel/tour-play"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RamGoel/tour-play","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamGoel%2Ftour-play","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamGoel%2Ftour-play/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamGoel%2Ftour-play/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamGoel%2Ftour-play/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RamGoel","download_url":"https://codeload.github.com/RamGoel/tour-play/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RamGoel%2Ftour-play/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018206,"owners_count":26086303,"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","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["mongodb","nextjs","prisma"],"created_at":"2025-03-20T14:38:58.158Z","updated_at":"2025-10-14T07:07:56.785Z","avatar_url":"https://github.com/RamGoel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Globetrotter Challenge\n\nWelcome to **Globetrotter Challenge**, a full-stack web app built with Next.js where players guess famous destinations from cryptic clues, unlock fun facts, and challenge friends! This project showcases engaging UI/UX, effective AI utilization, and extensibility.\n\nLive Demo: [Hosted Link](https://tour-play.vercel.app/) \u003cbr/\u003e\nGitHub Repo: [github.com/RamGoel/tour-play](https://github.com/RamGoel/tour-play) \u003cbr/\u003e\nLoom Walkthrough: [Video Link](#) _(Replace with your Loom URL)_\n\n## Features\n\n- Displays 1 random clue as a quote for a destination for first 5s \u0026 gives 2 point if correct answer.\n- If 5s up, then shows second clue, and gives 1 point if correct answer.\n- Offers 4 answer options (1 correct, 3 random).\n- Provides funky feedback:\n  - Correct: Confetti animation + fun fact + success sound\n  - Incorrect: Sad face animation + fun fact + failure sound\n- Tracks user score (correct/incorrect).\n- Includes a \"Next Destination\" button for continuous play.\n- Allows users to enter a unique username.\n- Generates a shareable invite link with a dynamic image (via `html-to-image`).\n- Shows invitees the inviter’s score on a funky invite page.\n- Ensures responsive design with Tailwind CSS.\n- User scores are persisted into Database.\n\n## Tech Stack\n\n- **Framework**: [Next.js](https://nextjs.org/) (App Router)\n- **Styling**: [Tailwind CSS](https://tailwindcss.com/)\n- **State Management**: [Zustand](https://zustand-demo.pmnd.rs/)\n- **Animations**: [Framer Motion](https://www.framer.com/motion/)\n- **Confetti**: [react-confetti](https://www.npmjs.com/package/react-confetti)\n- **Image Generation**: [html-to-image](https://www.npmjs.com/package/html-to-image)\n- **Backend**: Next.js API Routes\n- **Font**: [DM_Sans (Google Fonts)](https://fonts.google.com/specimen/DM_Sans)\n- **Database**: [MongoDB](https://www.mongodb.com/)\n- **Code Style**: [Prettier](https://prettier.io/)\n\n## Technical Decisions\n\n- **Authentication** - Cookie Based (User Id stored in cookies)\n- **Database** - MongoDB (I had more experience with it)\n- **Why Username Before Use** - So score can be tracked\n\n## Architecture\n\n```\nglobetrotter-challenge/\n├── app/\n│   ├── (private)/\n│   │   ├── (game)/\n│   │   │   └── game.tsx          # Main game page\n│   │   ├── layout.tsx        # Layout for (private) page\n│   ├── (public)/\n│   │   ├── auth/\n│   │   │   └── page.tsx          # Username input page\n│   │   ├── invite/\n│   │   │   └── page.tsx          # Invite landing page\n│   │   ├── page.tsx              # Landing page (SSR)\n│   │   ├── favicon.ico           # App favicon\n│   │   ├── global.css            # Global styles\n│   │   └── layout.tsx            # Root layout\n├── components/\n│   ├── AnswerOptions.tsx         # Answer buttons\n│   ├── ChallengeModal.tsx        # \"Challenge a Friend\" modal\n│   ├── CluesList.tsx             # Clues display\n│   ├── Confetti.tsx              # Confetti animation\n│   ├── Header.tsx                # Navbar\n│   ├── Loader.tsx                # Animated loader\n│   ├── QuizFeedback.tsx          # Feedback after answering\n│   ├── SadFace.tsx               # Sad face animation\n│   ├── StatsHeader.tsx           # Score display\n├── lib/\n│   ├── axios.ts                  # API client\n│   ├── data.ts                   # Static dataset\n│   └── store.ts                  # Zustand store\n├── public/\n│   └── media/                    # Static assets\n│   └── sounds/                   # Audio files\n├── utils/\n│   ├── constants.ts              # App constants\n│   ├── helpers.ts                # Utility functions\n│   └── types.ts                  # TypeScript types\n├── prisma/\n│   └── schema.prisma             # Prisma schema (MongoDB)\n│   └── client.ts                 # Prisma Client\n└── README.md                     # Project documentation\n```\n\n- **Pages**:\n\n  - `/` (SSR): Landing page with teaser clue.\n  - `/auth`: Username entry (client-side).\n  - `/game`: Core gameplay (client-side).\n  - `/invite`: Invite landing (client-side).\n\n- **API Routes**:\n  - `/auth`: GET/CREATE/UPDATE user info\n  - `/get-quiz`: Get Random quiz data\n\n## Setup Instructions\n\n1. **Clone the Repo**:\n\n   ```bash\n   git clone https://github.com/your-username/globetrotter-challenge.git\n   cd globetrotter-challenge\n   ```\n\n2. **Install Dependencies**:\n\n   ```bash\n   npm install\n   ```\n\n3. **Run Locally**:\n\n   ```bash\n   npm run dev\n   ```\n\n   Open `http://localhost:3000` in your browser.\n\n4. **Build for Production**:\n   ```bash\n   npm run build\n   npm start\n   ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framgoel%2Ftour-play","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framgoel%2Ftour-play","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framgoel%2Ftour-play/lists"}