Fujimod
브라우저에서 카메라 펌웨어를 시험하고 Fujimod SD 부팅 파일을 만든다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Plataforma de descubrimiento de lugares en Cuba con inteligencia artificial.
La Verde ayuda a residentes y viajeros a encontrar los mejores lugares en Cuba usando lenguaje natural. Describe lo que buscas y la IA encuentra los lugares perfectos para ti.
| Capa | Tecnología |
|---|---|
| Framework | Next.js 15 (App Router) |
| Lenguaje | TypeScript (strict) |
| Estilos | Tailwind CSS 3.4 + shadcn/ui |
| Base de datos | PostgreSQL (Neon) + Drizzle ORM |
| Autenticación | Clerk |
| Mapas | Leaflet + React-Leaflet (OpenStreetMap) |
| IA | OpenAI gpt-4o-mini + pgvector |
| Storage | Cloudflare R2 |
| Deploy | Vercel + Neon |
src/
├── app/ # Next.js App Router pages
│ ├── (auth)/ # Auth routes (login, register)
│ ├── (main)/ # App routes (home, place, business)
│ ├── api/ # API routes (search, places, ai, auth, upload)
│ ├── layout.tsx # Root layout con fonts + providers
│ ├── page.tsx # Landing page
│ └── globals.css # Design tokens + Tailwind base
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── layout/ # Header, Footer, BottomSheet
│ ├── map/ # MapView, MapMarker, MapControls
│ ├── search/ # AISearch, SearchSuggestions, SearchResults
│ ├── place/ # PlaceCard, PlaceDetail, PhotoCarousel, etc.
│ ├── business/ # PanelShell, DashboardStats, FormSection, etc.
│ ├── landing/ # Hero, HowItWorks, CTASection
│ └── onboarding/ # OnboardingShell, PreferenceChip, LocationPicker
├── config/
│ └── site.ts # Site config + AI config
├── hooks/ # Custom React hooks
├── lib/
│ ├── ai/ # OpenAI integration, embeddings, NL parser
│ ├── db/
│ │ ├── schema/ # Drizzle schema definitions
│ │ ├── migrations/ # Auto-generated migrations
│ │ └── index.ts # DB client
│ ├── storage/ # Cloudflare R2 client
│ ├── auth.ts # Clerk auth helpers
│ ├── constants.ts # Categories, cities, currencies, moods
│ └── utils.ts # cn(), formatters, slugify, generateId
├── providers/ # React context providers (ThemeProvider)
├── types/ # TypeScript types + Zod schemas
└── middleware.ts # Clerk middleware
git clone <repo-url> la-verde
cd la-verde
npm install
cp .env.example .env.local
Edita .env.local con tus credenciales:
| Variable | Descripción |
|---|---|
DATABASE_URL | Connection string de Neon PostgreSQL |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | Clerk publishable key |
CLERK_SECRET_KEY | Clerk secret key |
OPENAI_API_KEY | OpenAI API key |
AWS_ENDPOINT_URL_S3 | Endpoint de la rama, en Branch → Storage de la consola de Neon |
AWS_ACCESS_KEY_ID | token_id de una credencial de Neon con storage:read y storage:write |
AWS_SECRET_ACCESS_KEY | s3_secret_access_key, que solo se devuelve al crear la credencial |
AWS_REGION | Región real de la rama. auto no vale |
S3_BUCKET_NAME | Bucket de las fotos. Por defecto la-verde-images |
El bucket tiene que estar en public_read. Se cambia en la consola o en la API
de Neon, no por S3: PutBucketAcl devuelve 501 Not Implemented. Con un bucket
privado, las fotos se suben pero la ficha pública no las puede leer.
# Generar migraciones desde el schema
npm run db:generate
# Aplicar migraciones a Neon
npm run db:migrate
# (Opcional) Hacer push directo del schema
npm run db:push
# Abrir Drizzle Studio para inspeccionar datos
npm run db:studio
npm run db:seed
npm run dev
# → http://localhost:3000
| Tabla | Propósito |
|---|---|
users | Usuarios sincronizados con Clerk |
categories | Categorías de lugares (Cafetería, Restaurante, etc.) |
places | Lugares con coordenadas, horarios, monedas, ambiente |
place_images | Fotos de cada lugar (una cover + galería) |
place_hours | Horarios por día de la semana |
place_menu_items | Items de menú con precio y moneda |
reviews | Reseñas de usuarios (rating 1-5) |
saved_places | Lugares guardados/favoritos por usuario |
business_owners | Relación dueño/manager → lugar |
user_search_history | Historial de búsquedas del usuario |
npm run dev # Desarrollo
npm run build # Build producción
npm run lint # ESLint
npm run typecheck # TypeScript check
npm run db:generate # Generar migraciones Drizzle
npm run db:migrate # Aplicar migraciones
npm run db:push # Push schema directo
npm run db:studio # Drizzle Studio UI
npm run db:seed # Sembrar datos de prueba
(auth), (main)@/ alias apunta a src/components/ui/, componentes de negocio en components/*/lv-*lib/db/schema/noUncheckedIndexedAccesslib/ai/, streaming via ai SDK