@edtools/cli 0.3.2 → 0.3.3

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.
@@ -0,0 +1,305 @@
1
+ <!DOCTYPE html>
2
+ <html lang="es">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title><%= metadata.title %></title>
7
+ <meta name="description" content="<%= metadata.description %>">
8
+ <meta name="keywords" content="<%= metadata.keywords.join(', ') %>">
9
+ <meta name="author" content="<%= metadata.author %>">
10
+ <meta name="date" content="<%= metadata.datePublished %>">
11
+
12
+ <!-- Open Graph / Social Media -->
13
+ <meta property="og:type" content="article">
14
+ <meta property="og:title" content="<%= metadata.title %>">
15
+ <meta property="og:description" content="<%= metadata.description %>">
16
+ <meta property="article:published_time" content="<%= metadata.datePublished %>">
17
+ <meta property="article:author" content="<%= metadata.author %>">
18
+ <meta property="article:section" content="<%= metadata.category %>">
19
+ <% metadata.keywords.forEach(keyword => { %>
20
+ <meta property="article:tag" content="<%= keyword %>">
21
+ <% }) %>
22
+
23
+ <!-- Schema.org structured data -->
24
+ <script type="application/ld+json">
25
+ <%- schemaOrg %>
26
+ </script>
27
+
28
+ <style>
29
+ :root {
30
+ --primary-color: #2563eb;
31
+ --text-color: #1f2937;
32
+ --text-light: #6b7280;
33
+ --border-color: #e5e7eb;
34
+ --bg-light: #f9fafb;
35
+ }
36
+
37
+ * {
38
+ margin: 0;
39
+ padding: 0;
40
+ box-sizing: border-box;
41
+ }
42
+
43
+ body {
44
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
45
+ line-height: 1.6;
46
+ color: var(--text-color);
47
+ max-width: 800px;
48
+ margin: 0 auto;
49
+ padding: 2rem 1rem;
50
+ }
51
+
52
+ article {
53
+ background: white;
54
+ }
55
+
56
+ h1 {
57
+ font-size: 2.5rem;
58
+ font-weight: 700;
59
+ line-height: 1.2;
60
+ margin-bottom: 1rem;
61
+ color: var(--text-color);
62
+ }
63
+
64
+ h2 {
65
+ font-size: 1.875rem;
66
+ font-weight: 600;
67
+ margin-top: 2.5rem;
68
+ margin-bottom: 1rem;
69
+ color: var(--text-color);
70
+ }
71
+
72
+ h3 {
73
+ font-size: 1.5rem;
74
+ font-weight: 600;
75
+ margin-top: 2rem;
76
+ margin-bottom: 0.75rem;
77
+ color: var(--text-color);
78
+ }
79
+
80
+ h4 {
81
+ font-size: 1.25rem;
82
+ font-weight: 600;
83
+ margin-top: 1.5rem;
84
+ margin-bottom: 0.5rem;
85
+ color: var(--text-color);
86
+ }
87
+
88
+ p {
89
+ margin-bottom: 1rem;
90
+ color: var(--text-color);
91
+ }
92
+
93
+ a {
94
+ color: var(--primary-color);
95
+ text-decoration: none;
96
+ }
97
+
98
+ a:hover {
99
+ text-decoration: underline;
100
+ }
101
+
102
+ .intro {
103
+ font-size: 1.125rem;
104
+ color: var(--text-light);
105
+ margin-bottom: 2rem;
106
+ padding-bottom: 2rem;
107
+ border-bottom: 1px solid var(--border-color);
108
+ }
109
+
110
+ section {
111
+ margin-bottom: 2.5rem;
112
+ }
113
+
114
+ .comparison-table {
115
+ width: 100%;
116
+ border-collapse: collapse;
117
+ margin: 1.5rem 0;
118
+ font-size: 0.9375rem;
119
+ }
120
+
121
+ .comparison-table thead {
122
+ background: var(--bg-light);
123
+ }
124
+
125
+ .comparison-table th,
126
+ .comparison-table td {
127
+ padding: 0.75rem 1rem;
128
+ text-align: left;
129
+ border: 1px solid var(--border-color);
130
+ }
131
+
132
+ .comparison-table th {
133
+ font-weight: 600;
134
+ color: var(--text-color);
135
+ }
136
+
137
+ .comparison-table tbody tr:hover {
138
+ background: var(--bg-light);
139
+ }
140
+
141
+ .content-list {
142
+ margin: 1.5rem 0;
143
+ padding-left: 1.5rem;
144
+ }
145
+
146
+ .content-list li {
147
+ margin-bottom: 1rem;
148
+ }
149
+
150
+ .content-list strong {
151
+ color: var(--text-color);
152
+ display: block;
153
+ margin-bottom: 0.25rem;
154
+ }
155
+
156
+ .code-block {
157
+ margin: 1.5rem 0;
158
+ background: var(--bg-light);
159
+ border: 1px solid var(--border-color);
160
+ border-radius: 0.375rem;
161
+ overflow: hidden;
162
+ }
163
+
164
+ .code-caption {
165
+ padding: 0.5rem 1rem;
166
+ background: #e5e7eb;
167
+ font-size: 0.875rem;
168
+ font-weight: 600;
169
+ border-bottom: 1px solid var(--border-color);
170
+ }
171
+
172
+ .code-block pre {
173
+ padding: 1rem;
174
+ overflow-x: auto;
175
+ }
176
+
177
+ .code-block code {
178
+ font-family: 'Monaco', 'Courier New', monospace;
179
+ font-size: 0.875rem;
180
+ line-height: 1.5;
181
+ }
182
+
183
+ .conclusion {
184
+ margin-top: 3rem;
185
+ padding-top: 2rem;
186
+ border-top: 1px solid var(--border-color);
187
+ }
188
+
189
+ .cta {
190
+ margin-top: 3rem;
191
+ padding: 2rem;
192
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
193
+ border-radius: 0.5rem;
194
+ text-align: center;
195
+ }
196
+
197
+ .cta a {
198
+ display: inline-block;
199
+ padding: 1rem 2rem;
200
+ background: white;
201
+ color: var(--primary-color);
202
+ font-weight: 600;
203
+ font-size: 1.125rem;
204
+ border-radius: 0.375rem;
205
+ transition: transform 0.2s;
206
+ }
207
+
208
+ .cta a:hover {
209
+ transform: translateY(-2px);
210
+ text-decoration: none;
211
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
212
+ }
213
+
214
+ .related-posts {
215
+ margin-top: 4rem;
216
+ padding-top: 2rem;
217
+ border-top: 2px solid var(--border-color);
218
+ }
219
+
220
+ .related-posts h3 {
221
+ margin-top: 0;
222
+ margin-bottom: 1.5rem;
223
+ }
224
+
225
+ .related-posts ul {
226
+ list-style: none;
227
+ padding: 0;
228
+ }
229
+
230
+ .related-posts li {
231
+ margin-bottom: 0.75rem;
232
+ }
233
+
234
+ .related-posts a {
235
+ font-weight: 500;
236
+ }
237
+
238
+ .seo-badge {
239
+ display: inline-block;
240
+ padding: 0.25rem 0.75rem;
241
+ background: <%= seoScore >= 80 ? '#10b981' : seoScore >= 60 ? '#f59e0b' : '#ef4444' %>;
242
+ color: white;
243
+ border-radius: 9999px;
244
+ font-size: 0.875rem;
245
+ font-weight: 600;
246
+ margin-bottom: 1rem;
247
+ }
248
+ </style>
249
+ </head>
250
+ <body>
251
+ <article>
252
+ <!-- SEO Badge (hidden by default, can be shown in preview mode) -->
253
+ <!-- <div class="seo-badge">SEO Score: <%= seoScore %>/100</div> -->
254
+
255
+ <h1><%= metadata.title %></h1>
256
+
257
+ <div class="intro">
258
+ <%- intro %>
259
+ </div>
260
+
261
+ <% sections.forEach(section => { %>
262
+ <section>
263
+ <h<%= section.level %>><%= section.heading %></h<%= section.level %>>
264
+ <%- section.content %>
265
+ </section>
266
+ <% }) %>
267
+
268
+ <div class="conclusion">
269
+ <%- conclusion %>
270
+ </div>
271
+
272
+ <div class="cta">
273
+ <a href="<%= cta.url %>"><%= cta.text %></a>
274
+ </div>
275
+
276
+ <% if (relatedPosts && relatedPosts.length > 0) { %>
277
+ <div class="related-posts">
278
+ <h3>Artículos relacionados</h3>
279
+ <ul>
280
+ <% relatedPosts.forEach(post => { %>
281
+ <li>
282
+ <a href="<%= post.url %>"><%= post.title %></a>
283
+ <% if (post.excerpt) { %>
284
+ <p style="color: var(--text-light); font-size: 0.875rem; margin-top: 0.25rem;">
285
+ <%= post.excerpt %>
286
+ </p>
287
+ <% } %>
288
+ </li>
289
+ <% }) %>
290
+ </ul>
291
+ </div>
292
+ <% } %>
293
+ </article>
294
+
295
+ <!-- AI-friendly metadata in comments for LLM parsing -->
296
+ <!--
297
+ METADATA:
298
+ - Title: <%= metadata.title %>
299
+ - Category: <%= metadata.category %>
300
+ - Keywords: <%= metadata.keywords.join(', ') %>
301
+ - Published: <%= metadata.datePublished %>
302
+ - SEO Score: <%= seoScore %>/100
303
+ -->
304
+ </body>
305
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edtools/cli",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Generate SEO-optimized content for LLM discovery - CLI tool",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "scripts": {
17
17
  "build": "tsc && tsup src/index.ts src/cli/index.ts --format esm --dts && npm run copy-templates",
18
- "copy-templates": "mkdir -p dist/adapters/html/templates && cp src/adapters/html/templates/*.ejs dist/adapters/html/templates/",
18
+ "copy-templates": "mkdir -p dist/adapters/html/templates dist/templates && cp src/adapters/html/templates/*.ejs dist/adapters/html/templates/ && cp src/adapters/html/templates/*.ejs dist/templates/",
19
19
  "dev": "tsc --watch",
20
20
  "test": "echo \"Tests coming soon\"",
21
21
  "prepublishOnly": "npm run build"