{"id":47079536,"url":"https://github.com/espetro/hackbarna-project","last_synced_at":"2026-03-12T06:52:26.150Z","repository":{"id":332859610,"uuid":"1074205305","full_name":"espetro/hackbarna-project","owner":"espetro","description":"Our take on the Hackbarna 2025 Hackathon for building AI-first software products that scale","archived":false,"fork":false,"pushed_at":"2026-01-15T21:42:36.000Z","size":14990,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-16T00:49:40.314Z","etag":null,"topics":["hackathon"],"latest_commit_sha":null,"homepage":"https://hackbarna-project.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/espetro.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,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-11T10:45:38.000Z","updated_at":"2026-01-15T21:42:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/espetro/hackbarna-project","commit_stats":null,"previous_names":["espetro/hackbarna-project"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/espetro/hackbarna-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/espetro%2Fhackbarna-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/espetro%2Fhackbarna-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/espetro%2Fhackbarna-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/espetro%2Fhackbarna-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/espetro","download_url":"https://codeload.github.com/espetro/hackbarna-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/espetro%2Fhackbarna-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30417676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T06:40:58.731Z","status":"ssl_error","status_checked_at":"2026-03-12T06:40:40.296Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["hackathon"],"created_at":"2026-03-12T06:52:25.613Z","updated_at":"2026-03-12T06:52:26.142Z","avatar_url":"https://github.com/espetro.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TetrisTravel\n\nA Next.js web application for savvy business travelers to discover and book local, authentic experiences that fit their schedules.\n\n## Quickstart\n\n* [Check the project running on Vercel](https://hackbarna-project.vercel.app/)\n* If that doesn't work, [here's a short video demo](https://youtube.com/shorts/9kA_pUo8aA0?feature=share)\n\n## Features\n\n- **Onboarding Flow**: Three-step onboarding with full-screen video backgrounds\n- **Inspiration Page**: Visual gallery with search functionality for finding experiences\n- **Smart Recommendations**: Mock API integration with fallback data\n- **Interactive Map**: Mapbox GL integration showing experience locations\n- **Booking Flow**: Complete booking and confirmation process\n- **Responsive Design**: Mobile-first design using Tailwind CSS\n\n## Prerequisites\n\n- Node.js 18.x or higher\n- npm or yarn\n- Mapbox account (free tier available)\n\n## Getting Started\n\n### 1. Installation\n\n```bash\ncd tetristravel\nnpm install\n```\n\n### 2. Environment Configuration\n\nCreate a `.env.local` file in the root directory:\n\n```bash\ncp .env.local.example .env.local\n```\n\nEdit `.env.local` and add your Mapbox token:\n\n```env\nNEXT_PUBLIC_MAPBOX_KEY=your_mapbox_token_here\nNEXT_PUBLIC_RECOMMENDATIONS_API=https://your-api-endpoint.com/api/recommend\n```\n\n**Getting a Mapbox Token:**\n1. Sign up at [mapbox.com](https://account.mapbox.com/)\n2. Navigate to your [Access Tokens](https://account.mapbox.com/access-tokens/)\n3. Copy your default public token or create a new one\n4. Paste it in your `.env.local` file\n\n**Note**: The `NEXT_PUBLIC_RECOMMENDATIONS_API` is optional. If not set, the app will use mock data.\n\n### 3. Add Video Assets (Optional)\n\nPlace your onboarding videos in `public/videos/`:\n- `onboarding-1.mp4`\n- `onboarding-2.mp4`\n- `onboarding-3.mp4`\n\nSee `public/videos/README.md` for video requirements and free sources.\n\n### 4. Run Development Server\n\n```bash\nnpm run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) to view the application.\n\n## Project Structure\n\n```\ntetristravel/\n├── app/                        # Next.js App Router pages\n│   ├── onboarding/            # Onboarding flow (3 steps)\n│   ├── inspiration/           # Search and inspiration page\n│   ├── recommendations/       # Map view with experience cards\n│   ├── confirmation/          # Booking confirmation\n│   ├── api/                   # API routes\n│   │   └── recommendations/   # Mock recommendations endpoint\n│   ├── layout.tsx            # Root layout with providers\n│   └── globals.css           # Global styles\n├── components/                # Reusable React components\n│   ├── VideoBackground.tsx   # Video background component\n│   ├── MapView.tsx           # Mapbox integration\n│   └── RecommendationCard.tsx # Experience card component\n├── lib/                       # Utilities and shared code\n│   ├── types.ts              # TypeScript type definitions\n│   ├── mockData.ts           # Mock recommendation data\n│   └── context/              # React Context for state management\n│       └── AppContext.tsx    # Global app state\n├── public/                    # Static assets\n│   ├── videos/               # Onboarding videos\n│   └── images/               # Image assets\n└── package.json              # Dependencies and scripts\n```\n\n## Application Flow\n\n1. **Landing** (`/`) → Redirects to onboarding\n2. **Onboarding** (`/onboarding`) → 3-step carousel with video backgrounds\n3. **Inspiration** (`/inspiration`) → Image grid + search input\n4. **Recommendations** (`/recommendations`) → Map view with experience cards\n5. **Confirmation** (`/confirmation`) → Booking confirmation page\n\n## Key Technologies\n\n- **Next.js 15**: React framework with App Router\n- **TypeScript**: Type-safe development\n- **Tailwind CSS**: Utility-first styling\n- **Mapbox GL JS**: Interactive maps via react-map-gl\n- **React Context**: State management\n\n## API Integration\n\n### Mock API\n\nThe app includes a mock API endpoint at `/api/recommendations` that:\n- Accepts POST requests with a `query` field\n- Returns filtered recommendations based on keywords\n- Falls back to all recommendations if no matches\n\n### Real API Integration\n\nTo connect a real backend:\n\n1. Set `NEXT_PUBLIC_RECOMMENDATIONS_API` in `.env.local`\n2. Ensure your API accepts POST requests with this format:\n   ```json\n   {\n     \"query\": \"I have 3 hours in Paris...\"\n   }\n   ```\n3. Return an array of recommendations matching the `Recommendation` type in `lib/types.ts`\n\n## Development Scripts\n\n```bash\n# Run development server\nnpm run dev\n\n# Build for production\nnpm run build\n\n# Start production server\nnpm start\n\n# Run ESLint\nnpm run lint\n```\n\n## Customization\n\n### Adding More Experiences\n\nEdit `lib/mockData.ts` to add more recommendations:\n\n```typescript\n{\n  id: 7,\n  title: \"Your Experience\",\n  description: \"Description here\",\n  image: \"https://images.unsplash.com/...\",\n  location: { lat: 48.8566, lng: 2.3522 },\n  duration: \"2 hours\",\n  price: \"€35\"\n}\n```\n\n### Styling\n\n- Global styles: `app/globals.css`\n- Tailwind config: `tailwind.config.ts`\n- Component-level styles: Use Tailwind utility classes\n\n### Map Customization\n\nEdit `components/MapView.tsx`:\n- Change map style: Modify `mapStyle` prop\n- Adjust initial view: Change `viewState` initial values\n- Customize markers: Modify the SVG in the `Marker` component\n\n## Features Roadmap\n\nFuture enhancements could include:\n\n- [ ] User authentication\n- [ ] Real Google Calendar integration\n- [ ] Payment processing\n- [ ] User reviews and ratings\n- [ ] Saved experiences\n- [ ] Email confirmations\n- [ ] Multi-language support\n- [ ] Progressive Web App (PWA)\n\n## Troubleshooting\n\n### Map Not Displaying\n\n- Verify `NEXT_PUBLIC_MAPBOX_KEY` is set correctly\n- Check browser console for Mapbox-related errors\n- Ensure you're using a public token (not a secret token)\n\n### Videos Not Playing\n\n- Check video files are in `public/videos/`\n- Verify video format is MP4 (H.264 codec)\n- Some browsers block autoplay; videos should still work with user interaction\n\n### Build Errors\n\n```bash\n# Clear Next.js cache\nrm -rf .next\n\n# Reinstall dependencies\nrm -rf node_modules package-lock.json\nnpm install\n\n# Rebuild\nnpm run build\n```\n\n## Contributing\n\nThis is a prototype application. For production use:\n\n1. Add proper error handling\n2. Implement real authentication\n3. Add comprehensive testing\n4. Set up CI/CD pipeline\n5. Add monitoring and analytics\n6. Implement proper SEO\n\n## License\n\nISC\n\n## Support\n\nFor issues or questions, please create an issue in the GitHub repository or contact support@tetristravel.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fespetro%2Fhackbarna-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fespetro%2Fhackbarna-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fespetro%2Fhackbarna-project/lists"}