CoolFace
Apppublic

arch-jos/embedded-wizardry-portal

sourceHugging Faceupdated 11mo agoView on Hugging Face
0likes
script.js254 linesDownload Raw Back to root
1 2// Project details data3const projects = {4    hapticGlove: {5        title: "Affordable Haptic Feedback Glove for Stroke Rehabilitation",6        content: `7            <div class="grid grid-cols-1 md:grid-cols-2 gap-8">8                <div>9                    <h4 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">Project Details</h4>10                    <ul class="space-y-3">11                        <li class="flex items-start gap-3">12                            <i data-feather="user" class="text-primary-500 mt-1"></i>13                            <span><strong>Role:</strong> Hardware Architecture Designer & Embedded Systems Developer</span>14                        </li>15                        <li class="flex items-start gap-3">16                            <i data-feather="calendar" class="text-primary-500 mt-1"></i>17                            <span><strong>Status:</strong> Development & Competition Submission (TRON Programming Contest 2025)</span>18                        </li>19                        <li class="flex items-start gap-3">20                            <i data-feather="github" class="text-primary-500 mt-1"></i>21                            <span><strong>Repository:</strong> <a href="https://github.com/Jostin-arch/Affordable-Haptic-Glove" target="_blank" rel="noopener noreferrer" class="text-primary-500 hover:underline">github.com/Jostin-arch/Affordable-Haptic-Glove</a></span>22                        </li>23                        <li class="flex items-start gap-3">24                            <i data-feather="cpu" class="text-primary-500 mt-1"></i>25                            <span><strong>Microcontroller:</strong> ESP32 with dual-core architecture</span>26                        </li>27                        <li class="flex items-start gap-3">28                            <i data-feather="wifi" class="text-primary-500 mt-1"></i>29                            <span><strong>Communication:</strong> WebSocket over Wi-Fi</span>30                        </li>31                    </ul>32                </div>33                <div class="bg-primary-500/10 p-4 rounded-lg">34                    <img src="http://static.photos/medical/640x360/42" alt="Haptic Feedback Glove" class="w-full h-auto rounded-lg">35                </div>36            </div>37 38            <h4 class="text-xl font-semibold text-gray-800 dark:text-white mt-6 mb-4">Technical Implementation</h4>39            <div class="grid grid-cols-1 md:grid-cols-2 gap-6">40                <div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">41                    <h5 class="font-semibold text-gray-800 dark:text-white mb-2">Hardware Design</h5>42                    <ul class="space-y-2">43                        <li class="flex items-start gap-2">44                            <i data-feather="check" class="text-primary-500 mt-1"></i>45                            <span>ESP32 microcontroller with dual-core processing</span>46                        </li>47                        <li class="flex items-start gap-2">48                            <i data-feather="check" class="text-primary-500 mt-1"></i>49                            <span>Flex sensors with custom signal conditioning</span>50                        </li>51                        <li class="flex items-start gap-2">52                            <i data-feather="check" class="text-primary-500 mt-1"></i>53                            <span>Vibration motors for haptic feedback</span>54                        </li>55                    </ul>56                </div>57                <div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">58                    <h5 class="font-semibold text-gray-800 dark:text-white mb-2">Software Features</h5>59                    <ul class="space-y-2">60                        <li class="flex items-start gap-2">61                            <i data-feather="check" class="text-primary-500 mt-1"></i>62                            <span>RTOS-based real-time processing</span>63                        </li>64                        <li class="flex items-start gap-2">65                            <i data-feather="check" class="text-primary-500 mt-1"></i>66                            <span>WebSocket communication protocol</span>67                        </li>68                        <li class="flex items-start gap-2">69                            <i data-feather="check" class="text-primary-500 mt-1"></i>70                            <span>Customizable rehabilitation exercises</span>71                        </li>72                    </ul>73                </div>74            </div>75        `76    },77    cobLed: {78        title: "COB LED Solar Spectrum Simulation",79        content: `80            <div class="grid grid-cols-1 md:grid-cols-2 gap-8">81                <div>82                    <h4 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">Project Details</h4>83                    <ul class="space-y-3">84                        <li class="flex items-start gap-3">85                            <i data-feather="user" class="text-primary-500 mt-1"></i>86                            <span><strong>Role:</strong> Algorithm Developer & Simulation Engineer</span>87                        </li>88                        <li class="flex items-start gap-3">89                            <i data-feather="calendar" class="text-primary-500 mt-1"></i>90                            <span><strong>Status:</strong> Completed research project</span>91                        </li>92                        <li class="flex items-start gap-3">93                            <i data-feather="cpu" class="text-primary-500 mt-1"></i>94                            <span><strong>Technology:</strong> Python, NumPy, Matplotlib</span>95                        </li>96                        <li class="flex items-start gap-3">97                            <i data-feather="zap" class="text-primary-500 mt-1"></i>98                            <span><strong>Application:</strong> Precision agriculture lighting</span>99                        </li>100                    </ul>101                </div>102                <div class="bg-primary-500/10 p-4 rounded-lg">103                    <img src="http://static.photos/science/640x360/42" alt="COB LED Solar Spectrum" class="w-full h-auto rounded-lg">104                </div>105            </div>106 107            <h4 class="text-xl font-semibold text-gray-800 dark:text-white mt-6 mb-4">Technical Implementation</h4>108            <div class="grid grid-cols-1 md:grid-cols-2 gap-6">109                <div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">110                    <h5 class="font-semibold text-gray-800 dark:text-white mb-2">Spectral Analysis</h5>111                    <ul class="space-y-2">112                        <li class="flex items-start gap-2">113                            <i data-feather="check" class="text-primary-500 mt-1"></i>114                            <span>Solar spectrum decomposition and analysis</span>115                        </li>116                        <li class="flex items-start gap-2">117                            <i data-feather="check" class="text-primary-500 mt-1"></i>118                            <span>LED spectral characteristics modeling</span>119                        </li>120                        <li class="flex items-start gap-2">121                            <i data-feather="check" class="text-primary-500 mt-1"></i>122                            <span>Optimization for plant growth wavelengths</span>123                        </li>124                    </ul>125                </div>126                <div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">127                    <h5 class="font-semibold text-gray-800 dark:text-white mb-2">Algorithm Features</h5>128                    <ul class="space-y-2">129                        <li class="flex items-start gap-2">130                            <i data-feather="check" class="text-primary-500 mt-1"></i>131                            <span>Least-squares optimization for LED combinations</span>132                        </li>133                        <li class="flex items-start gap-2">134                            <i data-feather="check" class="text-primary-500 mt-1"></i>135                            <span>Visual spectrum comparison tools</span>136                        </li>137                        <li class="flex items-start gap-2">138                            <i data-feather="check" class="text-primary-500 mt-1"></i>139                            <span>Cost-performance tradeoff analysis</span>140                        </li>141                    </ul>142                </div>143            </div>144        `145    },146    renesasSystem: {147        title: "Renesas EK-RA8D1 Embedded System",148        content: `149            <div class="grid grid-cols-1 md:grid-cols-2 gap-8">150                <div>151                    <h4 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">Project Details</h4>152                    <ul class="space-y-3">153                        <li class="flex items-start gap-3">154                            <i data-feather="user" class="text-primary-500 mt-1"></i>155                            <span><strong>Role:</strong> Embedded Systems Developer</span>156                        </li>157                        <li class="flex items-start gap-3">158                            <i data-feather="calendar" class="text-primary-500 mt-1"></i>159                            <span><strong>Status:</strong> Ongoing development</span>160                        </li>161                        <li class="flex items-start gap-3">162                            <i data-feather="cpu" class="text-primary-500 mt-1"></i>163                            <span><strong>Microcontroller:</strong> Renesas EK-RA8D1 (ARM Cortex-M4)</span>164                        </li>165                        <li class="flex items-start gap-3">166                            <i data-feather="zap" class="text-primary-500 mt-1"></i>167                            <span><strong>RTOS:</strong> T-Kernel with optimized task scheduling</span>168                        </li>169                    </ul>170                </div>171                <div class="bg-primary-500/10 p-4 rounded-lg">172                    <img src="http://static.photos/technology/640x360/43" alt="Renesas EK-RA8D1" class="w-full h-auto rounded-lg">173                </div>174            </div>175 176            <h4 class="text-xl font-semibold text-gray-800 dark:text-white mt-6 mb-4">Technical Implementation</h4>177            <div class="grid grid-cols-1 md:grid-cols-2 gap-6">178                <div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">179                    <h5 class="font-semibold text-gray-800 dark:text-white mb-2">RTOS Features</h5>180                    <ul class="space-y-2">181                        <li class="flex items-start gap-2">182                            <i data-feather="check" class="text-primary-500 mt-1"></i>183                            <span>Priority-based task scheduling</span>184                        </li>185                        <li class="flex items-start gap-2">186                            <i data-feather="check" class="text-primary-500 mt-1"></i>187                            <span>Inter-task communication mechanisms</span>188                        </li>189                        <li class="flex items-start gap-2">190                            <i data-feather="check" class="text-primary-500 mt-1"></i>191                            <span>Resource management</span>192                        </li>193                    </ul>194                </div>195                <div class="bg-gray-50 dark:bg-gray-700 p-4 rounded-lg">196                    <h5 class="font-semibold text-gray-800 dark:text-white mb-2">Hardware Integration</h5>197                    <ul class="space-y-2">198                        <li class="flex items-start gap-2">199                            <i data-feather="check" class="text-primary-500 mt-1"></i>200                            <span>Sensor interfacing with minimal latency</span>201                        </li>202                        <li class="flex items-start gap-2">203                            <i data-feather="check" class="text-primary-500 mt-1"></i>204                            <span>Wi-Fi/Bluetooth configuration</span>205                        </li>206                        <li class="flex items-start gap-2">207                            <i data-feather="check" class="text-primary-500 mt-1"></i>208                            <span>Power management</span>209                        </li>210                    </ul>211                </div>212            </div>213        `214    }215};216 217function showProjectDetails(projectId) {218    const modal = document.getElementById('projectModal');219    const project = projects[projectId];220    221    document.getElementById('modalTitle').textContent = project.title;222    document.getElementById('modalContent').innerHTML = project.content;223    224    modal.classList.remove('hidden');225    feather.replace(); // Refresh icons in modal226}227 228function closeModal() {229    document.getElementById('projectModal').classList.add('hidden');230}231 232// Initialize dark mode toggle233document.addEventListener('DOMContentLoaded', function() {234    const darkModeToggle = document.getElementById('darkModeToggle');235    236    // Check for saved user preference or OS preference237    if (localStorage.getItem('darkMode') === 'true' || 238        (!localStorage.getItem('darkMode') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {239        document.documentElement.classList.add('dark');240        darkModeToggle.checked = true;241    }242 243    // Listen for toggle changes244    darkModeToggle.addEventListener('change', function() {245        if (this.checked) {246            document.documentElement.classList.add('dark');247            localStorage.setItem('darkMode', 'true');248        } else {249            document.documentElement.classList.remove('dark');250            localStorage.setItem('darkMode', 'false');251        }252    });253});254