Wanderlust (World Map Tracker)
Это веб-приложение, позволяющее путешественникам отслеживать свои поездки и получать рекомендации, планы от ИИ на основе глубокого поиска.
-
Клонируйте репозиторий:
git clone https://github.com/azekowka/nfactorial.git
-
Переименуйте .env.local.example на .env.local, и вставьте API keys:
#------------------------------------------------------------------------------ # AI Providers - Gemini & Groq GOOGLE_GENERATIVE_AI_API_KEY= # https://aistudio.google.com/u/2/apikey GROQ_API_KEY= # https://console.groq.com/keys #------------------------------------------------------------------------------ # Search Providers - Tavily & Serper SEARCH_API=tavily # options: tavily, searxng, exa TAVILY_API_KEY= # SERPER_API_KEY= # Enable video search capability. https://serper.dev/api-key #------------------------------------------------------------------------------ # Storage Provider - Upstash Redis UPSTASH_REDIS_REST_URL="https://something.upstash.io" # Upstash Redis REST URL UPSTASH_REDIS_REST_TOKEN="" # Upstash Redis REST Token ENABLE_SAVE_CHAT_HISTORY=true # enable chat history storage NEXT_PUBLIC_ENABLE_SHARE=true # enable sharing of chat conversations #------------------------------------------------------------------------------ # Auth Provider - Clerk NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= CLERK_SECRET_KEY= #------------------------------------------------------------------------------ # Map Provider - MapBox NEXT_PUBLIC_MAPBOX_TOKEN= # https://console.mapbox.com/account/access-tokens
-
Установите зависимости:
npm i
-
Запустите проект:
npm run dev
-
Откройте проект локально:
http://localhost:3000
Веб-приложение хостится на Vercel и доступно по следующей ссылке
Ссылка на техническое задание (ТЗ)
ю https://nfactorial-group.notion.site/world-map-tracker
User попадая на мое веб-приложение онбордится на лаконичном лэндинге, который сделан с помощью UI компонентов Aceternity. Авторизируется в систему через ClerkAuth и редиректится в дэшборд, иначе ему будет отказано в доступе. В дэшборде его встречают карточки с features (одна из них с Тайлер Дерденом):
- Track Visited Places: Upstash и Redis позволяют сохранять Visited/Want to visit страны, выделяет их разными цветами и позволяет скачать SVG/PNG созданной карты.
- Туризм LLM путеводитель: Встречает пользователя красивым UI, предлагает выбрать модель из предложенных семейсто Gemini и Groq, использовать Advanced Search (Tavily) с картинками и цитатами источников, сохраняет историю чатов, позволяет скопировать чат и поделиться ссылкой на чат.
- Animate Travel Map: Поиск стран по ISO коду, отображение хочу/посетил стран на карте от MapBox, выбор emoji самолета, машины, человека которые динамично перемещаются по заданным странам, высчитать пройденную дистанцию, возможность ускорить и замедлить анимацию.
- Начну с деплоймента, совершал я его в последний оставшийся день и словил type, eslint, dependencies mismatch errors. От чего в попыхах исправлял деплой, убрал eslint и вручную пулл реквестами из deployment branch фиксил package.json & package-lock.json. В качестве компромисса, я бы предпочел npm run build-ить проект на начальных стадиях, чтобы решать эти проблемы попутно, а не тогда когда все готово =).
- Я не использовал предложеные темплейты из visitedplaces.com, вместо этого создавал карты и визуализацию через MapBox, DataMaps, Three.js, D3.js, Turf.js, с не менее понятной документацией у каждой.
- Из LLM-ок имплементировал Google AI Studio, Groq Console (Meta Llamas), поскольку остальные LLM провайдеры взымают некоторые суммы, но при необходимости можно их добавить, все через AI SDK.
- В чек-листе дополнительно сделать верстку респонсивной для мобильных устройств, добавить Vercel/PostHog Analytics {игнорируйте последние коммиты связанные с имплементацией =)}, привязать домен и ssl сертификат от партнеров Github Education Pack, улучшить SEO-оптимизацию в поисковых engines.
- Groq ограничивает запросы, как видно в тексте ошибки: Request too large for model
meta-llama/llama-4-maverick-17b-128e-instruct
in organizationorg_01jndhnschebht2mk2kchy7g6p
service tieron_demand
on tokens per minute (TPM): Limit 6000, Requested 8543, please reduce your message size and try again. Need more tokens? Upgrade to Dev Tier today at https://console.groq.com/settings/billing - Глубокий поиск с помощью Tavily перестал работать на продакшне, но отлично работает локально (на видео продемонстрировал)
- Frontend: React, Next.js, TypeScript, TailwindCSS, PostCSS, Prettier, Aceternity UI, shadcn/ui
- Backend и БД: Next.js API Routes, Upstash, Redis
- ИИ провайдеры: Gemini (2.0 Flash, 2.0 Flask Thinking Exp., Gemini 2.5 Pro Exp.), Groq (Llama 4 Maverick 17B)
- Карты и Визуализация: MapBox (https://docs.mapbox.com/mapbox-gl-js/guides), DataMaps (https://datamaps.github.io/), Turf.js, D3.js, Three.js
- Auth: Clerk