[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81517":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":14,"stars30d":14,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":12,"starSnapshotCount":12,"syncStatus":13,"lastSyncTime":24,"discoverSource":25},81517,"jitre","YamilEzequiel\u002Fjitre","YamilEzequiel","Repositorio open source para que vos y tu empresa puedan agilizar tiempos de gestion todo en uno",null,"TypeScript",28,0,2,1,40.6,"Other",false,"main",true,[],"2026-06-12 04:01:34","\u003Cdiv align=\"center\">\n\n# Jitre\n\n**Plataforma de gestión de proyectos AI-first — moderna, minimalista, lista para producción.**\n\n[![Angular](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAngular-21-DD0031?style=flat&logo=angular&logoColor=white)](https:\u002F\u002Fangular.dev)\n[![NestJS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNestJS-11-E0234E?style=flat&logo=nestjs&logoColor=white)](https:\u002F\u002Fnestjs.com)\n[![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.9-3178C6?style=flat&logo=typescript&logoColor=white)](https:\u002F\u002Fwww.typescriptlang.org)\n[![PostgreSQL](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPostgreSQL-16-4169E1?style=flat&logo=postgresql&logoColor=white)](https:\u002F\u002Fwww.postgresql.org)\n[![Redis](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRedis-7-DC382D?style=flat&logo=redis&logoColor=white)](https:\u002F\u002Fredis.io)\n[![Tailwind](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTailwind-4-06B6D4?style=flat&logo=tailwindcss&logoColor=white)](https:\u002F\u002Ftailwindcss.com)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Elastic%20License%202.0-005571.svg)](.\u002FLICENSE)\n\n[Demo](#capturas) · [Quick start](#quick-start) · [Arquitectura](#arquitectura) · [Contribuir](#contribuciones) · [Autor](#autor)\n\n> Si te resulta útil, **dejá tu ⭐ al repo** — me ayuda muchísimo a que más gente lo descubra y a seguir invirtiéndole tiempo.\n\n\u003C\u002Fdiv>\n\n---\n\n## Probar en 60 segundos\n\nCero dependencias locales — solo Docker. Levantás el stack completo con datos de demo precargados:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FYamilEzequiel\u002Fjitre.git\ncd jitre\ndocker compose -f compose.demo.yml up\n```\n\nAbrí \u003Chttp:\u002F\u002Flocalhost:8080> y entrá con:\n\n| Email | Password | Rol |\n|---|---|---|\n| `admin@jitre.test` | `admin123` | Owner |\n| `pm@jitre.test` | `pm123` | Admin |\n| `dev1@jitre.test` | `dev123` | Member |\n\n> Si querés hackear el código (no solo probarlo), saltá al [Dev setup](#quick-start) abajo.\n\n---\n\n## ¿Qué es Jitre?\n\nJitre es una plataforma de gestión de proyectos pensada para equipos que **valoran la productividad y la simplicidad**. La diferencia: la IA está integrada como una pieza más del workflow — no como un chatbot pegado arriba.\n\nPensada para reemplazar el combo \"Jira + Confluence + Slack + tablero de tiempos\" con una sola herramienta coherente.\n\n### ¿Por qué existe?\n\nLas herramientas existentes están **infladas**: 30 menús para hacer 5 cosas. Jitre arranca desde cero con un criterio de UX firme:\n\n- **Atajos de teclado de primera clase** — command palette estilo Linear\u002FRaycast\n- **Signals + OnPush en todo** — la UI no se siente como un SPA, se siente como una app\n- **AI-first donde aporta** — sub-tareas, priorización, resúmenes, búsqueda semántica\n- **Realtime real** — Socket.IO para cambios colaborativos sin recargar\n\n---\n\n## Capturas\n\n> Las capturas se actualizan a medida que avanza el desarrollo. Si querés ver el estado actual, levantá el proyecto siguiendo el [quick start](#quick-start).\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fdashboard.png\" alt=\"Dashboard\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Dashboard\u003C\u002Fb> — AI daily digest, sugerencias de prioridad y stats del workspace\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fboard.png\" alt=\"Board\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Board\u003C\u002Fb> — Kanban con tipos, prioridades, vencimientos y drag-and-drop\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Ftask-detail.png\" alt=\"Task detail\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Task detail\u003C\u002Fb> — comentarios, adjuntos, subtareas, links y time tracking\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fai-assist.png\" alt=\"AI assist\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>AI assist\u003C\u002Fb> — generación de tareas con prompts y contexto del proyecto\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fchat.png\" alt=\"Chat\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Chat\u003C\u002Fb> — canales por proyecto, DMs, threads y menciones en tiempo real\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Ftime-reports.png\" alt=\"Time reports\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Time reports\u003C\u002Fb> — distribución por usuario\u002Fproyecto\u002Ftarea con export CSV\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fdocs.png\" alt=\"Docs\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Docs\u003C\u002Fb> — base de conocimiento con árbol jerárquico y autosave\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Forg-chart.png\" alt=\"Org chart\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Org chart\u003C\u002Fb> — organigrama por áreas con zoom, pan y filtros\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fanalytics.png\" alt=\"Analytics\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Analytics\u003C\u002Fb> — velocity, throughput, workload y consumo de IA\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fnotification-settings.png\" alt=\"Notification settings\" width=\"100%\" \u002F>\n      \u003Csub>\u003Cb>Notification settings\u003C\u002Fb> — control granular de notificaciones in-app y email\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n---\n\n## Características principales\n\n### Gestión de proyectos\n- Workflows estilo Jira con statuses, transiciones y reglas\n- Custom fields por proyecto (texto, número, fecha, select, multi-select)\n- Labels, prioridades y assignees\n- Planning view, board view, list view\n- Filtros avanzados y búsqueda full-text\n\n### Colaboración\n- Comentarios con menciones (@user) y notificaciones en tiempo real\n- Attachments (drivers de storage abstraídos: local \u002F S3-ready)\n- Documentos colaborativos por proyecto\n- Chat por proyecto (Slack-style threads)\n- Activity feed y audit log completo\n\n### Productividad\n- **Time tracking** integrado en la tarea\n- **Analytics** por proyecto, usuario y workspace\n- **Búsqueda semántica** (no solo keyword matching)\n- **Command palette** global con atajos `Ctrl+K`\n\n### IA integrada\n- Generación de sub-tareas a partir de una descripción\n- Priorización asistida de tareas\n- Resúmenes automáticos de comentarios largos\n- Abstracción multi-proveedor: Gemini 2.0 Flash hoy, lista para Anthropic \u002F OpenAI\n\n### Plataforma\n- Multi-tenant con workspaces y roles\n- Realtime con Socket.IO\n- Jobs en background con BullMQ + Redis\n- Migraciones versionadas con TypeORM\n- Health checks listos para Kubernetes\n\n---\n\n## Stack\n\n| Capa | Tecnología |\n|------|-----------|\n| **Frontend** | Angular 21 · Signals · OnPush · Standalone components · Tailwind 4 · Vitest 4 |\n| **Backend** | NestJS 11 · TypeORM 0.3 · class-validator · Pino · Swagger \u002F OpenAPI |\n| **DB \u002F Cache** | PostgreSQL 16 · Redis 7 |\n| **Realtime** | Socket.IO |\n| **Jobs** | BullMQ |\n| **IA** | Gemini 2.0 Flash (provider-agnostic) |\n| **Monorepo** | npm workspaces (`shared`, `backend`, `frontend`) |\n| **Infra dev** | Docker Compose |\n\n---\n\n## Quick start\n\n### Prerrequisitos\n\n- Node.js **20+**\n- npm **10+**\n- Docker (para Postgres + Redis locales)\n\n### Levantarlo\n\n```bash\n# 1. Clonar e instalar\ngit clone https:\u002F\u002Fgithub.com\u002FYamilEzequiel\u002Fjitre.git\ncd jitre\nnpm install\n\n# 2. Setup automatizado (copia .env, levanta Postgres + Redis,\n#    corre migraciones y siembra datos de demo)\nnpm run setup\n\n# 3. Arrancar backend y frontend (en dos terminales)\nnpm run dev:backend    # http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fv1\u002Fdocs (Swagger)\nnpm run dev:frontend   # http:\u002F\u002Flocalhost:4200\n```\n\nEl frontend proxea automáticamente `\u002Fapi\u002Fv1\u002F*` al backend en `:3000`.\n\nSi preferís el camino sin instalación local de Node, mirá la sección [Probar en 60 segundos](#probar-en-60-segundos) que usa `docker compose` para todo.\n\n### Credenciales del seed\n\n| Email | Password | Rol |\n|---|---|---|\n| `admin@jitre.test` | `admin123` | Owner |\n| `pm@jitre.test` | `pm123` | Admin |\n| `dev1@jitre.test` | `dev123` | Member (tiene un timer activo) |\n| `dev2@jitre.test` | `dev123` | Member |\n\n---\n\n## Arquitectura\n\n### Monorepo\n\n```\njitre\u002F\n├── packages\u002F\n│   ├── shared\u002F      → DTOs, enums e interfaces compartidas (backend + frontend)\n│   ├── backend\u002F     → NestJS 11 API\n│   └── frontend\u002F    → Angular 21 UI\n├── docker-compose.yml\n└── package.json     → npm workspaces\n```\n\n### Módulos del backend\n\n| Dominio | Módulos |\n|---------|---------|\n| **Identidad** | `auth` · `user` · `workspace` · `settings` |\n| **Proyectos** | `project` · `project\u002Fworkflow` · `project\u002Fstatus` · `project\u002Flabel` · `project\u002Fcustom-field` · `project\u002Fplanning` |\n| **Trabajo** | `task` · `comment` · `mention` · `attachment` · `document` |\n| **IA** | `ai` · `chat` |\n| **Productividad** | `time-tracking` · `analytics` · `search` |\n| **Plataforma** | `notification` · `audit` · `activity` · `events` · `realtime` · `jobs` · `storage` · `health` |\n\n### Arquitectura del frontend\n\n```\npackages\u002Ffrontend\u002Fsrc\u002Fapp\u002F\n├── core\u002F         → servicios: auth, http interceptors, realtime, keyboard, toast, ai, analytics\n├── stores\u002F       → factoría createEntityStore\u003CT> + TaskStore \u002F ProjectStore \u002F NotificationStore\n├── shared\u002F       → UI primitives: skeleton, toast, virtual-list, markdown pipe, command palette\n├── layouts\u002F      → MainLayoutComponent (auth shell), AuthLayoutComponent\n├── features\u002F     → auth, dashboard, projects, tasks, settings, analytics, notifications\n├── app.routes.ts → rutas lazy con authGuard\n└── app.config.ts → interceptors, providers, app initializer\n```\n\n**Convenciones del frontend** (no negociables):\n\n- ✓ **Standalone components** — sin NgModules\n- ✓ **Signals + `computed()`** — RxJS solo en interceptors\n- ✓ **OnPush en todo** — `ChangeDetectionStrategy.OnPush`\n- ✓ **`inject()`** — nada de constructor injection\n- ✓ **Reactive Forms** — sin template-driven forms\n- ✓ **Control flow nativo** — `@if`, `@for`, `@switch`\n\n---\n\n## Scripts útiles\n\n```bash\n# Dev\nnpm run dev:backend           # NestJS en watch mode\nnpm run dev:frontend          # Angular dev server\n\n# Build\nnpm run build                 # build de los 3 packages\nnpm run build:backend\nnpm run build:frontend\n\n# Database\nnpm run db:migration:generate  # generar migración a partir de cambios en entities\nnpm run db:migration:create    # crear migración vacía\nnpm run db:migration:run       # aplicar migraciones pendientes\nnpm run db:migration:revert    # revertir la última\nnpm run db:migration:show      # ver estado\n\n# Setup\nnpm run setup                 # one-shot: .env + docker + migrate + seed\n\n# Docker (dev)\nnpm run docker:up             # levantar Postgres + Redis\nnpm run docker:down           # bajarlos\nnpm run docker:logs           # logs en vivo\n\n# Demo stack (todo el producto en Docker)\nnpm run demo:up               # postgres + redis + backend + frontend + seed\nnpm run demo:down             # bajar el stack demo\n\n# Testing\nnpm run test                  # tests de todos los workspaces\nnpm run test -w @jitre\u002Fbackend     # Jest\nnpm run test -w @jitre\u002Ffrontend    # Vitest 4 + Angular TestBed (jsdom)\nnpm run test:e2e:backend\n```\n\n---\n\n## Contribuciones\n\n¡Las contribuciones son bienvenidas! Vía **Pull Request** y comentarios en issues.\n\n1. **Abrí un issue primero** si el cambio es grande (feature, refactor, nuevo módulo). Alineamos enfoque antes de que codees.\n2. **PRs chicos y enfocados.** Commits convencionales, tests pasando, sin atribución de IA en los commits.\n3. **Comentá tu implementación en el PR.** Decisiones, tradeoffs, qué descartaste — facilita la review y ayuda a otros a aprender.\n\n### Sobre cambios de UX\n\nLa UX está pensada con un criterio específico (minimalista, AI-first, productividad). **No aceptamos PRs que cambien la UX a grandes rasgos** sin discusión previa: rediseños globales, restructuras de navegación, cambios de information architecture, sustitución del sistema de diseño, etc. → **abrir issue primero**.\n\nSí son bienvenidos sin discusión previa: fixes de UI rotos, mejoras de accesibilidad, ajustes finos de copy\u002Fspacing, traducciones nuevas, micro-interacciones que no alteren el flow.\n\n### Buenos primeros PRs\n\n- Mejoras de accesibilidad (ARIA, contraste, focus states)\n- Traducciones (i18n)\n- Tests faltantes en módulos existentes\n- Documentación de endpoints en Swagger\n- Performance: memoizaciones, OnPush misses, queries N+1\n\n---\n\n## Autor\n\nHecho con cariño por **Yamil Lazzari** — Senior Software Architect.\n\n- 💼 LinkedIn: [linkedin.com\u002Fin\u002Fyamil-lazzari](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fyamil-lazzari\u002F)\n- 🐙 GitHub: [@YamilEzequiel](https:\u002F\u002Fgithub.com\u002FYamilEzequiel)\n- 📦 Repo: [github.com\u002FYamilEzequiel\u002Fjitre](https:\u002F\u002Fgithub.com\u002FYamilEzequiel\u002Fjitre)\n\nSi querés contactarme por consultorías, mentorías de arquitectura o licenciamiento comercial de Jitre (reventa \u002F SaaS gestionado \u002F white-label), por LinkedIn está perfecto.\n\n---\n\n## Licencia\n\nCopyright © Yamil Lazzari. Todos los derechos reservados.\n\nJitre se distribuye bajo la **[Elastic License 2.0 (ELv2)](.\u002FLICENSE)** — una licencia *source-available* (no es OSS según OSI). En una línea: podés usarlo, modificarlo, distribuirlo y desplegarlo **dentro de tu empresa** sin pagar nada; lo que no podés hacer es **ofrecerlo como servicio gestionado a terceros**, eludir el licenciamiento ni remover los avisos de copyright.\n\n### Permitido\n- **Uso interno en empresas:** correrlo dentro de tu organización como herramienta operacional, incluso con fines comerciales.\n- **Uso personal y educativo:** hobby, estudio, investigación, cursos.\n- **Organizaciones sin fines de lucro:** ONGs, caridad, gobierno.\n- **Fork y modificación:** tocar el código y distribuir tus cambios — siempre que respetes las limitaciones.\n- **Distribución:** copiar y compartir el software con los términos adjuntos.\n\n### No permitido\n- **SaaS de terceros \u002F managed service:** ofrecer Jitre (modificado o no) como servicio hosteado donde otros accedan a una parte sustancial de sus features. Si querés vender un Jitre-as-a-Service, hablamos.\n- **Eludir el licensing:** mover, cambiar, deshabilitar o evadir la funcionalidad de licenciamiento.\n- **Re-branding sin avisos:** remover u ofuscar los avisos de copyright, marca o licencia.\n\nTexto legal completo en [`LICENSE`](.\u002FLICENSE). Para licencias comerciales distintas (reventa \u002F SaaS \u002F white-label) contactar al autor.\n\n### Sin garantía\n\nEl software se entrega \"AS IS\", sin garantías de ningún tipo. El autor no se hace responsable de daños derivados de su uso.\n\n---\n\n\u003Cdiv align=\"center\">\n\n**¿Te gustó el proyecto?** Dale una ⭐ — no cuesta nada y me hace el día.\n\n\u003C\u002Fdiv>\n","Jitre 是一个旨在提高团队生产力和简化项目管理流程的开源平台。它集成了Angular、NestJS等现代技术栈，采用TypeScript编写，并支持PostgreSQL和Redis数据库，界面设计基于Tailwind CSS，保证了良好的用户体验。该平台特别强调AI在日常任务如子任务分配、优先级排序及语义搜索中的应用，同时提供了一流的键盘快捷方式支持和实时协作功能。适用于寻求替换复杂传统工具（例如Jira、Confluence、Slack）的企业或开发团队，希望在一个统一且直观的应用内完成所有项目管理和沟通工作。","2026-06-11 04:05:22","CREATED_QUERY"]