new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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)