塑造个人品牌,发现细分市场,构建可持续盈利的产品
개인 브랜드 구축·세분화 시장 발굴·지속 가능한 수익 제품 만들기를 공유
ListingKit은 부동산 중개업체용 셀프 서비스 도구로, 35개 필드 하나로 PDF·QR·인스타그램 등 6가지 게시 자산을 자동 생성합니다
A self-serve product for real-estate agencies: one ~35-field property listing generates six ready-to-publish assets — PDF listing sheet with QR, Instagram…
마케팅TypeScript · JavaScriptGitHub @NestorPVsf온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Una ficha de propiedad entra, salen seis piezas de marketing con la marca de la agencia
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Una ficha de propiedad entra. Salen seis piezas de marketing con la marca de la agencia: ficha técnica en PDF, post de Instagram, carrusel, story, email comercial y vídeo vertical.
El dolor que ataca está documentado en docs/research/: una agencia media teclea
los mismos datos tres o cuatro veces —CRM, portal, Canva, PDF— y dedica entre dos
horas y dos horas y media por propiedad. Y hay trabajo que directamente no se
hace: la ficha en PDF «a menudo no existe» y el vídeo es «prácticamente
inexistente» salvo que se contrate a alguien de fuera.
No publica por ti. Genera el material y te lo entrega; subirlo es tuyo.
Un motor genérico con un vertical enchufado encima. El motor no sabe qué es un
piso: recibe una entidad, la proyecta a una vista pública, resuelve bindings,
aplica reglas legales y encarga las piezas a los renderizadores. Lo que sabe de
inmuebles vive en niches/inmobiliaria/.
lib/engine/ motor: contratos, puertos, orquestación de trabajos
lib/infrastructure/ adaptadores: Playwright, FFmpeg, Prisma, ZIP, IA
niches/inmobiliaria/ el vertical: esquema, textos, plantillas, reglas legales
app/ interfaz (Next.js App Router) y API
docs/architecture/ la ADR que manda sobre todo lo anterior
La dirección de dependencias es innegociable y hay un test que la vigila fichero
a fichero: el nicho depende del motor, nunca al revés. Levantar un vertical
nuevo no toca lib/; hay una plantilla de PRP en .specs/templates/.
PublicPropertyView
es una proyección por allowlist y es el único tipo que aceptan las plantillas
públicas. Un campo nuevo no llega a una pieza hasta que alguien lo añade a
propósito. El editor de texto libre, que es la puerta de atrás, tiene su propio
guardarraíl.docs/architecture/niche-engine.md.Ninguna cuenta, clave ni servicio de terceros para tenerlo funcionando en local. Hacen falta dos cosas en la máquina, y conviene comprobarlas antes de empezar porque si faltan el fallo aparece tarde y mal:
| Requisito | Para qué | Comprobar |
|---|---|---|
| Node 22 o superior | todo | node -v |
FFmpeg en el PATH | el vídeo vertical y la recompresión de los audios | ffmpeg -version · ffprobe -version |
FFmpeg no se instala con npm. En Windows winget install Gyan.FFmpeg, en macOS
brew install ffmpeg, en Debian o Ubuntu sudo apt install ffmpeg. Sin él las
otras cinco piezas se generan igual: solo falla el vídeo, y con un mensaje que
dice exactamente eso.
npm install
npx playwright install chromium # el navegador que renderiza PDF e imágenes
npx prisma generate # cliente tipado a partir del schema
npx prisma migrate deploy # crea prisma/dev.db
npm run db:seed # marca y 3 propiedades de demo con fotos reales
cp .env.example .env
npm run dev # http://localhost:3000
En desarrollo eso es todo: no hay contraseña y se entra directo al panel.
Para producción hacen falta dos cosas más, y sin ellas la aplicación se niega a funcionar a propósito:
npm run set-password # imprime la línea APP_PASSWORD_HASH para el .env
npm run build && npm start
APP_PASSWORD_HASH: sin él responde 503 a todo. Es deliberado — una
instalación sin candado en una red es peor que una que no arranca.Secure, así que sobre HTTP el
navegador no la guarda y no hay manera de entrar. Ponlo detrás de un proxy
con TLS.El nombre visible se cambia por instalación con NEXT_PUBLIC_APP_NAME. La
reescritura de texto con IA es opcional y viene apagada: sin
AI_TEXT_ENABLED=1 no se llama a ningún servicio externo y el botón ni siquiera
aparece — .env.example explica cómo activarla con tu proveedor y tu clave.
output/) porque una
instancia no sirve lo que escribió otra.AUDIT.md §6 ("Lo que NO hace").npm test # 401 unitarios
npm run test:e2e # 27 end-to-end (desarrollo + build de producción real)
Los E2E no corren en CI a propósito: levantan dos servidores reales y descargan un navegador completo. Pásalos a mano antes de tocar nada que se publique.
Los E2E corren contra dos servidores: uno de desarrollo y un next build && next start de verdad. Existe porque los dos fallos más caros del proyecto pasaron con
toda la suite en verde — sólo se manifestaban en un build de producción. Usan sus
propias bases de datos: pasar los tests no toca tus datos.
Instalable en una agencia detrás de HTTPS. Lo que falta, con nombre y apellidos,
está en AUDIT.md §6 — incluida la sección «lo que no hace», que es la que evita
la conversación incómoda a los tres meses.
AUDIT.md es la auditoría de seguridad del propio proyecto: tres revisiones en
paralelo por ejes distintos, más una pasada adversarial con un modelo diferente
del que escribió el código, sobre el producto real y no sobre una checklist
genérica. Documenta vulnerabilidades que existieron —fotos
que filtraban GPS por EXIF sin recodificar, un logo SVG que permitía XSS
persistente same-origin, entre otras 14— y cómo se cerró cada una, con test de
regresión (tests/security/). Se deja en el repo a propósito: demuestra
proceso, no solo lo afirma.
Esto es un proyecto personal, abierto bajo MIT para que lo cojas y lo adaptes sin pedir permiso. Si quieres esto mismo montado para tu agencia, con tu marca y tus flujos, o cualquier otra cosa a medida: [email protected]
Más sobre mi trabajo: nestormartinez.dev