@jjlmoya/utils-social 1.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 (85) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +23 -0
  3. package/src/category/i18n/es.ts +23 -0
  4. package/src/category/i18n/fr.ts +23 -0
  5. package/src/category/index.ts +13 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +27 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/seo_length.test.ts +22 -0
  21. package/src/tests/tool_validation.test.ts +17 -0
  22. package/src/tool/redditFormatter/bibliography.astro +14 -0
  23. package/src/tool/redditFormatter/component.astro +246 -0
  24. package/src/tool/redditFormatter/i18n/en.ts +193 -0
  25. package/src/tool/redditFormatter/i18n/es.ts +193 -0
  26. package/src/tool/redditFormatter/i18n/fr.ts +193 -0
  27. package/src/tool/redditFormatter/index.ts +34 -0
  28. package/src/tool/redditFormatter/logic.ts +24 -0
  29. package/src/tool/redditFormatter/seo.astro +14 -0
  30. package/src/tool/redditFormatter/ui.ts +13 -0
  31. package/src/tool/safeZones/bibliography.astro +14 -0
  32. package/src/tool/safeZones/component.astro +857 -0
  33. package/src/tool/safeZones/i18n/en.ts +244 -0
  34. package/src/tool/safeZones/i18n/es.ts +244 -0
  35. package/src/tool/safeZones/i18n/fr.ts +244 -0
  36. package/src/tool/safeZones/index.ts +34 -0
  37. package/src/tool/safeZones/logic.ts +137 -0
  38. package/src/tool/safeZones/seo.astro +14 -0
  39. package/src/tool/safeZones/ui.ts +34 -0
  40. package/src/tool/socialImageResizer/bibliography.astro +14 -0
  41. package/src/tool/socialImageResizer/component.astro +498 -0
  42. package/src/tool/socialImageResizer/i18n/en.ts +211 -0
  43. package/src/tool/socialImageResizer/i18n/es.ts +211 -0
  44. package/src/tool/socialImageResizer/i18n/fr.ts +211 -0
  45. package/src/tool/socialImageResizer/index.ts +34 -0
  46. package/src/tool/socialImageResizer/logic.ts +133 -0
  47. package/src/tool/socialImageResizer/seo.astro +14 -0
  48. package/src/tool/socialImageResizer/ui.ts +7 -0
  49. package/src/tool/socialValueCalculator/bibliography.astro +14 -0
  50. package/src/tool/socialValueCalculator/component.astro +829 -0
  51. package/src/tool/socialValueCalculator/i18n/en.ts +310 -0
  52. package/src/tool/socialValueCalculator/i18n/es.ts +310 -0
  53. package/src/tool/socialValueCalculator/i18n/fr.ts +310 -0
  54. package/src/tool/socialValueCalculator/index.ts +34 -0
  55. package/src/tool/socialValueCalculator/logic.ts +60 -0
  56. package/src/tool/socialValueCalculator/seo.astro +14 -0
  57. package/src/tool/socialValueCalculator/ui.ts +31 -0
  58. package/src/tool/tinderPhotoOptimizer/bibliography.astro +14 -0
  59. package/src/tool/tinderPhotoOptimizer/component.astro +1514 -0
  60. package/src/tool/tinderPhotoOptimizer/i18n/en.ts +248 -0
  61. package/src/tool/tinderPhotoOptimizer/i18n/es.ts +248 -0
  62. package/src/tool/tinderPhotoOptimizer/i18n/fr.ts +248 -0
  63. package/src/tool/tinderPhotoOptimizer/index.ts +34 -0
  64. package/src/tool/tinderPhotoOptimizer/logic.ts +199 -0
  65. package/src/tool/tinderPhotoOptimizer/seo.astro +14 -0
  66. package/src/tool/tinderPhotoOptimizer/ui.ts +37 -0
  67. package/src/tool/youtubeThumbnail/bibliography.astro +14 -0
  68. package/src/tool/youtubeThumbnail/component.astro +419 -0
  69. package/src/tool/youtubeThumbnail/i18n/en.ts +207 -0
  70. package/src/tool/youtubeThumbnail/i18n/es.ts +207 -0
  71. package/src/tool/youtubeThumbnail/i18n/fr.ts +207 -0
  72. package/src/tool/youtubeThumbnail/index.ts +34 -0
  73. package/src/tool/youtubeThumbnail/logic.ts +7 -0
  74. package/src/tool/youtubeThumbnail/seo.astro +14 -0
  75. package/src/tool/youtubeThumbnail/ui.ts +13 -0
  76. package/src/tool/youtubeThumbnailPreviewer/bibliography.astro +14 -0
  77. package/src/tool/youtubeThumbnailPreviewer/component.astro +791 -0
  78. package/src/tool/youtubeThumbnailPreviewer/i18n/en.ts +321 -0
  79. package/src/tool/youtubeThumbnailPreviewer/i18n/es.ts +321 -0
  80. package/src/tool/youtubeThumbnailPreviewer/i18n/fr.ts +321 -0
  81. package/src/tool/youtubeThumbnailPreviewer/index.ts +34 -0
  82. package/src/tool/youtubeThumbnailPreviewer/seo.astro +14 -0
  83. package/src/tool/youtubeThumbnailPreviewer/ui.ts +19 -0
  84. package/src/tools.ts +10 -0
  85. package/src/types.ts +72 -0
