KatEdwards commited on
Commit
3a6e4f8
·
verified ·
1 Parent(s): dbec4ae

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +307 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Social Media Tools
3
- emoji: 👁
4
- colorFrom: yellow
5
- colorTo: purple
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: social-media-tools
3
+ emoji: 🐳
4
+ colorFrom: green
5
+ colorTo: blue
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,307 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>AI Blog Post Generator</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
9
+ <style>
10
+ .gradient-bg {
11
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
12
+ }
13
+ .content-area {
14
+ min-height: 300px;
15
+ }
16
+ .generated-image {
17
+ transition: all 0.3s ease;
18
+ }
19
+ .generated-image:hover {
20
+ transform: scale(1.02);
21
+ box-shadow: 0 10px 25px rgba(0,0,0,0.1);
22
+ }
23
+ .loading-spinner {
24
+ border: 4px solid rgba(0, 0, 0, 0.1);
25
+ border-radius: 50%;
26
+ border-top: 4px solid #3498db;
27
+ width: 40px;
28
+ height: 40px;
29
+ animation: spin 1s linear infinite;
30
+ }
31
+ @keyframes spin {
32
+ 0% { transform: rotate(0deg); }
33
+ 100% { transform: rotate(360deg); }
34
+ }
35
+ </style>
36
+ </head>
37
+ <body class="gradient-bg min-h-screen">
38
+ <div class="container mx-auto px-4 py-8">
39
+ <header class="text-center mb-12">
40
+ <h1 class="text-4xl font-bold text-gray-800 mb-2">AI Blog Post Generator</h1>
41
+ <p class="text-lg text-gray-600">Create engaging content with beautiful visuals in seconds</p>
42
+ </header>
43
+
44
+ <div class="bg-white rounded-xl shadow-lg p-6 mb-8">
45
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
46
+ <div>
47
+ <h2 class="text-2xl font-semibold mb-4 text-gray-800">Content Settings</h2>
48
+
49
+ <div class="mb-4">
50
+ <label class="block text-gray-700 mb-2" for="topic">Blog Topic</label>
51
+ <input type="text" id="topic" placeholder="Enter your blog topic"
52
+ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
53
+ </div>
54
+
55
+ <div class="mb-4">
56
+ <label class="block text-gray-700 mb-2" for="tone">Writing Tone</label>
57
+ <select id="tone" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
58
+ <option value="professional">Professional</option>
59
+ <option value="casual">Casual</option>
60
+ <option value="friendly">Friendly</option>
61
+ <option value="humorous">Humorous</option>
62
+ <option value="academic">Academic</option>
63
+ </select>
64
+ </div>
65
+
66
+ <div class="mb-4">
67
+ <label class="block text-gray-700 mb-2" for="length">Post Length</label>
68
+ <select id="length" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
69
+ <option value="short">Short (300 words)</option>
70
+ <option value="medium" selected>Medium (600 words)</option>
71
+ <option value="long">Long (1000 words)</option>
72
+ </select>
73
+ </div>
74
+
75
+ <div class="mb-6">
76
+ <label class="block text-gray-700 mb-2" for="keywords">Keywords (comma separated)</label>
77
+ <input type="text" id="keywords" placeholder="technology, AI, future"
78
+ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500">
79
+ </div>
80
+
81
+ <div class="flex items-center mb-4">
82
+ <input type="checkbox" id="include-image" class="w-4 h-4 text-blue-600 rounded focus:ring-blue-500" checked>
83
+ <label for="include-image" class="ml-2 text-gray-700">Include Featured Image</label>
84
+ </div>
85
+
86
+ <div id="image-settings" class="bg-gray-50 p-4 rounded-lg mb-4">
87
+ <h3 class="font-medium text-gray-700 mb-2">Image Style</h3>
88
+ <div class="grid grid-cols-3 gap-2">
89
+ <button class="image-style-btn px-3 py-2 bg-white border rounded-lg text-sm" data-style="realistic">Realistic</button>
90
+ <button class="image-style-btn px-3 py-2 bg-white border rounded-lg text-sm" data-style="illustration">Illustration</button>
91
+ <button class="image-style-btn px-3 py-2 bg-white border rounded-lg text-sm" data-style="minimal">Minimal</button>
92
+ <button class="image-style-btn px-3 py-2 bg-white border rounded-lg text-sm" data-style="abstract">Abstract</button>
93
+ <button class="image-style-btn px-3 py-2 bg-white border rounded-lg text-sm" data-style="photographic">Photographic</button>
94
+ <button class="image-style-btn px-3 py-2 bg-white border rounded-lg text-sm" data-style="watercolor">Watercolor</button>
95
+ </div>
96
+ </div>
97
+
98
+ <button id="generate-btn" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-lg transition duration-300 flex items-center justify-center">
99
+ <i class="fas fa-magic mr-2"></i> Generate Blog Post
100
+ </button>
101
+ </div>
102
+
103
+ <div class="bg-gray-50 rounded-lg p-4">
104
+ <h2 class="text-2xl font-semibold mb-4 text-gray-800">Preview</h2>
105
+
106
+ <div id="preview-container" class="space-y-6">
107
+ <div class="text-center py-12 text-gray-400">
108
+ <i class="fas fa-newspaper text-4xl mb-4"></i>
109
+ <p>Your generated blog post will appear here</p>
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ </div>
115
+
116
+ <div id="result-container" class="hidden bg-white rounded-xl shadow-lg p-6 mb-8">
117
+ <div class="flex justify-between items-center mb-6">
118
+ <h2 class="text-2xl font-semibold text-gray-800">Your Blog Post</h2>
119
+ <button id="copy-btn" class="bg-gray-100 hover:bg-gray-200 text-gray-800 font-medium py-2 px-4 rounded-lg flex items-center">
120
+ <i class="fas fa-copy mr-2"></i> Copy Content
121
+ </button>
122
+ </div>
123
+
124
+ <div id="loading" class="hidden flex justify-center items-center py-12">
125
+ <div class="loading-spinner"></div>
126
+ <span class="ml-3 text-gray-600">Generating your content...</span>
127
+ </div>
128
+
129
+ <div id="generated-content" class="space-y-6">
130
+ <!-- Content will be inserted here by JavaScript -->
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ <script>
136
+ document.addEventListener('DOMContentLoaded', function() {
137
+ // Elements
138
+ const generateBtn = document.getElementById('generate-btn');
139
+ const previewContainer = document.getElementById('preview-container');
140
+ const resultContainer = document.getElementById('result-container');
141
+ const generatedContent = document.getElementById('generated-content');
142
+ const loadingElement = document.getElementById('loading');
143
+ const copyBtn = document.getElementById('copy-btn');
144
+ const includeImageCheckbox = document.getElementById('include-image');
145
+ const imageSettings = document.getElementById('image-settings');
146
+ const imageStyleButtons = document.querySelectorAll('.image-style-btn');
147
+
148
+ let selectedImageStyle = 'realistic';
149
+
150
+ // Toggle image settings visibility
151
+ includeImageCheckbox.addEventListener('change', function() {
152
+ imageSettings.style.display = this.checked ? 'block' : 'none';
153
+ });
154
+
155
+ // Image style selection
156
+ imageStyleButtons.forEach(button => {
157
+ button.addEventListener('click', function() {
158
+ imageStyleButtons.forEach(btn => btn.classList.remove('bg-blue-100', 'border-blue-300'));
159
+ this.classList.add('bg-blue-100', 'border-blue-300');
160
+ selectedImageStyle = this.dataset.style;
161
+ });
162
+ });
163
+
164
+ // Set first image style as active
165
+ if (imageStyleButtons.length > 0) {
166
+ imageStyleButtons[0].classList.add('bg-blue-100', 'border-blue-300');
167
+ }
168
+
169
+ // Generate button click handler
170
+ generateBtn.addEventListener('click', function() {
171
+ const topic = document.getElementById('topic').value.trim();
172
+ const tone = document.getElementById('tone').value;
173
+ const length = document.getElementById('length').value;
174
+ const keywords = document.getElementById('keywords').value;
175
+ const includeImage = includeImageCheckbox.checked;
176
+
177
+ if (!topic) {
178
+ alert('Please enter a blog topic');
179
+ return;
180
+ }
181
+
182
+ // Show loading state
183
+ generateBtn.disabled = true;
184
+ generateBtn.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Generating...';
185
+ previewContainer.innerHTML = '<div class="text-center py-12"><div class="loading-spinner inline-block"></div><p class="mt-4 text-gray-600">Creating your content...</p></div>';
186
+
187
+ // Show result container
188
+ resultContainer.classList.remove('hidden');
189
+ generatedContent.innerHTML = '';
190
+ loadingElement.classList.remove('hidden');
191
+
192
+ // Simulate API call with timeout
193
+ setTimeout(() => {
194
+ generateContent(topic, tone, length, keywords, includeImage);
195
+
196
+ // Reset button
197
+ generateBtn.disabled = false;
198
+ generateBtn.innerHTML = '<i class="fas fa-magic mr-2"></i> Generate Blog Post';
199
+ loadingElement.classList.add('hidden');
200
+ }, 2000);
201
+ });
202
+
203
+ // Copy button click handler
204
+ copyBtn.addEventListener('click', function() {
205
+ const range = document.createRange();
206
+ range.selectNode(generatedContent);
207
+ window.getSelection().removeAllRanges();
208
+ window.getSelection().addRange(range);
209
+ document.execCommand('copy');
210
+ window.getSelection().removeAllRanges();
211
+
212
+ // Show copied feedback
213
+ const originalText = copyBtn.innerHTML;
214
+ copyBtn.innerHTML = '<i class="fas fa-check mr-2"></i> Copied!';
215
+ setTimeout(() => {
216
+ copyBtn.innerHTML = originalText;
217
+ }, 2000);
218
+ });
219
+
220
+ // Function to generate content
221
+ function generateContent(topic, tone, length, keywords, includeImage) {
222
+ // Sample content based on inputs
223
+ const wordCounts = {
224
+ short: 300,
225
+ medium: 600,
226
+ long: 1000
227
+ };
228
+
229
+ const tones = {
230
+ professional: "This comprehensive analysis examines",
231
+ casual: "Let's take a look at",
232
+ friendly: "I'd love to share with you about",
233
+ humorous: "Hold onto your hats as we explore",
234
+ academic: "The scholarly examination of"
235
+ };
236
+
237
+ const intro = `${tones[tone]} ${topic}. ${keywords ? `We'll cover aspects related to ${keywords}.` : ''}`;
238
+
239
+ // Generate paragraphs
240
+ const paragraphs = [
241
+ intro,
242
+ `The ${topic} has become an increasingly important subject in recent years. Many experts agree that understanding this topic is crucial for future developments.`,
243
+ `One of the key aspects of ${topic} is its impact on various industries. From technology to healthcare, the implications are far-reaching and significant.`,
244
+ `When examining ${topic}, it's important to consider multiple perspectives. This multifaceted approach leads to more comprehensive understanding and better solutions.`,
245
+ `Looking ahead, the future of ${topic} appears promising. With continued research and innovation, we can expect to see remarkable advancements in this field.`,
246
+ `In conclusion, ${topic} represents an exciting area of study with practical applications across many domains. Staying informed about this subject will be valuable for years to come.`
247
+ ];
248
+
249
+ // Generate HTML content
250
+ let htmlContent = '';
251
+
252
+ if (includeImage) {
253
+ // Generate a placeholder image URL based on topic and style
254
+ const imageUrl = `https://source.unsplash.com/800x450/?${encodeURIComponent(topic)},${selectedImageStyle}`;
255
+
256
+ htmlContent += `
257
+ <div class="mb-6">
258
+ <img src="${imageUrl}" alt="${topic}" class="w-full h-auto rounded-lg generated-image shadow-md">
259
+ <p class="text-sm text-gray-500 mt-2 text-center">Generated ${selectedImageStyle} image representing "${topic}"</p>
260
+ </div>
261
+ `;
262
+ }
263
+
264
+ htmlContent += `
265
+ <h1 class="text-3xl font-bold text-gray-800 mb-4">${topic.charAt(0).toUpperCase() + topic.slice(1)}: A Comprehensive Overview</h1>
266
+ <div class="flex items-center text-sm text-gray-500 mb-6">
267
+ <span class="mr-4"><i class="far fa-calendar-alt mr-1"></i> ${new Date().toLocaleDateString()}</span>
268
+ <span><i class="far fa-clock mr-1"></i> ${Math.ceil(wordCounts[length] / 200)} min read</span>
269
+ </div>
270
+ `;
271
+
272
+ paragraphs.forEach(para => {
273
+ htmlContent += `<p class="text-gray-700 mb-4 leading-relaxed">${para}</p>`;
274
+ });
275
+
276
+ htmlContent += `
277
+ <div class="mt-8 pt-6 border-t border-gray-200">
278
+ <h3 class="text-lg font-semibold mb-3">Key Takeaways</h3>
279
+ <ul class="list-disc pl-5 space-y-2 text-gray-700">
280
+ <li>${topic} has significant implications across multiple industries</li>
281
+ <li>Understanding this topic is crucial for future developments</li>
282
+ <li>Multiple perspectives lead to better solutions</li>
283
+ <li>Continued innovation will drive future advancements</li>
284
+ </ul>
285
+ </div>
286
+
287
+ <div class="mt-8 bg-blue-50 p-4 rounded-lg">
288
+ <h3 class="text-lg font-semibold mb-2">About the Author</h3>
289
+ <p class="text-gray-700">This article was generated by the AI Blog Post Generator. The content is designed to be informative and engaging, tailored to your specified preferences.</p>
290
+ </div>
291
+ `;
292
+
293
+ // Update preview and result
294
+ previewContainer.innerHTML = `
295
+ <div class="bg-white p-4 rounded-lg shadow">
296
+ <h3 class="text-xl font-semibold mb-2">${topic}</h3>
297
+ <p class="text-gray-600 text-sm mb-3">${intro.substring(0, 150)}...</p>
298
+ ${includeImage ? `<img src="https://source.unsplash.com/300x150/?${encodeURIComponent(topic)}" alt="Preview" class="w-full h-auto rounded">` : ''}
299
+ </div>
300
+ `;
301
+
302
+ generatedContent.innerHTML = htmlContent;
303
+ }
304
+ });
305
+ </script>
306
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=KatEdwards/social-media-tools" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
307
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ i would like to make a blog post generator that will also generate images