doomsday6 commited on
Commit
8ba2d5d
ยท
verified ยท
1 Parent(s): 8745ed1

<!DOCTYPE html>

Browse files

<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Free Website Builders & Coding Tools</title>
<style>
:root {
--primary: #4361ee;
--secondary: #3a0ca3;
--accent: #f72585;
--light: #f8f9fa;
--dark: #212529;
--success: #4cc9f0;
--bg-color: #f5f7ff;
--text-color: #212529;
--card-bg: white;
--header-bg: linear-gradient(135deg, #4361ee, #3a0ca3);
}

[data-theme="dark"] {
--bg-color: #1a1a1a;
--text-color: #f8f9fa;
--card-bg: #2d2d2d;
--header-bg: linear-gradient(135deg, #2d1b69, #1a0d3a);
--light: #2d2d2d;
--dark: #f8f9fa;
}

* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
transition: background-color 0.3s, color 0.3s;
}

body {
background-color: var(--bg-color);
color: var(--text-color);
line-height: 1.6;
min-height: 100vh;
}

.browser-warning {
background: #ff6b6b;
color: white;
padding: 1rem;
text-align: center;
font-weight: bold;
border-bottom: 3px solid #e63946;
}

.controls {
background: var(--card-bg);
padding: 1rem;
border-radius: 10px;
margin: 1rem 0;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
display: flex;
gap: 1rem;
flex-wrap: wrap;
align-items: center;
}

.search-box {
flex: 1;
min-width: 200px;
padding: 0.75rem;
border: 2px solid #e9ecef;
border-radius: 5px;
font-size: 1rem;
background: var(--card-bg);
color: var(--text-color);
}

.search-box:focus {
outline: none;
border-color: var(--primary);
}

.filter-buttons {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
}

.filter-btn {
padding: 0.5rem 1rem;
border: 2px solid var(--primary);
background: transparent;
color: var(--primary);
border-radius: 20px;
cursor: pointer;
transition: all 0.3s;
}

.filter-btn.active, .filter-btn:hover {
background: var(--primary);
color: white;
}

.theme-toggle {
background: var(--accent);
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 5px;
cursor: pointer;
display: flex;
align-items: center;
gap: 0.5rem;
}

header {
background: var(--header-bg);
color: white;
padding: 2rem 0;
text-align: center;
}

.container {
width: 90%;
max-width: 1200px;
margin: 0 auto;
padding: 2rem 0;
}

h1, h2, h3 {
margin-bottom: 1rem;
}

h1 {
font-size: 2.5rem;
}

h2 {
color: var(--secondary);
border-bottom: 2px solid var(--accent);
padding-bottom: 0.5rem;
margin-top: 2rem;
}

.instructions {
background: var(--card-bg);
border-left: 4px solid var(--success);
padding: 1.5rem;
margin: 1.5rem 0;
border-radius: 0 8px 8px 0;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}

.instructions ol {
margin-left: 1.5rem;
}

.instructions li {
margin-bottom: 0.5rem;
}

.intro {
background: var(--card-bg);
padding: 2rem;
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
margin-bottom: 2rem;
}

.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 2rem;
margin: 2rem 0;
}

.card {
background: var(--card-bg);
border-radius: 10px;
overflow: hidden;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
opacity: 1;
transform: scale(1);
}

.card.hidden {
display: none;
}

.card.filtered-out {
opacity: 0.3;
transform: scale(0.95);
}

.card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
}

.card-header {
background: var(--primary);
color: white;
padding: 1.5rem;
}

.card-body {
padding: 1.5rem;
}

.card-footer {
background: var(--light);
padding: 1rem 1.5rem;
display: flex;
justify-content: space-between;
}

.btn {
display: inline-block;
background: var(--accent);
color: white;
padding: 0.5rem 1rem;
border-radius: 5px;
text-decoration: none;
font-weight: 600;
transition: opacity 0.3s;
border: none;
cursor: pointer;
}

.btn:hover {
opacity: 0.9;
}

