new-term-radar
Daily radar for new AI terms: names of new models, products and repos, caught on X, Hugging Face, GitHub and sitemaps before keyword tools list them.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證este proyecto tiene como finalidad mejorar la experiencia con el cliente a la hora de pedir objetivos.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Sin variables de entorno arranca en modo demo: datos de ejemplo en memoria con fechas relativas a hoy, sin login. Cliente en /, agencia en /agencia. El modo demo es solo para probar: en Vercel cada instancia tiene su propia memoria y se reinicia.檢視完整 README ↗
npm install
npm run dev # http://localhost:3000
npm test # lógica de fechas, urgencia, reglas de piezas, parser de guion, avisos
Sin variables de entorno arranca en modo demo: datos de ejemplo en memoria con fechas relativas a hoy, sin login. Cliente en /, agencia en /agencia. El modo demo es solo para probar: en Vercel cada instancia tiene su propia memoria y se reinicia.
supabase/migrations/ (supabase db push, o pega el SQL en el editor).npm run seed:gen y ejecuta supabase/seed.sql (cliente demo [email protected]).https://TU-DOMINIO/auth/callback a Redirect URLs.agency_members (agency_id, user_id de auth.users).clients con su email. En su primer login con magic link se vincula solo (claim_client)..env.example (Supabase, CRON_SECRET, WhatsApp). El cron diario está en vercel.json (15:00 UTC = 9:00 CDMX).src/lib/dates.ts, src/lib/pieces.ts — fechas en la zona horaria del cliente, urgencia, atrasado derivado, jerarquía visual.src/lib/data/ — acceso a datos: supabase.ts (RLS + RPCs) y demo.ts (memoria), misma interfaz.src/components/client/ — calendario escritorio, móvil, detalle (Brief/Guión/Referencias), sesión de grabación.src/app/agencia/ — panel de la agencia.supabase/migrations/ — esquema, RLS, funciones del cliente, buckets de Storage.references se llama piece_references (references es palabra reservada en Postgres).clients añade email, tz y user_id; pieces añade notes; uploads añade file_name; nueva tabla notifications (cola de avisos).min-width: 880px (no 1000) para que el panel de detalle quepa al lado en pantallas de 1440px.App web para que el cliente de una agencia de contenido (un coach fitness, no técnico) entre y sepa en 5 segundos qué tiene que grabar esta semana. La agencia produce todo; el cliente solo graba material crudo y aprueba. La app la usa el cliente, no la agencia (la agencia necesita además un panel simple para cargar piezas y guiones — ver "Panel agencia").
Tres vistas diseñadas:
designs/Calendario de Contenido.dc.htmldesigns/Calendario Movil.dc.htmldesigns/Guion y Referencias.dc.htmlLos archivos de designs/ son referencias de diseño hechas en HTML (prototipos que muestran aspecto y comportamiento), no código de producción. Se abren directo en el navegador (necesitan support.js al lado). Toda la lógica está en la clase Component dentro de cada archivo (renderVals()), y los estilos están inline — úsalos como fuente de verdad de valores exactos.
La tarea es recrearlos en un stack real. Stack recomendado (no hay código previo):
High-fidelity. Colores, tipografía, espaciado e interacciones son finales. Recrear pixel-perfect.
Importante: cada pieza tiene DOS fechas. La de publicación (
publish_at) y la de grabación (record_due_at). El calendario del cliente se ordena y se muestra porrecord_due_at, no por la fecha de publicación. Si le enseñas la fecha de publicación, el cliente siempre va a entregar tarde. Los prototipos usan una sola fecha: en producción, esa fecha esrecord_due_at.
clients id, name, initials, avatar_url, agency_id, phone (WhatsApp)
agencies id, name, initials ("EN"), logo_url
pieces id, client_id, channel, title, status, format, objective, hook,
publish_at timestamptz -- cuándo sale al mundo
record_due_at timestamptz -- cuándo se necesita grabado (lo que ve el cliente)
edit_days int -- días que necesita el editor
brief_sent_at timestamptz -- cuándo se envió el brief al cliente (null = borrador)
redo_reason text -- motivo si status = 'rehacer'
received_at timestamptz -- cuándo la agencia confirmó recepción del material
script_blocks id, piece_id, position, label, duration, lines text[], note, recorded bool
shots id, piece_id, position, text, done bool -- checklist de tomas (brief)
references id, piece_id, block_id?, image_url, title, note, requested_from_client bool, uploaded_url?
uploads id, piece_id, file_url, uploaded_at
channel: reel | story | lead | carruselstatus: borrador | grabar | rehacer | grabado | edicion | listo | publicado | canceladorecord_due_at = publish_at − edit_days − buffer (buffer por defecto 1 día). Se calcula al crear la pieza; el cliente nunca lo piensa.atrasado (no se guarda, no lo elige nadie): status IN ('grabar','rehacer') AND now() > record_due_at.status === 'grabar' → cliente; cualquier otro → agencia.title máximo 10 palabras (validar en el panel de la agencia).pieces.brief_sent_at no nulo y status ≠ borrador/cancelado. Nada aparece en su calendario hasta que la agencia manda el brief. Así la agencia controla la anticipación (si quiere que grabe el 8, el brief sale el 1).status IN (grabar, rehacer) cuyo record_due_at cae en esta semana.#B5B8BE)#F5B83D)#F5B83D, texto #1A1205)#FF5C5C)
Aplica al bloque del header, a las cards y al detalle.#7C8087).grabar de esta semana destacan sobre todo; grabar de semanas futuras destacan menos; todo lo demás es contexto secundario.opacity: 0.25 (transición 200ms).status = grabado (con toast "Deshacer" 3.5 s en móvil).#FF5C5C. Card: bg #2A1214, border 1px #FF5C5C, pill sólida rojo con texto #1A0506, texto "Venció hace N días".publish_at y recalcula record_due_at) y Cancelar (status = cancelado, desaparece para el cliente). Sin esto el calendario se llena de "zombies rojos" y el cliente deja de hacerles caso.status = rehacer + redo_reason obligatorio.#4FD98A) con hora. Si la subida falla: "No se pudo subir. Reintentar".received_at ("Revisado por la agencia ✓").| Momento | Qué pasa | Aviso |
|---|---|---|
publish_at − 10 días | Se crea en borrador; el cliente no la ve | — |
brief_sent_at | Aparece en su calendario | "Nuevo brief: 3 piezas para grabar antes del 8" (agrupar las piezas enviadas el mismo día) |
record_due_at − 2 días | Recordatorio | "Te faltan 2 piezas, vencen pasado mañana" |
record_due_at pasado | atrasado | Franja roja + "Tienes 1 pieza atrasada" |
status → rehacer | Devuelta | "Hay que repetir «{título}»: {motivo}" |
Un solo mensaje al día como máximo por cliente (juntar avisos).
-webkit-font-smoothing: antialiased. Títulos con letter-spacing: -0.015em/-0.02em. text-wrap: pretty en títulos de cards; nunca truncar ni partir palabras (sin line-clamp, sin word-break).| Token | Hex |
|---|---|
| page bg (exterior) | #070708 / móvil #050506 |
| surface (frame/calendario) | #0B0B0D |
| card | #141518 |
| sheet/panel | #111214 / móvil #121315 |
| surface-2 | #16171A, #18191C, #1B1C1F |
| hairline | rgba(255,255,255,0.05) – 0.08 |
| botón borde | rgba(255,255,255,0.10–0.14) |
| text | #E8E9EB |
| text-strong | #FFFFFF, #F2F3F5 |
| text-2 | #D4D6DA, #C9CCD1, #B5B8BE |
| text-3 (labels) | #7C8087 |
| text-4 (vacío/off) | #5E6168, #45484E, #3A3D42 |
| Canal | Hex |
|---|---|
| Reels | #FF4F8B |
| Stories | #2BD4F0 |
| Lead Magnets | #FF8B3D |
| Carruseles | #A6E83A |
| Estado | Color texto | Fondo pill |
|---|---|---|
| Por grabar | #F5B83D | #F5B83D1F (o sólido si es de esta semana, texto #1A1205) |
| Grabado | #6FA8FF | #6FA8FF1F |
| En edición | #B990FF | #B990FF1F |
| Listo | #4FD98A | #4FD98A1F |
| Publicado | #7C8087 | rgba(255,255,255,0.05) |
| Rehacer | #F5B83D | sólido como "Por grabar" |
| Atrasado (derivado) | #FF5C5C | sólido rojo, texto #1A0506 |
#2A2110, border 1px #F5B83D, shadow 0 0 0 3px rgba(245,184,61,0.12), 0 6px 18px rgba(0,0,0,0.4), título #FFF4DE 600.#19160F, border rgba(245,184,61,0.4), título #E6DFD0 600.#141518, border rgba(255,255,255,0.04), título #9DA1A8 500 (publicado #62666D).#231B0B, border 1px #F5B83D, número #F5B83D 34px/700 (móvil 40px), texto #F2DDB0 / #FFF4DE.#F5B83D (hover #FFC85A), texto #1A1205 600.#110F0A.#E9D3A8, iniciales #2A1F0C 8px/700 ("MR").#24262B, Geist Mono 8px #8A8D93 ("EN").cards 6px (escritorio) / 12px (móvil) · chips 999px · botones 8–10px (móvil 14px) · frame 14px · sheet 24px top · bloques guión 14px.
Escala usada: 4 · 6 · 8 · 10 · 12 · 14 · 16 · 18 · 20 · 24 · 28.
max-width:1440px, radius 14, border hairline. Lado derecho: panel de detalle 420px sticky (top:28px). Ambos en flex-wrap, gap 28.22px 24px 16px:
#7C8087 ("Marco Ruiz · Calendario de contenido · con Estudio Norte"); mes 30px/600; flechas 34×34 radius 8 bg #141518; botón "Hoy".#0B0B0D 600, dot #0B0B0D. "Todo" usa #E8E9EB. A la derecha, leyenda de estados (dot 7px + nombre 12px).minmax(0,1fr), gap:1px sobre fondo hairline (líneas de 1px), radius 10. min-width:1000px con scroll horizontal debajo de eso. Encabezados LUN…DOM 11px uppercase letter-spacing:0.08em #5E6168.#8A8D93; fuera de mes #3A3D42 y cards a opacity 0.55; hoy = número en pill #E8E9EB texto oscuro + "Hoy". Celda vacía = solo el número tenue, sin bordes ni fondo extra.7px 8px 7px 9px, gap 7; título 13px/1.25; fila pill + responsable con flex-wrap:wrap (el avatar baja si no cabe). Pill 11px/600 padding 2px 7px. Seleccionada: border #FFFFFF.#5E6168, marcado #F5B83D + ✓, texto tachado); "Ten en cuenta"; stepper de 5 segmentos (3px) del flujo de estados; botones "Subir material" (primario) y "Ya lo grabé". Si es de la agencia: mensaje "No tienes que hacer nada con esta pieza…".cubic-bezier(.2,.8,.2,1)): grid 7 cols, celdas 44px con hasta 3 dots de canal; días con "Por grabar" tienen inset 0 0 0 1px rgba(245,184,61,.55). Tocar un día → va a esa semana y hace scroll suave hasta ese día.#45484E en una línea. Cards: radius 12, padding 12, canal 12px/600, título 16px, pill 12px, meta "0 de 5 tomas", chevron ›. :active → scale(0.98).translateY(105%) ↔ 0, 360ms cubic-bezier(.2,.85,.25,1); backdrop rgba(0,0,0,.6) fade 300ms; arrastrar el handle hacia abajo (pointer events, sin transición mientras arrastra), suelta >110px cierra. Checklist con filas ≥52px, checkbox 24px. Barra de acciones fija abajo: "Ya lo grabé" / "Subir material" (52px).#E8E9EB, entra desde abajo; "«Título» marcado como grabado" + "Deshacer".El cliente no graba una pieza por día: graba 6 de corrido un domingo. Esta es la vista que más se va a usar.
grabar + rehacer, primero atrasadas, luego por record_due_at) en una sola lista continua.#1B1C1F radius 11, tab activa #2A2C31 blanco 600; badge ámbar con nº de referencias que requieren acción).#17181B): nº en Geist Mono + LABEL uppercase 11px, duración; miniatura de referencia opcional (44×72) que abre el visor; líneas 17px/1.45/500; nota opcional; botón "Marcar como grabado" 44px → estado grabado (bg #121A14, borde rgba(79,217,138,.35), texto #7C8087, botón "✓ Grabado" verde).Guion y Referencias.dc.html, pero no implementarlos todavía). Se deja para v2, cuando se compruebe que el flujo funciona.transform-origin en el punto tocado (300ms), botón × 44px.Gancho, Problema, Solución, Prueba social, CTA); cada párrafo = una línea.publish_at y edit_days → se calcula record_due_at (editable).brief_sent_at, cambia a grabar y dispara el aviso. Advertir si el brief sale con menos anticipación de la necesaria.edicion) o Pedir que lo repita (→ rehacer, motivo obligatorio).tailwind.config; fuentes Geist.publish_at, record_due_at, edit_days, brief_sent_at, estados borrador/rehacer/cancelado) + RLS + seed con los datos de ejemplo (arrays ITEMS y BRIEFS de los archivos; usa su fecha como record_due_at).atrasado y textos de tiempo restante (con tests).v2 (no ahora): teleprompter con autoscroll y velocidades, importar directo desde Google Docs.
designs/assets/ref-microlanzamiento.png — imagen de referencia recortada de un Google Doc del usuario (ejemplo; en producción la sube la agencia).designs/Calendario de Contenido.dc.html — escritoriodesigns/Calendario Movil.dc.html — móvildesigns/Guion y Referencias.dc.html — guión/referencias (el teleprompter con autoscroll es v2)designs/support.js — runtime para abrir los prototipos en el navegador (no se porta)