@@ -0,0 +1,244 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { SafeZonesUI } from '../ui';
4
+
5
+ const slug = 'social-safe-zones';
6
+ const title = 'Social Safe Zones: Video Simulator for TikTok, Reels & Shorts';
7
+ const description =
8
+ 'Preview your images and videos with the real social media interface. Ensure your content is always visible and avoid accidental cropping.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: "What are 'Safe Zones' on social media?",
13
+ answer:
14
+ "They are the areas of the screen where content is visible without risk of being covered by interface elements, such as the username, description, interaction buttons (like, share) or automatic cropping applied by some devices.",
15
+ },
16
+ {
17
+ question: 'Why does my TikTok video look cropped top and bottom?',
18
+ answer:
19
+ 'TikTok uses a 9:16 aspect ratio. If your video is wider, the app will zoom to fill the screen, causing cropping. Also, the bottom interface covers part of the video, so important elements should be centered.',
20
+ },
21
+ {
22
+ question: 'Is the safe zone the same for Instagram Reels and YouTube Shorts?',
23
+ answer:
24
+ 'They are very similar but not identical. YouTube Shorts buttons are positioned differently from Reels. Our tool lets you switch between platforms to verify your design across all of them.',
25
+ },
26
+ {
27
+ question: 'What happens if I put text in the bottom right corner?',
28
+ answer:
29
+ 'It will likely be invisible or very hard to read, as that is where the profile, heart and comment icons are located. Ideally, keep texts and faces in the central-upper area (Safe Zone).',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Load your image or video',
36
+ text: 'Upload the file you want to preview. Processing is local and private — nothing is uploaded to the internet.',
37
+ },
38
+ {
39
+ name: 'Select the platform',
40
+ text: 'Choose between TikTok, Instagram Reels or YouTube Shorts to activate the corresponding interface overlay.',
41
+ },
42
+ {
43
+ name: 'Check readability',
44
+ text: "Verify whether texts, subtitles or key brand elements are covered by the social network's icons.",
45
+ },
46
+ {
47
+ name: 'Adjust and export',
48
+ text: "If something is hidden, move the element in your original video editor and test again until it fits perfectly.",
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowToThing> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
83
+ inLanguage: 'en',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<SafeZonesUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Frequently Asked Questions',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Official Platform Documentation',
93
+ bibliography: [
94
+ {
95
+ name: 'TikTok Creator Portal: Video optimization and safe zones',
96
+ url: 'https://www.tiktok.com/creators/creator-portal/en-us/foundation/video-optimization/',
97
+ },
98
+ {
99
+ name: 'Instagram Business: Best practices for Reels',
100
+ url: 'https://business.instagram.com/creators/reels-best-practices',
101
+ },
102
+ {
103
+ name: 'YouTube Help: Create YouTube Shorts',
104
+ url: 'https://support.google.com/youtube/answer/10343433',
105
+ },
106
+ {
107
+ name: 'Meta for Creators: Safe zones and aspect ratios for video',
108
+ url: 'https://www.facebook.com/business/help/103816146375741',
109
+ },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ {
115
+ type: 'title',
116
+ text: 'Master Guide to Safe Zones: Optimize your Reels, TikToks and Shorts',
117
+ level: 2,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'In the saturated world of vertical content, the first impression is technical. The biggest mistake creators make is ignoring how their <strong>video or image</strong> interacts with the platform\'s native interface. Each social network (TikTok, Instagram Reels and YouTube Shorts) overlays layers of buttons, text and profiles that can nullify the visual impact of your composition.',
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'This tool lets you load your media files and preview exactly which parts of your frame will be consumed by the interface. It\'s not just about <strong>subtitles</strong>; it\'s about ensuring that the faces, products or main actions in your video aren\'t buried under a "Like" button or a lengthy description.',
126
+ },
127
+ {
128
+ type: 'grid',
129
+ columns: [
130
+ {
131
+ type: 'card',
132
+ title: 'TikTok: The most invasive interface',
133
+ html: '<p>TikTok has the densest interface. On the right side, there is a column of icons occupying approximately 15% of the width. At the bottom, the description can extend to 4 or 5 lines, covering nearly a third of the screen from below.</p><ul><li><strong>Bottom margin:</strong> Leave the last 250px free to avoid the description text and username.</li><li><strong>Right margin:</strong> Avoid placing text within 100px of the right edge.</li><li><strong>Top:</strong> The "Following" and "For You" buttons occupy the upper central strip.</li></ul>',
134
+ },
135
+ {
136
+ type: 'card',
137
+ title: 'IG Reels: The feed factor',
138
+ html: '<p>Unlike TikTok, Instagram Reels crops the video to a 4:5 format when viewed from the main feed. This means that if you place vital information in the top or bottom 15% of your 9:16 video, it will disappear in the feed.</p><ul><li><strong>The 4:5 rule:</strong> Keep titles and key elements within the central zone for feed visibility.</li><li><strong>Interface:</strong> Reels icons are more subtle than TikTok\'s, allowing a bit more lateral margin.</li><li><strong>Audio button:</strong> Located bottom right, it usually covers much less than TikTok\'s spinning disc.</li></ul>',
139
+ },
140
+ ],
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'YouTube Shorts: Watch the right side',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'YouTube Shorts has an asymmetric interface. The subscribe button is very prominent and solid-colored (usually black or white), creating an important visual blind spot in the bottom right.',
150
+ },
151
+ {
152
+ type: 'list',
153
+ items: [
154
+ '<strong>Right margin:</strong> Avoid placing text or important elements in the bottom-right 20%.',
155
+ '<strong>Bottom margin:</strong> Leave the last 150px free to avoid the description text and username.',
156
+ '<strong>Top:</strong> The "Subscribe" and "More" buttons occupy the upper central strip.',
157
+ ],
158
+ },
159
+ {
160
+ type: 'title',
161
+ text: 'Critical Questions on Vertical Design',
162
+ level: 2,
163
+ },
164
+ {
165
+ type: 'title',
166
+ text: 'Where to place key elements (faces, text, product)?',
167
+ level: 3,
168
+ },
169
+ {
170
+ type: 'paragraph',
171
+ html: 'The "Golden Zone" for the main action is the central third of the video. If you are filming a person, make sure their eyes and mouth are within this zone. Important graphic elements should be slightly shifted upward from the geometric center to avoid the bottom description.',
172
+ },
173
+ {
174
+ type: 'title',
175
+ text: 'Why does my video look blurry once uploaded?',
176
+ level: 3,
177
+ },
178
+ {
179
+ type: 'paragraph',
180
+ html: 'It is often not the quality but the scaling. Always record in 1080x1920 at 30 or 60 fps. Avoid 4K if you are applying many heavy effects, as platforms aggressively compress large files.',
181
+ },
182
+ {
183
+ type: 'title',
184
+ text: 'What about phone bezels?',
185
+ level: 3,
186
+ },
187
+ {
188
+ type: 'paragraph',
189
+ html: 'Remember that modern phones have notches or camera holes on screen. This tool includes a top safety margin so your content does not conflict with the clock or system icons (battery, signal).',
190
+ },
191
+ {
192
+ type: 'title',
193
+ text: 'Anatomy of a Viral Video',
194
+ level: 2,
195
+ },
196
+ {
197
+ type: 'paragraph',
198
+ html: 'Designing for social media is not just aesthetics — it is <strong>usability</strong>. If a user has to struggle to read text because the platform\'s icons are covering it, they will simply swipe to the next video. Retention (Watch Time) drops sharply when there is visual friction.',
199
+ },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'On YouTube Shorts, for example, the interface is asymmetric. The subscribe button is very prominent and solid-colored (usually black or white), creating an important visual blind spot. By using this simulator, you can adjust the opacity to understand how your color palette interacts with the native UI colors.',
203
+ },
204
+ {
205
+ type: 'tip',
206
+ title: 'Creative Quality Control Tool',
207
+ html: '<p>Designed for creators who leave nothing to chance.</p>',
208
+ },
209
+ ],
210
+ ui: {
211
+ labelConfig: 'Settings',
212
+ labelPlatform: 'Target Platform',
213
+ labelUpload: 'Upload Content',
214
+ uploadPrompt: 'Select image or video',
215
+ uploadLink: 'Or use an example',
216
+ loadContent: 'Load your content',
217
+ labelOpacity: 'Interface Relief',
218
+ labelMask: 'Grey Out Critical Zones',
219
+ labelGrid: 'Rule of Thirds',
220
+ btnReset: 'Reset Canvas',
221
+ bannerTiktok: 'Simulating TikTok 9:16',
222
+ bannerReels: 'Simulating Instagram Reels 9:16',
223
+ bannerShorts: 'Simulating YouTube Shorts 9:16',
224
+ nameTiktok: 'TikTok',
225
+ nameReels: 'IG Reels',
226
+ nameShorts: 'YT Shorts',
227
+ ttFollowing: 'Following',
228
+ ttForYou: 'For You',
229
+ ttDescription: 'Real interface design for content creators. #uxdesign #socialmedia',
230
+ ttAudio: 'jjlmoya - Original Sound',
231
+ ttNavHome: 'Home',
232
+ ttNavFriends: 'Friends',
233
+ ttNavInbox: 'Inbox',
234
+ ttNavProfile: 'Profile',
235
+ reelsFollow: 'Follow',
236
+ reelsDescription: 'This interface is identical to the real one. #reels #ux #simulator',
237
+ reelsAudio: 'Trending Music - Original Audio',
238
+ shortsSubscribe: 'SUBSCRIBE',
239
+ shortsDislike: 'Dislike',
240
+ shortsShare: 'Share',
241
+ shortsRemix: 'Remix',
242
+ shortsDescription: 'Simulating real interfaces for Shorts! #youtube #shorts',
243
+ },
244
+ };
@@ -0,0 +1,244 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { SafeZonesUI } from '../ui';
4
+
5
+ const slug = 'simulador-redes';
6
+ const title = 'Social Safe Zones: Simulador de Video para TikTok, Reels y Shorts';
7
+ const description =
8
+ 'Previsualiza tus imágenes y videos con la interfaz real de las redes sociales. Asegura que tu contenido sea siempre visible y evita recortes accidentales.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: "¿Qué son las 'Safe Zones' en redes sociales?",
13
+ answer:
14
+ 'Son las áreas de la pantalla donde el contenido es visible sin riesgo de ser tapado por elementos de la interfaz, como el nombre de usuario, la descripción, los botones de interacción (like, compartir) o el recorte automático que aplican algunos dispositivos.',
15
+ },
16
+ {
17
+ question: '¿Por qué mi video de TikTok se ve cortado arriba y abajo?',
18
+ answer:
19
+ 'TikTok utiliza una relación de aspecto 9:16. Si tu video es más ancho, la app hará zoom para llenar la pantalla, lo que provoca recortes. Además, la interfaz inferior tapa parte del video, por lo que los elementos importantes deben estar centrados.',
20
+ },
21
+ {
22
+ question: '¿Es la misma zona segura para Instagram Reels que para YouTube Shorts?',
23
+ answer:
24
+ 'Son muy parecidas pero no idénticas. Los botones de YouTube Shorts están posicionados de forma diferente a los de Reels. Nuestra herramienta permite cambiar entre plataformas para que verifiques tu diseño en todas ellas.',
25
+ },
26
+ {
27
+ question: '¿Qué pasa si pongo texto en la esquina inferior derecha?',
28
+ answer:
29
+ 'Probablemente sea invisible o muy difícil de leer, ya que es donde se sitúan los iconos de perfil, corazón y comentarios. Lo ideal es mantener los textos y caras en la zona central-superior (Safe Zone).',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Cargar tu imagen o video',
36
+ text: 'Sube el archivo que quieres previsualizar. El procesamiento es local y privado, nada se sube a internet.',
37
+ },
38
+ {
39
+ name: 'Seleccionar la plataforma',
40
+ text: 'Elige entre TikTok, Instagram Reels o YouTube Shorts para activar el overlay de interfaz correspondiente.',
41
+ },
42
+ {
43
+ name: 'Verificar la legibilidad',
44
+ text: 'Comprueba si los textos, subtítulos o elementos clave de tu marca quedan tapados por los iconos de la red social.',
45
+ },
46
+ {
47
+ name: 'Ajustar y exportar',
48
+ text: 'Si ves que algo queda oculto, mueve el elemento en tu editor de video original y vuelve a probar hasta que encaje perfectamente.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowToThing> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'es',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<SafeZonesUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Preguntas Frecuentes',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Documentación Oficial de Plataformas',
93
+ bibliography: [
94
+ {
95
+ name: 'TikTok Creator Portal: Video optimization and safe zones',
96
+ url: 'https://www.tiktok.com/creators/creator-portal/en-us/foundation/video-optimization/',
97
+ },
98
+ {
99
+ name: 'Instagram Business: Best practices for Reels',
100
+ url: 'https://business.instagram.com/creators/reels-best-practices',
101
+ },
102
+ {
103
+ name: 'YouTube Help: Create YouTube Shorts',
104
+ url: 'https://support.google.com/youtube/answer/10343433',
105
+ },
106
+ {
107
+ name: 'Meta for Creators: Safe zones and aspect ratios for video',
108
+ url: 'https://www.facebook.com/business/help/103816146375741',
109
+ },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ {
115
+ type: 'title',
116
+ text: 'Guía Maestra de Zonas Seguras: Optimiza tus Reels, TikToks y Shorts',
117
+ level: 2,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'En el saturado mundo del contenido vertical, la primera impresión es técnica. El mayor error de los creadores es ignorar cómo interactúa su <strong>vídeo o imagen</strong> con la interfaz nativa de la plataforma. Cada red social (TikTok, Instagram Reels y YouTube Shorts) superpone capas de botones, textos y perfiles que pueden anular el impacto visual de tu composición.',
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Esta herramienta te permite cargar tus archivos multimedia y previsualizar exactamente qué partes de tu encuadre serán devoradas por la interfaz. No se trata solo de <strong>subtítulos</strong>; se trata de asegurar que los rostros, productos o acciones principales de tu vídeo no queden enterrados bajo un botón de "Like" o una descripción kilométrica.',
126
+ },
127
+ {
128
+ type: 'grid',
129
+ columns: [
130
+ {
131
+ type: 'card',
132
+ title: 'TikTok: La interfaz más invasiva',
133
+ html: '<p>TikTok posee la interfaz más densa. En la parte derecha, tenemos una columna de iconos que ocupa aproximadamente el 15% del ancho. En la parte inferior, la descripción puede extenderse hasta 4 o 5 líneas si es larga, tapando casi un tercio de la pantalla desde abajo.</p><ul><li><strong>Margen Inferior:</strong> Deja libre los últimos 250px para evitar el texto de la descripción y el nombre de usuario.</li><li><strong>Margen Derecho:</strong> Evita colocar texto a menos de 100px del borde derecho.</li><li><strong>Cénit:</strong> Los botones de "Siguiendo" y "Para ti" ocupan la franja superior central.</li></ul>',
134
+ },
135
+ {
136
+ type: 'card',
137
+ title: 'IG Reels: El factor del feed',
138
+ html: '<p>A diferencia de TikTok, Instagram Reels recorta el video a un formato 4:5 cuando se visualiza desde el feed principal (no desde la pestaña de Reels). Esto significa que si pones información vital en el 15% superior o inferior de tu video 9:16, desaparecerá en el feed.</p><ul><li><strong>La regla del 4:5:</strong> Mantén los títulos y elementos clave dentro de la zona central para asegurar visibilidad en el feed.</li><li><strong>Interfaz:</strong> Los iconos de Reels son más sutiles que los de TikTok, permitiendo un poco más de margen lateral.</li><li><strong>Botón de Audio:</strong> Situado abajo a la derecha, suele tapar mucho menos que el disco giratorio de TikTok.</li></ul>',
139
+ },
140
+ ],
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'YouTube Shorts: Cuidado con la derecha',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'YouTube Shorts tiene una interfaz asimétrica. El botón de suscripción es muy prominente y de color sólido (usualmente negro o blanco), lo que crea un punto ciego visual importante en la parte inferior derecha.',
150
+ },
151
+ {
152
+ type: 'list',
153
+ items: [
154
+ '<strong>Margen Derecho:</strong> Evita colocar texto o elementos importantes en el 20% inferior derecho.',
155
+ '<strong>Margen Inferior:</strong> Deja libre los últimos 150px para evitar el texto de la descripción y el nombre de usuario.',
156
+ '<strong>Cénit:</strong> Los botones de "Suscribirse" y "Más" ocupan la franja superior central.',
157
+ ],
158
+ },
159
+ {
160
+ type: 'title',
161
+ text: 'Preguntas Críticas sobre Diseño Vertical',
162
+ level: 2,
163
+ },
164
+ {
165
+ type: 'title',
166
+ text: '¿Dónde colocar los elementos clave (rostros, texto, producto)?',
167
+ level: 3,
168
+ },
169
+ {
170
+ type: 'paragraph',
171
+ html: 'La "Zona de Oro" para la acción principal es el tercio central del video. Si grabas a una persona, asegúrate de que sus ojos y boca estén en esta zona. Los elementos gráficos importantes deben estar ligeramente desplazados hacia arriba desde el centro geométrico para evitar la descripción inferior.',
172
+ },
173
+ {
174
+ type: 'title',
175
+ text: '¿Por qué mi video se ve borroso al subirlo?',
176
+ level: 3,
177
+ },
178
+ {
179
+ type: 'paragraph',
180
+ html: 'Muchas veces no es la calidad, sino el escalado. Graba siempre en 1080x1920 a 30 o 60 fps. Evita el 4K si vas a aplicar muchos efectos pesados, ya que las plataformas comprimen agresivamente los archivos de gran tamaño.',
181
+ },
182
+ {
183
+ type: 'title',
184
+ text: '¿Qué pasa con los marcos de los teléfonos?',
185
+ level: 3,
186
+ },
187
+ {
188
+ type: 'paragraph',
189
+ html: 'Recuerda que los teléfonos modernos tienen "notches" (cejas) o agujeros de cámara en pantalla. Esta herramienta incluye un margen de seguridad superior para que tu contenido no choque con el reloj o los iconos del sistema (batería, señal).',
190
+ },
191
+ {
192
+ type: 'title',
193
+ text: 'Anatomía de un Video Viral',
194
+ level: 2,
195
+ },
196
+ {
197
+ type: 'paragraph',
198
+ html: 'El diseño para redes sociales no es solo estética, es <strong>usabilidad</strong>. Si un usuario tiene que esforzarse para leer un texto porque los iconos de la plataforma lo tapan, simplemente pasará al siguiente video. La retención (Watch Time) cae en picado cuando hay fricción visual.',
199
+ },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'En YouTube Shorts, por ejemplo, la interfaz es asimétrica. El botón de suscripción es muy prominente y de color sólido (usualmente negro o blanco), lo que crea un punto ciego visual importante. Al usar este simulador, puedes ajustar la opacidad para entender cómo tu paleta de colores interactúa con los colores de la UI nativa.',
203
+ },
204
+ {
205
+ type: 'tip',
206
+ title: 'Herramienta de Control de Calidad Creativa',
207
+ html: '<p>Diseñado para creadores que no dejan nada al azar.</p>',
208
+ },
209
+ ],
210
+ ui: {
211
+ labelConfig: 'Configuración',
212
+ labelPlatform: 'Plataforma de Destino',
213
+ labelUpload: 'Subir Contenido',
214
+ uploadPrompt: 'Selecciona imagen o video',
215
+ uploadLink: 'O usa un ejemplo',
216
+ loadContent: 'Carga tu contenido',
217
+ labelOpacity: 'Relieve de Interfaz',
218
+ labelMask: 'Grisar Zonas Críticas',
219
+ labelGrid: 'Regla de Tercios',
220
+ btnReset: 'Refrescar Canvas',
221
+ bannerTiktok: 'Simulando TikTok 9:16',
222
+ bannerReels: 'Simulando Instagram Reels 9:16',
223
+ bannerShorts: 'Simulando YouTube Shorts 9:16',
224
+ nameTiktok: 'TikTok',
225
+ nameReels: 'IG Reels',
226
+ nameShorts: 'YT Shorts',
227
+ ttFollowing: 'Siguiendo',
228
+ ttForYou: 'Para ti',
229
+ ttDescription: 'Diseño de interfaces reales para creadores de contenido. #uxdesign #socialmedia',
230
+ ttAudio: 'jjlmoya - Sonido Original',
231
+ ttNavHome: 'Inicio',
232
+ ttNavFriends: 'Amigos',
233
+ ttNavInbox: 'Bandeja',
234
+ ttNavProfile: 'Perfil',
235
+ reelsFollow: 'Seguir',
236
+ reelsDescription: 'Esta interfaz es idéntica a la real. #reels #ux #simulador',
237
+ reelsAudio: 'Música Tendencia - Audio Original',
238
+ shortsSubscribe: 'SUSCRIBIRSE',
239
+ shortsDislike: 'No me gusta',
240
+ shortsShare: 'Compartir',
241
+ shortsRemix: 'Remix',
242
+ shortsDescription: '¡Simulando interfaces reales para Shorts! #youtube #shorts',
243
+ },
244
+ };