.tag {
background: #e9ecef;
padding: 0.3rem 0.7rem;
border-radius: 20px;
font-size: 0.8rem;
color: var(--dark);
}

.feature-list {
list-style: none;
margin: 1rem 0;
}

.feature-list li {
padding: 0.5rem 0;
border-bottom: 1px solid #eee;
}

.feature-list li:before {
content: "โœ“ ";
color: var(--success);
font-weight: bold;
}

.no-results {
text-align: center;
padding: 2rem;
color: #666;
display: none;
}

footer {
background: var(--dark);
color: white;
text-align: center;
padding: 2rem 0;
margin-top: 3rem;
}

.hosting-options {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
margin: 2rem 0;
}

.hosting-card {
background: var(--card-bg);
padding: 1.5rem;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
text-align: center;
}

@media (max-width: 768px) {
.card-grid {
grid-template-columns: 1fr;
}

h1 {
font-size: 2rem;
}

.controls {
flex-direction: column;
align-items: stretch;
}

.filter-buttons {
justify-content: center;
}
}
</style>
</head>
<body>
<div class="browser-warning">
โš ๏ธ Double-click didn't work? <strong>Right-click this file</strong> โ†’ "Open with" โ†’ Choose your browser
</div>

<header>
<div class="container">
<h1>Free Tools for Building Websites & Code</h1>
<p>Powerful, free alternatives to premium website builders and coding assistants</p>
</div>
</header>

<div class="container">
<div class="controls">
<input type="text" class="search-box" placeholder="Search tools... (try 'free' or 'developer')" id="searchInput">
<div class="filter-buttons">
<button class="filter-btn active" data-filter="all">All</button>
<button class="filter-btn" data-filter="website">Website Builders</button>
<button class="filter-btn" data-filter="code">Code Tools</button>
<button class="filter-btn" data-filter="beginner">Beginner Friendly</button>
</div>
<button class="theme-toggle" id="themeToggle">
<span>๐ŸŒ™ Dark Mode</span>
</button>
</div>

<section class="instructions">
<h2>How to Open This File Correctly</h2>
<ol>
<li><strong>Right-click</strong> the HTML file on your computer</li>
<li>Select <strong>"Open with"</strong></li>
<li>Choose your web browser (Chrome, Firefox, Edge, Safari)</li>
<li>Alternatively, <strong>drag the file</strong> into an open browser tab</li>
</ol>
</section>

<section class="intro">
<h2>Build Websites Without Coding Experience</h2>
<p>These free website builders offer drag-and-drop interfaces, templates, and hosting to get your site online quickly without needing to write code.</p>
</section>

<h2>Free Website Builders</h2>
<div class="card-grid" id="toolsGrid">
<!-- Cards will be populated by JavaScript -->
</div>

<div class="no-results" id="noResults">
<h3>No tools found matching your search</h3>
<p>Try adjusting your search terms or filters</p>
</div>

<section class="instructions">
<h2>๐Ÿš€ How to Host This Website

Files changed (2) hide show
  1. README.md +8 -5
  2. index.html +342 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Freebie Web Toolkit
