@imansi/templates 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +557 -0
  3. package/package.json +35 -0
  4. package/src/auth/ForgotPasswordPage.jsx +176 -0
  5. package/src/auth/LoginPage.jsx +265 -0
  6. package/src/auth/RegisterPage.jsx +302 -0
  7. package/src/auth/ResetPasswordPage.jsx +158 -0
  8. package/src/auth/Verify2FAPage.jsx +175 -0
  9. package/src/dashboard/BillingPage.jsx +345 -0
  10. package/src/dashboard/DashboardHome.jsx +246 -0
  11. package/src/dashboard/NotificationsPage.jsx +230 -0
  12. package/src/dashboard/ProfilePage.jsx +272 -0
  13. package/src/dashboard/SettingsPage.jsx +415 -0
  14. package/src/dashboard/UsersTablePage.jsx +317 -0
  15. package/src/extra/CareersPage.jsx +166 -0
  16. package/src/extra/ChangelogPage.jsx +127 -0
  17. package/src/extra/CheckoutPage.jsx +383 -0
  18. package/src/extra/ComingSoonPage.jsx +147 -0
  19. package/src/extra/ErrorPage.jsx +91 -0
  20. package/src/extra/InvoicePage.jsx +241 -0
  21. package/src/extra/LegalPage.jsx +115 -0
  22. package/src/extra/MaintenancePage.jsx +172 -0
  23. package/src/extra/OnboardingPage.jsx +197 -0
  24. package/src/extra/StatusPage.jsx +181 -0
  25. package/src/index.js +53 -0
  26. package/src/layouts/AuthLayout.jsx +104 -0
  27. package/src/layouts/DashboardLayout.jsx +249 -0
  28. package/src/layouts/MarketingLayout.jsx +184 -0
  29. package/src/marketing/AboutPage.jsx +189 -0
  30. package/src/marketing/BlogPage.jsx +182 -0
  31. package/src/marketing/BlogPostPage.jsx +192 -0
  32. package/src/marketing/ContactPage.jsx +546 -0
  33. package/src/marketing/DocsPage.jsx +256 -0
  34. package/src/marketing/HomePage.jsx +702 -0
  35. package/src/marketing/LandingPage.jsx +755 -0
  36. package/src/marketing/PricingPage.jsx +205 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Imansi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,557 @@
