{"id":29291628,"url":"https://github.com/pieter-rees/presgen","last_synced_at":"2025-07-06T08:09:02.701Z","repository":{"id":301703056,"uuid":"1009195516","full_name":"Pieter-Rees/presgen","owner":"Pieter-Rees","description":"Generate a present for anybody!","archived":false,"fork":false,"pushed_at":"2025-06-28T09:28:54.000Z","size":91,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-28T10:23:16.472Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/Pieter-Rees.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-26T18:22:45.000Z","updated_at":"2025-06-28T09:28:57.000Z","dependencies_parsed_at":"2025-06-28T10:23:19.746Z","dependency_job_id":"e4b1df82-92cc-4417-8835-9dc554434afb","html_url":"https://github.com/Pieter-Rees/presgen","commit_stats":null,"previous_names":["pieter-rees/presgen"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Pieter-Rees/presgen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pieter-Rees%2Fpresgen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pieter-Rees%2Fpresgen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pieter-Rees%2Fpresgen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pieter-Rees%2Fpresgen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pieter-Rees","download_url":"https://codeload.github.com/Pieter-Rees/presgen/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pieter-Rees%2Fpresgen/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263868246,"owners_count":23522320,"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-07-06T08:09:00.778Z","updated_at":"2025-07-06T08:09:02.693Z","avatar_url":"https://github.com/Pieter-Rees.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gift Generator\n\nAn AI-powered gift suggestion application that helps you find the perfect presents for your friends, family, and colleagues.\n\n## Features\n\n- 🤖 AI-powered gift suggestions using Claude 3.5 Sonnet\n- 🎯 Personalized recommendations based on recipient details\n- 💰 Budget-aware suggestions\n- 🔄 Regenerate suggestions for more options\n- 💝 Save favorite gifts to your personal collection\n- 📱 Responsive design for all devices\n- ⚡ Fast and modern UI with Tailwind CSS\n\n## Tech Stack\n\n- **Framework**: Next.js 15 with App Router\n- **Language**: TypeScript\n- **Styling**: Tailwind CSS v4\n- **AI**: OpenRouter API (Claude 3.5 Sonnet)\n- **Deployment**: Standalone output for easy deployment\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js 18+ \n- npm or yarn\n- OpenRouter API key\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone \u003cyour-repo-url\u003e\ncd presgen\n```\n\n2. Install dependencies:\n```bash\nnpm install\n```\n\n3. Create environment file:\n```bash\ncp .env.example .env.local\n```\n\n4. Add your OpenRouter API key to `.env.local`:\n```env\nNEXT_PUBLIC_OPENROUTER_API_KEY=your_openrouter_api_key_here\nNEXT_PUBLIC_SITE_URL=https://gift.pieterrees.nl\n```\n\n5. Run the development server:\n```bash\nnpm run dev\n```\n\n6. Open [http://localhost:3000](http://localhost:3000) in your browser.\n\n## Deployment to gift.pieterrees.nl\n\n### Option 1: Vercel (Recommended)\n\n1. Push your code to GitHub\n2. Connect your repository to Vercel\n3. Add environment variables in Vercel dashboard:\n   - `NEXT_PUBLIC_OPENROUTER_API_KEY`\n   - `NEXT_PUBLIC_SITE_URL`\n4. Configure custom domain `gift.pieterrees.nl` in Vercel\n5. Deploy!\n\n### Option 2: Self-hosted\n\n1. Build the application:\n```bash\nnpm run build\n```\n\n2. The standalone build will be in `.next/standalone/`\n\n3. Deploy the standalone folder to your server\n\n4. Set up environment variables on your server\n\n5. Configure your web server (nginx/Apache) to serve the Next.js app\n\n### Environment Variables\n\n| Variable | Description | Required |\n|----------|-------------|----------|\n| `NEXT_PUBLIC_OPENROUTER_API_KEY` | Your OpenRouter API key | Yes |\n| `NEXT_PUBLIC_SITE_URL` | Your site URL | No |\n\n## API Configuration\n\nThe app uses OpenRouter API to access Claude 3.5 Sonnet for generating gift suggestions. To get an API key:\n\n1. Visit [OpenRouter](https://openrouter.ai/)\n2. Sign up for an account\n3. Generate an API key\n4. Add it to your environment variables\n\n## Features\n\n### Form Inputs\n- Recipient name\n- Relationship type\n- Age range\n- Interests (multiple selection)\n- Budget range\n- Occasion\n- Additional information\n\n### AI Suggestions\n- 6 personalized gift suggestions\n- Price ranges within budget\n- Category classification\n- Reasoning for each suggestion\n- Regenerate functionality for variety\n- Save individual gifts to your collection\n\n### Gift Collection\n- Save favorite gifts with one click\n- View all saved gifts in a dedicated section\n- Filter saved gifts by category\n- Sort by date saved, name, or price\n- Remove gifts from your collection\n- Persistent storage using localStorage\n\n### UI/UX\n- Modern gradient design\n- Responsive layout\n- Loading states\n- Error handling\n- Accessible form elements\n- Navigation between generator and saved gifts\n\n## Development\n\n### Available Scripts\n\n- `npm run dev` - Start development server\n- `npm run build` - Build for production\n- `npm run start` - Start production server\n- `npm run lint` - Run ESLint\n\n### Project Structure\n\n```\nsrc/\n├── app/                 # Next.js App Router\n│   ├── globals.css     # Global styles\n│   ├── layout.tsx      # Root layout\n│   └── page.tsx        # Home page\n├── components/         # React components\n│   ├── GiftForm.tsx    # Gift form component\n│   ├── GiftSuggestions.tsx # Results component\n│   ├── SavedGifts.tsx  # Saved gifts collection\n│   └── Header.tsx      # Header component\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Test thoroughly\n5. Submit a pull request\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Support\n\nFor support, please open an issue on GitHub or contact the maintainer.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpieter-rees%2Fpresgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpieter-rees%2Fpresgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpieter-rees%2Fpresgen/lists"}