3
- emoji: ๐Ÿ˜ป
4
- colorFrom: green
5
- colorTo: gray
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: Freebie Web Toolkit ๐Ÿ› ๏ธ
3
+ colorFrom: gray
4
+ colorTo: pink
5
+ emoji: ๐Ÿณ
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://deepsite.hf.co).
index.html CHANGED
@@ -1,19 +1,343 @@
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>Free Website Builders & Coding Tools</title>
7
+ <link rel="icon" type="image/x-icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>๐Ÿ› ๏ธ</text></svg>">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/feather-icons"></script>
10
+ <script>
11
+ tailwind.config = {
12
+ theme: {
13
+ extend: {
14
+ colors: {
15
+ primary: '#4361ee',
16
+ secondary: '#3a0ca3',
17
+ accent: '#f72585',
18
+ success: '#4cc9f0',
19
+ dark: '#1a1a1a',
20
+ light: '#f8f9fa'
21
+ }
22
+ }
23
+ }
24
+ }
25
+ </script>
26
+ <style>
27
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
28
+ body {
29
+ font-family: 'Inter', sans-serif;
30
+ background-color: #f5f7ff;
31
+ }
32
+ [data-theme="dark"] {
33
+ background-color: #1a1a1a;
34
+ color: #f8f9fa;
35
+ }
36
+ .card-hover {
37
+ transition: all 0.3s ease;
38
+ }
39
+ .card-hover:hover {
40
+ transform: translateY(-5px);
41
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
42
+ }
43
+ .filter-active {
44
+ background-color: #4361ee;
45
+ color: white;
46
+ }
47
+ .theme-transition * {
48
+ transition: background-color 0.3s, color 0.3s;
49
+ }
50
+ .gradient-bg {
51
+ background: linear-gradient(135deg, #4361ee, #3a0ca3);
52
+ }
53
+ [data-theme="dark"] .gradient-bg {
54
+ background: linear-gradient(135deg, #2d1b69, #1a0d3a);
55
+ }
56
+ .tag {
57
+ transition: all 0.2s ease;
58
+ }
59
+ .search-box:focus {
60
+ box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.3);
61
+ }
62
+ </style>
63
+ </head>
64
+ <body class="theme-transition bg-gray-50" data-theme="light">
65
+ <div class="bg-red-500 text-white p-4 text-center font-bold hidden md:block">
66
+ โš ๏ธ Double-click didn't work? <strong>Right-click this file</strong> โ†’ "Open with" โ†’ Choose your browser
67
+ </div>
68
+
69
+ <header class="gradient-bg text-white py-12">
70
+ <div class="container mx-auto px-4 text-center">
71
+ <h1 class="text-4xl md:text-5xl font-bold mb-4">Free Tools for Building Websites & Code</h1>
72
+ <p class="text-xl max-w-2xl mx-auto">Powerful, free alternatives to premium website builders and coding assistants</p>
73
+ </div>
74
+ </header>
75
+
76
+ <div class="container mx-auto px-4 py-8">
77
+ <div class="bg-white dark:bg-gray-800 rounded-xl shadow-md p-6 mb-8 flex flex-col md:flex-row gap-4 items-center">
78
+ <div class="flex-grow w-full">
79
+ <input
80
+ type="text"
81
+ id="searchInput"
82
+ class="w-full p-3 border border-gray-300 dark:border-gray-600 rounded-lg dark:bg-gray-700 dark:text-white search-box"
83
+ placeholder="Search tools... (try 'free' or 'developer')"
84
+ >
85
+ </div>
86
+ <div class="flex flex-wrap gap-2 justify-center">
87
+ <button class="filter-btn px-4 py-2 border-2 border-primary rounded-full text-primary filter-active" data-filter="all">All</button>
88
+ <button class="filter-btn px-4 py-2 border-2 border-primary rounded-full text-primary" data-filter="website">Website Builders</button>
89
+ <button class="filter-btn px-4 py-2 border-2 border-primary rounded-full text-primary" data-filter="code">Code Tools</button>
90
+ <button class="filter-btn px-4 py-2 border-2 border-primary rounded-full text-primary" data-filter="beginner">Beginner Friendly</button>
91
+ </div>
92
+ <button id="themeToggle" class="bg-accent text-white px-4 py-2 rounded-lg flex items-center gap-2">
93
+ <i data-feather="moon"></i>
94
+ <span>Dark Mode</span>
95
+ </button>
96
+ </div>
97
+
98
+ <section class="bg-green-50 dark:bg-green-900/20 border-l-4 border-success p-6 rounded-r-lg mb-10">
99
+ <h2 class="text-2xl font-bold mb-4 text-gray-800 dark:text-white">How to Open This File Correctly</h2>
100
+ <ol class="list-decimal pl-5 space-y-2 text-gray-700 dark:text-gray-200">
101
+ <li><strong>Right-click</strong> the HTML file on your computer</li>
102
+ <li>Select <strong>"Open with"</strong></li>
103
+ <li>Choose your web browser (Chrome, Firefox, Edge, Safari)</li>
104
+ <li>Alternatively, <strong>drag the file</strong> into an open browser tab</li>
105
+ </ol>
106
+ </section>
107
+
108
+ <section class="bg-white dark:bg-gray-800 rounded-xl shadow-md p-8 mb-12">
109
+ <h2 class="text-3xl font-bold mb-4 text-secondary dark:text-primary">Build Websites Without Coding Experience</h2>
110
+ <p class="text-lg text-gray-600 dark:text-gray-300">These free website builders offer drag-and-drop interfaces, templates, and hosting to get your site online quickly without needing to write code.</p>
111
+ </section>
112
+
113
+ <h2 class="text-3xl font-bold mb-6 text-secondary dark:text-primary">Free Website Builders</h2>
114
+ <div id="toolsGrid" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
115
+ <!-- Cards will be populated by JavaScript -->
116
+ </div>
117
+
118
+ <div id="noResults" class="hidden text-center py-12">
119
+ <h3 class="text-2xl font-bold mb-2">No tools found matching your search</h3>
120
+ <p class="text-gray-600 dark:text-gray-400">Try adjusting your search terms or filters</p>
121
+ </div>
122
+
123
+ <section class="bg-white dark:bg-gray-800 rounded-xl shadow-md p-8 mt-12">
124
+ <h2 class="text-3xl font-bold mb-6 text-secondary dark:text-primary">๐Ÿš€ How to Host This Website Online (FREE)</h2>
125
+ <p class="text-lg mb-8 text-gray-600 dark:text-gray-300">Want to share this with others? Here are free hosting options:</p>
126
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
127
+ <div class="bg-gray-50 dark:bg-gray-700 p-6 rounded-lg text-center shadow-sm">
128
+ <h3 class="text-xl font-bold mb-2">GitHub Pages</h3>
129
+ <p class="mb-4 text-gray-600 dark:text-gray-300">Perfect for developers</p>
130
+ <a href="https://pages.github.com/" target="_blank" class="inline-block bg-accent text-white px-4 py-2 rounded-lg font-medium hover:bg-opacity-90 transition">Deploy</a>
131
+ </div>
132
+ <div class="bg-gray-50 dark:bg-gray-700 p-6 rounded-lg text-center shadow-sm">
133
+ <h3 class="text-xl font-bold mb-2">Netlify</h3>
134
+ <p class="mb-4 text-gray-600 dark:text-gray-300">Drag & drop deployment</p>
135
+ <a href="https://netlify.com/" target="_blank" class="inline-block bg-accent text-white px-4 py-2 rounded-lg font-medium hover:bg-opacity-90 transition">Deploy</a>
136
+ </div>
137
+ <div class="bg-gray-50 dark:bg-gray-700 p-6 rounded-lg text-center shadow-sm">
138
+ <h3 class="text-xl font-bold mb-2">Vercel</h3>
139
+ <p class="mb-4 text-gray-600 dark:text-gray-300">Great for web apps</p>
140
+ <a href="https://vercel.com/" target="_blank" class="inline-block bg-accent text-white px-4 py-2 rounded-lg font-medium hover:bg-opacity-90 transition">Deploy</a>
141
+ </div>
142
+ </div>
143
+ </section>
144
+ </div>
145
+
146
+ <footer class="bg-dark text-white py-12 mt-16">
147
+ <div class="container mx-auto px-4 text-center">
148
+ <p class="mb-2">This resource page showcases free alternatives to premium website builders and coding tools.</p>
149
+ <p>All mentioned tools have free tiers available.</p>
150
+ </div>
151
+ </footer>
152
+
153
+ <script>
154
+ // Tool data
155
+ const tools = [
156
+ {
157
+ name: "Wix",
158
+ category: "website",
159
+ tags: ["beginner", "drag-drop"],
160
+ description: "Drag-and-drop website builder with hundreds of templates. Great for beginners and small businesses.",
161
+ features: ["500MB storage & bandwidth", "Wix ads displayed", "Mobile-optimized", "100s of templates"],
162
+ link: "https://www.wix.com/",
163
+ tag: "Beginner Friendly"
164
+ },
165
+ {
166
+ name: "WordPress.com",
167
+ category: "website",
168
+ tags: ["beginner", "blogging"],
169
+ description: "The popular blogging platform that powers over 40% of all websites. Extensive plugin ecosystem.",
170
+ features: ["3GB storage", "Free subdomain", "Basic customization", "Blogging focused"],
171
+ link: "https://wordpress.com/",
172
+ tag: "Blogging"
173
+ },
174
+ {
175
+ name: "GitHub Pages",
176
+ category: "website",
177
+ tags: ["developer", "hosting"],
178
+ description: "Host static websites directly from your GitHub repository. Perfect for portfolios and project pages.",
179
+ features: ["Free hosting", "Custom domain support", "Jekyll integration", "Developer friendly"],
180
+ link: "https://pages.github.com/",
181
+ tag: "Developers"
182
+ },
183
+ {
184
+ name: "CodePen",
185
+ category: "code",
186
+ tags: ["developer", "frontend"],
187
+ description: "Online community for testing and showcasing HTML, CSS, and JavaScript code snippets.",
188
+ features: ["Full code editor", "Public 'pens'", "Frontend focus", "Community sharing"],
189
+ link: "https://codepen.io/",
190
+ tag: "Frontend"
191
+ },
192
+ {
193
+ name: "Replit",
194
+ category: "code",
195
+ tags: ["developer", "multi-language"],
196
+ description: "Browser-based IDE that supports over 50 programming languages. Collaborate in real-time.",
197
+ features: ["Public projects", "Basic compute power", "Multiplayer editing", "50+ languages"],
198
+ link: "https://replit.com/",
199
+ tag: "Multi-language"
200
+ },
201
+ {
202
+ name: "VS Code Online",
203
+ category: "code",
204
+ tags: ["developer", "ide"],
205
+ description: "The full Visual Studio Code experience running in your browser. No installation required.",
206
+ features: ["Full editor experience", "Extensions support", "Git integration", "Terminal access"],
207
+ link: "https://vscode.dev/",
208
+ tag: "Full IDE"
209
+ },
210
+ {
211
+ name: "Netlify",
212
+ category: "website",
213
+ tags: ["developer", "hosting"],
214
+ description: "Deploy modern web projects with continuous deployment from Git. Perfect for JAMstack sites.",
215
+ features: ["100GB bandwidth", "Auto deployments", "HTTPS included", "Form handling"],
216
+ link: "https://netlify.com/",
217
+ tag: "Hosting"
218
+ },
219
+ {
220
+ name: "Glitch",
221
+ category: "code",
222
+ tags: ["beginner", "developer"],
223
+ description: "Friendly community where you'll build the app of your dreams with help from others.",
224
+ features: ["Full stack apps", "Instant hosting", "Remix projects", "Community support"],
225
+ link: "https://glitch.com/",
226
+ tag: "Full Stack"
227
+ }
228
+ ];
229
+
230
+ // DOM Elements
231
+ const toolsGrid = document.getElementById('toolsGrid');
232
+ const searchInput = document.getElementById('searchInput');
233
+ const filterButtons = document.querySelectorAll('.filter-btn');
234
+ const themeToggle = document.getElementById('themeToggle');
235
+ const noResults = document.getElementById('noResults');
236
+
237
+ // Initialize
238
+ function init() {
239
+ renderTools(tools);
240
+ setupEventListeners();
241
+ loadTheme();
242
+ feather.replace();
243
+ }
244
+
245
+ // Render tools to grid
246
+ function renderTools(toolsToRender) {
247
+ toolsGrid.innerHTML = '';
248
+
249
+ if (toolsToRender.length === 0) {
250
+ noResults.classList.remove('hidden');
251
+ return;
252
+ }
253
+
254
+ noResults.classList.add('hidden');
255
+
256
+ toolsToRender.forEach(tool => {
257
+ const card = document.createElement('div');
258
+ card.className = 'bg-white dark:bg-gray-800 rounded-xl shadow-md overflow-hidden card-hover';
259
+ card.dataset.category = tool.category;
260
+ card.dataset.tags = tool.tags.join(' ');
261
+
262
+ card.innerHTML = `
263
+ <div class="bg-primary p-6">
264
+ <h3 class="text-xl font-bold text-white">${tool.name}</h3>
265
+ </div>
266
+ <div class="p-6">
267
+ <p class="text-gray-600 dark:text-gray-300 mb-4">${tool.description}</p>
268
+ <ul class="space-y-2 mb-6">
269
+ ${tool.features.map(feature => `<li class="flex items-start"><i data-feather="check-circle" class="text-success mr-2 mt-1 flex-shrink-0"></i><span>${feature}</span></li>`).join('')}
270
+ </ul>
271
+ </div>
272
+ <div class="px-6 py-4 bg-gray-50 dark:bg-gray-700 flex justify-between items-center">
273
+ <span class="bg-gray-200 dark:bg-gray-600 text-gray-800 dark:text-gray-200 px-3 py-1 rounded-full text-sm tag">${tool.tag}</span>
274
+ <a href="${tool.link}" target="_blank" class="bg-accent text-white px-4 py-2 rounded-lg font-medium hover:bg-opacity-90 transition">Visit</a>
275
+ </div>
276
+ `;
277
+
278
+ toolsGrid.appendChild(card);
279
+ });
280
+
281
+ feather.replace();
282
+ }
283
+
284
+ // Filter and search tools
285
+ function filterTools() {
286
+ const searchTerm = searchInput.value.toLowerCase();
287
+ const activeFilter = document.querySelector('.filter-btn.filter-active').dataset.filter;
288
+
289
+ const filteredTools = tools.filter(tool => {
290
+ const matchesSearch = tool.name.toLowerCase().includes(searchTerm) ||
291
+ tool.description.toLowerCase().includes(searchTerm) ||
292
+ tool.tags.some(tag => tag.includes(searchTerm));
293
+
294
+ const matchesFilter = activeFilter === 'all' ||
295
+ (activeFilter === 'website' && tool.category === 'website') ||
296
+ (activeFilter === 'code' && tool.category === 'code') ||
297
+ (activeFilter === 'beginner' && tool.tags.includes('beginner'));
298
+
299
+ return matchesSearch && matchesFilter;
300
+ });
301
+
302
+ renderTools(filteredTools);
303
+ }
304
+
305
+ // Theme functionality
306
+ function toggleTheme() {
307
+ const isDark = document.body.getAttribute('data-theme') === 'dark';
308
+ document.body.setAttribute('data-theme', isDark ? 'light' : 'dark');
309
+ themeToggle.innerHTML = isDark ?
310
+ '<i data-feather="sun"></i><span>Light Mode</span>' :
311
+ '<i data-feather="moon"></i><span>Dark Mode</span>';
312
+ feather.replace();
313
+ localStorage.setItem('theme', isDark ? 'light' : 'dark');
314
+ }
315
+
316
+ function loadTheme() {
317
+ const savedTheme = localStorage.getItem('theme') || 'light';
318
+ document.body.setAttribute('data-theme', savedTheme);
319
+ themeToggle.innerHTML = savedTheme === 'dark' ?
320
+ '<i data-feather="sun"></i><span>Light Mode</span>' :
321
+ '<i data-feather="moon"></i><span>Dark Mode</span>';
322
+ }
323
+
324
+ // Event listeners
325
+ function setupEventListeners() {
326
+ searchInput.addEventListener('input', filterTools);
327
+
328
+ filterButtons.forEach(button => {
329
+ button.addEventListener('click', () => {
330
+ filterButtons.forEach(btn => btn.classList.remove('filter-active'));
331
+ button.classList.add('filter-active');
332
+ filterTools();
333
+ });
334
+ });
335
+
336
+ themeToggle.addEventListener('click', toggleTheme);
337
+ }
338
+
339
+ // Initialize the app
340
+ document.addEventListener('DOMContentLoaded', init);
341
+ </script>
342
+ </body>
343
  </html>