尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Sigue actores, actrices o directores y lleva registro de qué películas de su filmografía ya viste. MVP enfocado en una sola tarea: completar la filmografía de la gente que te interesa.查看完整 README ↗
Sigue actores, actrices o directores y lleva registro de qué películas de su filmografía ya viste. MVP enfocado en una sola tarea: completar la filmografía de la gente que te interesa.
server) — routing, layouts, SSROMDB_API_KEY; sin ella simplemente no se muestran)PUBLIC_SENTRY_DSN, ver .env.example)/search)/search/wrapped con tu resumen del año, "on this day" en el perfil de cada persona — todo togglable en src/config/engagement.jsonlocalStorage)localStorage para los proxies de persona/película (src/lib/movieData.ts) — evita re-pedir por red en cada carga de página lo que ya se pidió antes (ver design.md)aria-live en cambios de estado, auditoría axe-core automáticapnpm install
pnpm dev
Copia .env.example a .env y completa:
TMDB_API_KEY — TMDB v4 read access token (server-only)PUBLIC_FIREBASE_* — config del proyecto Firebase (cliente, público por diseño)OMDB_API_KEY — opcional, server-only (ratings externos en el detalle de película; sin ella esa sección simplemente no aparece)| Comando | Acción |
|---|---|
pnpm dev | Servidor local en localhost:4321 |
pnpm build | Build de producción a ./dist/ |
pnpm astro check | Typecheck |
pnpm lint | ESLint |
pnpm format:check | Prettier |
pnpm test | Vitest (lógica pura) |
pnpm test:rules | Tests de firestore.rules contra el Firebase Emulator (necesita Java) |
pnpm test:e2e | Playwright: flujo core buscar → seguir → marcar vista (necesita Java) |
CI (GitHub Actions) corre las primeras cinco cosas de arriba en el job ci, y pnpm test:rules/pnpm test:e2e cada uno en su propio job (firestore-rules, e2e), en cada push/PR a main. Pre-commit (Husky + lint-staged) hace eslint --fix + prettier --write sobre lo staged. Hay además dos workflows semanales/manuales: Lighthouse (performance) y axe-core (accesibilidad), ambos informativos contra producción.
src/
├── components/
│ ├── auth/ # LoginButton, UserMenu (incluye export de datos)
│ ├── theme/ # ThemeToggle (dark mode)
│ ├── search/ # HeaderSearch (dropdown), SearchTabs (página /search)
│ ├── movies/ # MovieSearch, MovieResultRow, MovieWatchlistButton
│ ├── connections/ # ConnectionsPage
│ ├── onboarding/ # OnboardingCarousel (una sola vez, localStorage)
│ ├── wrapped/ # WrappedStats (página /wrapped)
│ ├── people/ # PersonSearch, PersonHeader, PersonInfo, PersonPhotoGallery, FollowButton
│ ├── filmography/ # Filmography, MovieItem, MovieDetailsDialog, WatchlistPage,
│ │ # Dashboard, FollowedPeopleHero (GSAP)
│ └── ui/ # shadcn/ui
├── lib/
│ ├── firebase/ # client, auth, firestore (incluye exportUserData, badges)
│ ├── tmdb/ # client, people, movies, image, genres (server-only salvo image.ts/genres.ts)
│ ├── omdb.ts # ratings externos (IMDb/RT/Metacritic), nunca rompe si falla
│ ├── movieData.ts # fetchPersonData/fetchMovieDetails — wrapper cacheado de /api/person
│ │ # y /api/movie, reusar en vez de fetch() a mano (ver design.md)
│ ├── clientCache.ts # cache genérico con TTL sobre localStorage, usa movieData.ts
│ ├── a11y.ts # announce() — región aria-live compartida
│ ├── api.ts # helpers de respuesta JSON + rate limiting para /api/*
│ ├── rateLimit.ts # limitador en memoria por IP
│ ├── download.ts # descarga de JSON en el navegador
│ └── recentSearches.ts # localStorage helper (client-only)
├── config/
│ └── engagement.json # toggles de badges/nudges/wrapped/on-this-day
├── middleware.ts # headers de seguridad (CSP, etc.) en toda respuesta
├── pages/
│ ├── api/ # proxy endpoints a TMDB (search-person, search-movie, person/[id],
│ │ # person/[id]/images, movie/[id]) — cacheados y rate-limited
│ ├── person/[id].astro
│ ├── search.astro
│ ├── filmographies.astro
│ ├── watchlist.astro
│ ├── connections.astro
│ └── wrapped.astro
└── types/
public/
├── manifest.webmanifest # PWA
├── sw.js # service worker (hand-written, sin Workbox)
└── pwa-*.png, favicon.ico # íconos generados desde pwa-source-icon.svg
Modelo de datos en Firestore, reglas de seguridad, y el porqué de cada decisión no obvia (CSP, PWA, rate limiting, gotchas de deploy): ver firestore.rules y design.md. Ideas pendientes para llevar el proyecto a otro nivel técnico: TODO.md.