1
+ # @imansi/templates
2
+
3
+ > **29 páginas completas + 3 layouts** para el ecosistema Imansi. Auth, marketing, dashboard y extras — todas visuales, listas para conectar a tu backend.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@imansi/templates.svg)](https://www.npmjs.com/package/@imansi/templates)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
7
+
8
+ ---
9
+
10
+ ## Tabla de contenidos
11
+
12
+ - [¿Qué es?](#qué-es)
13
+ - [¿Por qué?](#por-qué)
14
+ - [Instalación](#instalación)
15
+ - [Configuración](#configuración)
16
+ - [Uso](#uso)
17
+ - [Páginas disponibles](#páginas-disponibles)
18
+ - [Auth (5)](#auth-5)
19
+ - [Marketing (8)](#marketing-8)
20
+ - [Dashboard (6)](#dashboard-6)
21
+ - [Extras (10)](#extras-10)
22
+ - [Layouts (3)](#layouts-3)
23
+ - [Temas y modos](#temas-y-modos)
24
+ - [Personalización](#personalización)
25
+ - [Anatomía](#anatomía)
26
+ - [Roadmap](#roadmap)
27
+ - [Licencia](#licencia)
28
+
29
+ ---
30
+
31
+ ## ¿Qué es?
32
+
33
+ `@imansi/templates` es el paquete de **páginas completas** del ecosistema Imansi. Contiene 29 plantillas listas para copiar, pegar y usar: login, landing, dashboard, checkout, blog, docs y más.
34
+
35
+ A diferencia de `@imansi/ui` (componentes genéricos como `Button`, `Input`, `Card`), este paquete te da **páginas enteras** ya armadas con esos componentes.
36
+
37
+ **Son puramente visuales.** No tienen lógica de negocio, no llaman APIs, no manejan estado global. Reciben props y callbacks. Vos decidís cómo conectarlas.
38
+
39
+ ---
40
+
41
+ ## ¿Por qué?
42
+
43
+ Armar un login, un dashboard o una landing desde cero lleva días. Con `@imansi/templates`:
44
+
45
+ - **Empezás con 29 páginas listas** en vez de partir de cero.
46
+ - **Diseño consistente** entre auth, marketing y dashboard.
47
+ - **6 temas incluidos** (`minimal`, `modern`, `compact`, `warm`, `red`, `yellow`).
48
+ - **Modo oscuro automático** con `prefers-color-scheme`.
49
+ - **100% responsive** — funciona en mobile, tablet y desktop.
50
+ - **Props para todo** — cambiás textos, rutas y callbacks sin tocar el código.
51
+
52
+ En vez de perder 3 días armando un login con OAuth, 2FA y recuperación de contraseña, importás `LoginPage` y conectás tu backend.
53
+
54
+ ---
55
+
56
+ ## Instalación
57
+
58
+ ```bash
59
+ npm install @imansi/templates @imansi/ui @imansi/tailwind react-router-dom
60
+ ```
61
+
62
+ Requiere:
63
+
64
+ | Dependencia | Versión mínima |
65
+ |---|---|
66
+ | React | 18 o 19 |
67
+ | React DOM | 18 o 19 |
68
+ | React Router | 6.0 |
69
+ | Tailwind CSS | 4.0 |
70
+ | `@imansi/tailwind` | ^0.1.1 |
71
+ | `@imansi/ui` | ^0.1.1 |
72
+
73
+ ---
74
+
75
+ ## Configuración
76
+
77
+ ### 1. Tailwind CSS v4 + Vite
78
+
79
+ ```bash
80
+ npm install -D tailwindcss @tailwindcss/vite
81
+ ```
82
+
83
+ ```js
84
+ // vite.config.js
85
+ import { defineConfig } from 'vite';
86
+ import react from '@vitejs/plugin-react';
87
+ import tailwindcss from '@tailwindcss/vite';
88
+
89
+ export default defineConfig({
90
+ plugins: [react(), tailwindcss()],
91
+ optimizeDeps: {
92
+ exclude: ['@imansi/ui', '@imansi/templates'],
93
+ },
94
+ });
95
+ ```
96
+
97
+ ### 2. Importar estilos
98
+
99
+ En `src/index.css`:
100
+
101
+ ```css
102
+ @import "tailwindcss";
103
+ @import "@imansi/tailwind/styles.css";
104
+
105
+ /* Escanear tu app */
106
+ @source "./**/*.jsx";
107
+ @source "./**/*.js";
108
+
109
+ /* Escanear los paquetes de Imansi */
110
+ @source "../node_modules/@imansi/ui/src/**/*.jsx";
111
+ @source "../node_modules/@imansi/templates/src/**/*.jsx";
112
+ ```
113
+
114
+ ### 3. Configurar tema y modo en `<html>`
115
+
116
+ ```html
117
+ <html lang="es" data-theme="modern" data-mode="light">
118
+ ```
119
+
120
+ O desde JavaScript:
121
+
122
+ ```js
123
+ document.documentElement.dataset.theme = 'modern';
124
+ document.documentElement.dataset.mode = 'dark';
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Uso
130
+
131
+ ### Ejemplo mínimo
132
+
133
+ ```jsx
134
+ import { BrowserRouter, Routes, Route } from 'react-router-dom';
135
+ import { LoginPage, LandingPage, DashboardHome } from '@imansi/templates';
136
+
137
+ export default function App() {
138
+ return (
139
+ <BrowserRouter>
140
+ <Routes>
141
+ <Route path="/" element={<LandingPage />} />
142
+ <Route path="/login" element={<LoginPage />} />
143
+ <Route path="/panel" element={<DashboardHome />} />
144
+ </Routes>
145
+ </BrowserRouter>
146
+ );
147
+ }
148
+ ```
149
+
150
+ ### Conectar un backend
151
+
152
+ ```jsx
153
+ import { LoginPage } from '@imansi/templates';
154
+
155
+ function LoginRoute() {
156
+ const [loading, setLoading] = useState(false);
157
+ const [error, setError] = useState(null);
158
+
159
+ async function handleSubmit({ correo, contrasena }) {
160
+ setLoading(true);
161
+ setError(null);
162
+
163
+ try {
164
+ const res = await fetch('/api/auth/login', {
165
+ method: 'POST',
166
+ headers: { 'Content-Type': 'application/json' },
167
+ body: JSON.stringify({ correo, contrasena }),
168
+ });
169
+
170
+ if (!res.ok) throw new Error('Credenciales inválidas');
171
+
172
+ const { token } = await res.json();
173
+ localStorage.setItem('token', token);
174
+ window.location.href = '/panel';
175
+ } catch (err) {
176
+ setError(err.message);
177
+ } finally {
178
+ setLoading(false);
179
+ }
180
+ }
181
+
182
+ return (
183
+ <LoginPage
184
+ onSubmit={handleSubmit}
185
+ loading={loading}
186
+ error={error}
187
+ oauthProviders={['github', 'google']}
188
+ onOAuthClick={(provider) => {
189
+ window.location.href = `/api/auth/oauth/${provider}`;
190
+ }}
191
+ />
192
+ );
193
+ }
194
+ ```
195
+
196
+ ---
197
+
198
+ ## Páginas disponibles
199
+
200
+ **29 páginas + 3 layouts** organizadas en 4 categorías.
201
+
202
+ ### Auth (5)
203
+
204
+ Páginas de autenticación. Todas usan el `AuthLayout` (split-pane con branding).
205
+
206
+ | Página | Descripción | Props principales |
207
+ |---|---|---|
208
+ | `LoginPage` | Login con email/password + OAuth + link a 2FA | `onSubmit`, `onOAuthClick`, `oauthProviders`, `loading`, `error` |
209
+ | `RegisterPage` | Registro con validación de contraseña y términos | `onSubmit`, `showName`, `showTerms`, `oauthProviders` |
210
+ | `ForgotPasswordPage` | Solicitud de recuperación con estado de éxito | `onSubmit`, `success`, `backToLoginHref` |
211
+ | `ResetPasswordPage` | Nueva contraseña con validación de coincidencia | `onSubmit`, `loginHref` |
212
+ | `Verify2FAPage` | Verificación de código de 6 dígitos | `onSubmit`, `onResend`, `codeLength`, `cancelHref` |
213
+
214
+ **Ejemplo:**
215
+ ```jsx
216
+ <LoginPage
217
+ brandName="Mi Empresa"
218
+ brandTagline="Bienvenido de nuevo"
219
+ oauthProviders={['github', 'google']}
220
+ registerHref="/registro"
221
+ forgotPasswordHref="/recuperar"
222
+ onSubmit={async ({ correo, contrasena }) => {
223
+ // tu lógica
224
+ }}
225
+ />
226
+ ```
227
+
228
+ ---
229
+
230
+ ### Marketing (8)
231
+
232
+ Páginas públicas para presentar tu producto, captar usuarios y mostrar contenido.
233
+
234
+ | Página | Descripción | Props principales |
235
+ |---|---|---|
236
+ | `LandingPage` | Hero con mockup + features + tabs de producto + testimonios | `heroTitle`, `heroHighlight`, `features`, `productTabs`, `testimonials` |
237
+ | `HomePage` | Home tipo negocio físico (panadería, restaurante, hotel) | `heroImage`, `aboutText`, `products`, `gallery`, `visitAddress` |
238
+ | `PricingPage` | Planes + tabla comparativa + FAQ | `plans`, `comparisonFeatures`, `faq` |
239
+ | `BlogPage` | Listado con filtros y búsqueda | `posts`, `categories` |
240
+ | `BlogPostPage` | Artículo con TOC + sidebar + related | `post`, `author`, `tocItems`, `relatedPosts` |
241
+ | `ContactPage` | Formulario + métodos + oficinas | `contactMethods`, `infoItems`, `offices`, `onSubmit` |
242
+ | `AboutPage` | Historia + valores + equipo + stats | `storyParagraphs`, `values`, `team`, `stats` |
243
+ | `DocsPage` | Documentación con sidebar + TOC + nav prev/next | `sections`, `tocItems`, `prevPage`, `nextPage` |
244
+
245
+ **Ejemplo:**
246
+ ```jsx
247
+ <LandingPage
248
+ heroBadge="Nuevo — v0.2.0"
249
+ heroTitle="Construí tu SaaS en días, no en meses"
250
+ heroHighlight="en días"
251
+ features={[
252
+ { title: 'Rápido', description: '...', icon: <Icon /> },
253
+ // ...
254
+ ]}
255
+ productTabs={[
256
+ { value: 'components', label: 'Componentes', title: '...', mockupView: 'issues' },
257
+ // ...
258
+ ]}
259
+ />
260
+ ```
261
+
262
+ ---
263
+
264
+ ### Dashboard (6)
265
+
266
+ Páginas administrativas. Todas usan `DashboardLayout` (sidebar + topbar + content).
267
+
268
+ | Página | Descripción | Props principales |
269
+ |---|---|---|
270
+ | `DashboardHome` | Panel con KPIs + chart + actividad + top items | `stats`, `chartData`, `activityItems`, `topItems` |
271
+ | `UsersTablePage` | Tabla con tabs, búsqueda, bulk actions, paginación | `users`, `tabs`, `statusMap`, `onAddClick`, `onRowAction` |
272
+ | `SettingsPage` | 4 tabs: Perfil, Cuenta, Notificaciones, Seguridad | `onSaveProfile`, `onSaveAccount`, `onSaveNotifications` |
273
+ | `ProfilePage` | Editar perfil con avatar + stats + seguridad | `profile`, `stats`, `onSave`, `onUploadAvatar` |
274
+ | `BillingPage` | Plan actual + tarjeta + planes disponibles + facturas | `currentPlan`, `paymentMethod`, `invoices`, `onUpgrade` |
275
+ | `NotificationsPage` | Centro de notificaciones con tabs y estados | `notifications`, `onMarkAll`, `onMarkRead`, `onNotificationClick` |
276
+
277
+ **Ejemplo:**
278
+ ```jsx
279
+ <DashboardHome
280
+ brandName="Mi App"
281
+ user={{ name: 'Juan', email: 'juan@ejemplo.com' }}
282
+ navSections={[
283
+ { title: 'Principal', items: [
284
+ { href: '/panel', label: 'Panel', icon: <Home /> },
285
+ { href: '/panel/usuarios', label: 'Usuarios', icon: <Users />, badge: '24' },
286
+ ]},
287
+ ]}
288
+ stats={[
289
+ { label: 'Ingresos', value: '$12,450', change: '+12.5%', trend: 'up' },
290
+ // ...
291
+ ]}
292
+ chartData={[
293
+ { label: 'Lun', value: 45 },
294
+ // ...
295
+ ]}
296
+ />
297
+ ```
298
+
299
+ ---
300
+
301
+ ### Extras (10)
302
+
303
+ Páginas especiales que cubren todos los casos restantes.
304
+
305
+ | Página | Descripción | Props principales |
306
+ |---|---|---|
307
+ | `ErrorPage` | 404, 500, 403 con código gigante | `code`, `title`, `subtitle`, `primaryCTA` |
308
+ | `ComingSoonPage` | Badge pulsante + email capture | `title`, `subtitle`, `onSubmit`, `socialLinks` |
309
+ | `MaintenancePage` | Countdown en vivo + status de servicios | `targetDate`, `statusItems`, `contactEmail` |
310
+ | `OnboardingPage` | Stepper de N pasos con contenido custom | `steps`, `onComplete`, `onSkip` |
311
+ | `CheckoutPage` | Formulario de pago + resumen sticky | `items`, `total`, `onSubmit` |
312
+ | `InvoicePage` | Factura imprimible con items y totales | `invoiceNumber`, `customer`, `items`, `total` |
313
+ | `ChangelogPage` | Timeline de releases con cambios tipados | `releases` |
314
+ | `CareersPage` | Beneficios + posiciones abiertas | `benefits`, `positions`, `ctaPrimary` |
315
+ | `LegalPage` | Términos con TOC lateral | `sections`, `contactEmail` |
316
+ | `StatusPage` | Estado de servicios en vivo + incidentes | `services`, `incidents`, `overallStatus` |
317
+
318
+ **Ejemplo:**
319
+ ```jsx
320
+ <CheckoutPage
321
+ title="Finalizar compra"
322
+ items={[
323
+ { id: 1, name: 'Plan Pro', description: 'Suscripción mensual', price: '$29', quantity: 1 },
324
+ ]}
325
+ subtotal="$29.00"
326
+ tax="$6.09"
327
+ total="$35.09"
328
+ onSubmit={async (data) => {
329
+ // procesar pago
330
+ }}
331
+ />
332
+ ```
333
+
334
+ ---
335
+
336
+ ### Layouts (3)
337
+
338
+ Layouts base reutilizables para organizar grupos de páginas.
339
+
340
+ | Layout | Descripción | Usado por |
341
+ |---|---|---|
342
+ | `AuthLayout` | Split-pane: branding a la izquierda, form a la derecha | LoginPage, RegisterPage, etc. |
343
+ | `MarketingLayout` | Header sticky + content + footer con columnas | LandingPage, PricingPage, BlogPage, etc. |
344
+ | `DashboardLayout` | Sidebar colapsable + topbar + content scrollable | DashboardHome, UsersTablePage, etc. |
345
+
346
+ **Ejemplo:**
347
+ ```jsx
348
+ import { DashboardLayout } from '@imansi/templates';
349
+
350
+ <DashboardLayout
351
+ brandName="Mi App"
352
+ navSections={[...]}
353
+ user={{ name: 'Juan', email: 'juan@ejemplo.com' }}
354
+ title="Mi página custom"
355
+ >
356
+ <p>Contenido personalizado</p>
357
+ </DashboardLayout>
358
+ ```
359
+
360
+ ---
361
+
362
+ ## Temas y modos
363
+
364
+ Funciona con los **6 temas** de `@imansi/tailwind`:
365
+
366
+ | Tema | Descripción |
367
+ |---|---|
368
+ | `minimal` | Monocromo, editorial, sin sombras |
369
+ | `modern` | Índigo vibrante, radius grande |
370
+ | `compact` | Verde esmeralda, dashboard denso |
371
+ | `warm` | Serif, crema y terracota |
372
+ | `red` | Rojo intenso, alta energía |
373
+ | `yellow` | Ámbar brillante, cálido |
374
+
375
+ Y los **2 modos**:
376
+
377
+ - `light` — Colores claros
378
+ - `dark` — Colores oscuros
379
+
380
+ Cambiar tema es instantáneo:
381
+
382
+ ```js
383
+ document.documentElement.dataset.theme = 'warm';
384
+ document.documentElement.dataset.mode = 'dark';
385
+ ```
386
+
387
+ **Recomendación por tipo de página:**
388
+
389
+ | Tipo | Tema ideal |
390
+ |---|---|
391
+ | Auth | `minimal` o `modern` |
392
+ | Landing SaaS | `modern` o `minimal` |
393
+ | Home negocio físico | `warm` |
394
+ | Dashboard | `compact` |
395
+ | Marca fuerte | `red` o `yellow` |
396
+
397
+ ---
398
+
399
+ ## Personalización
400
+
401
+ Todas las páginas aceptan props para personalizar **textos, rutas y callbacks**. No hay nada hardcodeado salvo valores por defecto razonables.
402
+
403
+ ### Textos
404
+
405
+ ```jsx
406
+ <LoginPage
407
+ title="Iniciar sesión"
408
+ subtitle="Ingresá con tu cuenta"
409
+ submitText="Entrar"
410
+ submitLoadingText="Ingresando..."
411
+ emailLabel="Tu correo"
412
+ passwordLabel="Tu contraseña"
413
+ forgotPasswordText="¿La olvidaste?"
414
+ registerText="¿No tenés cuenta?"
415
+ registerLinkText="Crear una"
416
+ />
417
+ ```
418
+
419
+ ### Rutas
420
+
421
+ ```jsx
422
+ <LoginPage
423
+ registerHref="/registro"
424
+ forgotPasswordHref="/recuperar"
425
+ twoFactorHref="/verificar-2fa"
426
+ />
427
+ ```
428
+
429
+ ### Callbacks
430
+
431
+ ```jsx
432
+ <LoginPage
433
+ onSubmit={async ({ correo, contrasena, recordarme }) => {
434
+ // tu lógica de login
435
+ }}
436
+ onOAuthClick={(provider) => {
437
+ // tu lógica de OAuth
438
+ }}
439
+ error={errorExterno}
440
+ loading={loadingExterno}
441
+ />
442
+ ```
443
+
444
+ ### Branding
445
+
446
+ ```jsx
447
+ <LoginPage
448
+ brandName="Mi Empresa"
449
+ brandTagline="Autenticación moderna"
450
+ brandLogo={<img src="/logo.svg" alt="Logo" />}
451
+ />
452
+ ```
453
+
454
+ ### Footer
455
+
456
+ ```jsx
457
+ <LoginPage
458
+ footer="Al continuar aceptás nuestros Términos y Privacidad."
459
+ />
460
+ ```
461
+
462
+ ---
463
+
464
+ ## Anatomía
465
+
466
+ ```
467
+ @imansi/templates/
468
+ ├── src/
469
+ │ ├── auth/ (5 páginas)
470
+ │ │ ├── LoginPage.jsx
471
+ │ │ ├── RegisterPage.jsx
472
+ │ │ ├── ForgotPasswordPage.jsx
473
+ │ │ ├── ResetPasswordPage.jsx
474
+ │ │ └── Verify2FAPage.jsx
475
+ │ │
476
+ │ ├── marketing/ (8 páginas)
477
+ │ │ ├── LandingPage.jsx
478
+ │ │ ├── HomePage.jsx
479
+ │ │ ├── PricingPage.jsx
480
+ │ │ ├── BlogPage.jsx
481
+ │ │ ├── BlogPostPage.jsx
482
+ │ │ ├── ContactPage.jsx
483
+ │ │ ├── AboutPage.jsx
484
+ │ │ └── DocsPage.jsx
485
+ │ │
486
+ │ ├── dashboard/ (6 páginas)
487
+ │ │ ├── DashboardHome.jsx
488
+ │ │ ├── UsersTablePage.jsx
489
+ │ │ ├── SettingsPage.jsx
490
+ │ │ ├── ProfilePage.jsx
491
+ │ │ ├── BillingPage.jsx
492
+ │ │ └── NotificationsPage.jsx
493
+ │ │
494
+ │ ├── extra/ (10 páginas)
495
+ │ │ ├── ErrorPage.jsx
496
+ │ │ ├── ComingSoonPage.jsx
497
+ │ │ ├── MaintenancePage.jsx
498
+ │ │ ├── OnboardingPage.jsx
499
+ │ │ ├── CheckoutPage.jsx
500
+ │ │ ├── InvoicePage.jsx
501
+ │ │ ├── ChangelogPage.jsx
502
+ │ │ ├── CareersPage.jsx
503
+ │ │ ├── LegalPage.jsx
504
+ │ │ └── StatusPage.jsx
505
+ │ │
506
+ │ ├── layouts/ (3 layouts)
507
+ │ │ ├── AuthLayout.jsx
508
+ │ │ ├── MarketingLayout.jsx
509
+ │ │ └── DashboardLayout.jsx
510
+ │ │
511
+ │ └── index.js (entry point)
512
+
513
+ ├── package.json
514
+ ├── README.md
515
+ └── LICENSE
516
+ ```
517
+
518
+ **Total: 32 archivos** (29 páginas + 3 layouts).
519
+
520
+ ---
521
+
522
+ ## Roadmap
523
+
524
+ ### ✅ v0.1.0 — Primera versión (actual)
525
+
526
+ - [x] 5 páginas de auth
527
+ - [x] 8 páginas de marketing
528
+ - [x] 6 páginas de dashboard
529
+ - [x] 10 páginas extras
530
+ - [x] 3 layouts base
531
+ - [x] Compatible con 6 temas × 2 modos
532
+ - [x] 100% responsive
533
+
534
+ ### ⏭️ Próximas versiones
535
+
536
+ - [ ] `v0.2.0` — Más plantillas (restaurante, hotel, gimnasio, clínica)
537
+ - [ ] `v0.3.0` — Variantes de páginas existentes (dark-first, minimal, etc.)
538
+ - [ ] `v1.0.0` — Estabilización de API
539
+
540
+ ### 🌱 Ecosistema Imansi completo
541
+
542
+ - [x] `@imansi/tailwind` — Design tokens + 6 temas
543
+ - [x] `@imansi/ui` — 50+ componentes
544
+ - [x] `@imansi/templates` — 29 páginas + 3 layouts
545
+ - [ ] `create-imansi-app` — CLI de scaffolding
546
+ - [ ] `@imansi/auth-react` — Hooks de autenticación (en desarrollo)
547
+ - [ ] `@imansi/dashboard` — Widgets avanzados
548
+
549
+ ---
550
+
551
+ ## Licencia
552
+
553
+ [MIT](./LICENSE) © 2026 Imansi
554
+
555
+ ---
556
+
557
+ **Hecho con ❤️ por [Imansi](https://github.com/imansi)**
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@imansi/templates",
3
+ "version": "0.1.0",
4
+ "description": "Páginas completas listas para usar del ecosistema Imansi: landing, blog, login, dashboard y más. Puramente visuales.",
5
+ "keywords": [
6
+ "imansi",
7
+ "templates",
8
+ "react",
9
+ "landing",
10
+ "blog",
11
+ "login",
12
+ "dashboard",
13
+ "tailwind"
14
+ ],
15
+ "license": "MIT",
16
+ "author": "Imansi",
17
+ "type": "module",
18
+ "main": "./src/index.js",
19
+ "files": [
20
+ "src/",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "exports": {
25
+ ".": "./src/index.js",
26
+ "./package.json": "./package.json"
27
+ },
28
+ "peerDependencies": {
29
+ "@imansi/tailwind": "^0.1.1",
30
+ "@imansi/ui": "^0.1.1",
31
+ "react": "^18.0.0 || ^19.0.0",
32
+ "react-dom": "^18.0.0 || ^19.0.0",
33
+ "react-router-dom": "^6.0.0"
34
+ }
35
+ }