Polestar
Polestar is a free, open-source leveling guide addon for WoW: Forever: an in-game arrow and leveling routes that make sense for every race 1 to 60, plus class quests.
Demostrá que sos el que más sabe de fútbol argentino y sudamericano.
Translation pending
GamesTypeScript · CSSGitHub @Jotafacu890OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗¿Cuánto sabés de fulbo? — 90 minutos no alcanzan para todo lo que sabés.
Desafíos diarios de conocimiento futbolístico con foco en el fútbol argentino y CONMEBOL. El nombre, eslóganes, colores y voz de la marca están centralizados en lib/config/brand.ts y lib/config/copy.ts.
MVP: Grid Sudamericano, El 11, ¿Quién es? e Impostor, con desafío diario (igual para todos, cambia a las 00:00 de Buenos Aires), modo infinito, estadísticas locales, compartir resultados y panel /admin.
npm install
npm run dev # http://localhost:3000
Sin base de datos la app funciona igual: usa los datos de /data (modo estático, admin de sólo lectura).
dev (el branch principal queda para producción)..env.example a .env y completá, con las URLs del branch dev:
DATABASE_URL: conexión pooled (con -pooler), la usa la app.DATABASE_URL_UNPOOLED (o DIRECT_URL): conexión directa, la usan migraciones y seed.APP_SECRET: 32+ caracteres aleatorios (firma de partidas).npm run db:deploy → aplica las migraciones versionadas de prisma/migrations.npm run db:seed → carga jugadores, clubes, títulos, DTs y partidos desde /data.npm run daily:generate → precarga y verifica los diarios de los próximos 30 días y las reservas.npm run admin:create -- --email [email protected] --password "una-clave-larga" → primer administrador.DATABASE_URL y DATABASE_URL_UNPOOLED; también puede crear un branch por cada Preview Deployment.APP_SECRET, CRON_SECRET, ADMIN_EMAILS (opcional) y NEXT_PUBLIC_SITE_URL.vercel-build: prisma generate && prisma migrate deploy && next build. Las migraciones se aplican solas y nunca se usa db push en producción.npm run db:seed y npm run admin:create -- ….vercel.json programa el cron /api/cron/daily (02:00 UTC = 23:00 Argentina) que mantiene el calendario completo. La primera carga de 30 días conviene hacerla con npm run daily:generate (desde lejos de la región de Neon tarda varios minutos); después el cron sólo agrega un día por juego.Cambios de schema: editá prisma/schema.prisma, corré npm run db:migrate -- --name descripcion contra el branch dev y commiteá la carpeta de migración generada. Producción la aplica en el próximo deploy.
| Script | Qué hace |
|---|---|
npm test | Tests del motor, tickets, generadores, validadores y scheduler |
npm run test:slow | Sostenibilidad del calendario (90 días por juego, ~4 min) |
npm run data:check | Verifica integridad del seed (referencias, años, títulos vs. palmarés de clubes) |
npm run typecheck / npm run lint | Tipos y lint |
npm run db:migrate | Crea una migración nueva (desarrollo) |
npm run db:deploy / db:status | Aplica / muestra el estado de las migraciones |
npm run db:seed | Seed idempotente (-- --reset reemplaza relaciones del seed; bloqueado en producción sin --force-production) |
npm run daily:generate | Corre el motor a mano: completa el calendario y las reservas (-- --from 2026-11-01, -- --backfill) |
npm run admin:create | Crea o promueve un administrador |
lib/database/* (marcado server-only); los componentes cliente hablan únicamente con server actions y route handlers. Las credenciales nunca llegan al navegador.lib/database/prisma.ts) con el adapter de Neon sobre la conexión pooled.lib/game-engine/tickets.ts) con intentos, celdas resueltas y jugadores usados; el servidor lo valida y lo devuelve actualizado. El cliente no puede alterarlo, y funciona en funciones serverless sin memoria compartida ni escrituras en Neon por cada jugada de un invitado. Las respuestas correctas sólo se revelan con el ticket cerrado.localStorage. Usuarios autenticados: UserGameResult en Neon, calculado desde el ticket (no desde números del cliente) y único por usuario y desafío.ADMIN se verifica en el servidor en el layout, en cada página y en cada server action.lib/game-engine/daily-generator.ts genera con el mismo seed que el fallback en tiempo real, comprueba que cada consigna tenga respuestas correctas (y que la grilla tenga 9 respuestas distintas) y guarda Challenge, ChallengeCondition, ChallengeAnswer y DailyChallenge. No hay generación por IA.America/Argentina/Buenos_Aires (lib/game-engine/daily.ts).Player.normalizedName (búsqueda difusa en /api/jugadores), PlayerClub(clubId, playerId), PlayerCompetitionAchievement(competitionId, clubId), DailyChallenge(date) y (date, gameId), UserGameResult(gameId, dailyDate) y (userId, challengeKey).This is the beginning of the README. Read the rest at the original. Read the full README ↗