|
| 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>Devak - Your Data Never Leaves Your Machine</title> |
| 7 | + <link rel="stylesheet" href="styles.css"> |
| 8 | + <meta name="description" content="Devak - Keep sensitive code, keys, and projects secure—offline and under your control."> |
| 9 | +</head> |
| 10 | +<body> |
| 11 | + <div class="container"> |
| 12 | + <header class="header"> |
| 13 | + <div class="logo"> |
| 14 | + <img src="static/logo.png" alt="Devak Logo" width="80" height="80"> |
| 15 | + </div> |
| 16 | + <h1 class="title">Devak</h1> |
| 17 | + <p class="subtitle">Your data never leaves your machine. Keep sensitive code, keys, and projects secure—offline and under your control.</p> |
| 18 | + </header> |
| 19 | + |
| 20 | + <nav class="nav"> |
| 21 | + <a href="#https-capture" class="nav-link">HTTP/HTTPS Capture</a> |
| 22 | + <a href="#http-client" class="nav-link">HTTP Client</a> |
| 23 | + <a href="#json" class="nav-link">JSON Format</a> |
| 24 | + <a href="#qrcode" class="nav-link">QR Code</a> |
| 25 | + <a href="#image" class="nav-link">Image Compress</a> |
| 26 | + <a href="#time" class="nav-link">Time Convert</a> |
| 27 | + </nav> |
| 28 | + |
| 29 | + <main class="main"> |
| 30 | + <!-- HTTP/HTTPS Capture Section --> |
| 31 | + <section id="https-capture" class="section"> |
| 32 | + <div class="section-header"> |
| 33 | + <div class="section-icon">🔒</div> |
| 34 | + <h2>Capture HTTP/HTTPS Requests</h2> |
| 35 | + </div> |
| 36 | + <div class="screenshots"> |
| 37 | + <div class="screenshot-item"> |
| 38 | + <img src="static/https_capture_1.png" alt="HTTPS Capture 1" loading="lazy"> |
| 39 | + <div class="description"> |
| 40 | + <div class="desc-item"><span class="number">1</span> capture 流量证书设置按钮</div> |
| 41 | + <div class="desc-item"><span class="number">2</span> 监听本机地址和端口</div> |
| 42 | + <div class="desc-item"><span class="number">3</span> 启动监听按钮</div> |
| 43 | + <div class="desc-item"><span class="number">4</span> 根据 url 过滤</div> |
| 44 | + <div class="desc-item"><span class="number">5</span> 清空所有记录</div> |
| 45 | + </div> |
| 46 | + </div> |
| 47 | + <div class="screenshot-item"> |
| 48 | + <img src="static/https_capture_2.png" alt="HTTPS Capture 2" loading="lazy"> |
| 49 | + </div> |
| 50 | + <div class="screenshot-item"> |
| 51 | + <img src="static/https_capture_3.png" alt="HTTPS Capture 3" loading="lazy"> |
| 52 | + <div class="description"> |
| 53 | + <div class="desc-item"><span class="number">1</span> Copy 证书内容,可以将内容手动保存为 pem 文件</div> |
| 54 | + <div class="desc-item"><span class="number">2</span> Save 证书内容,保存到本机 pem 文件</div> |
| 55 | + <div class="desc-item"><span class="number">3</span> 开启 http 服务,通过局域网访问 URL 下载证书(需要在同一个局域网内),iOS 手机会下载 mobilecofig 文件,其他设备下载 pem 文件。</div> |
| 56 | + </div> |
| 57 | + </div> |
| 58 | + <div class="screenshot-item"> |
| 59 | + <img src="static/https_capture_4.png" alt="HTTPS Capture 4" loading="lazy"> |
| 60 | + <div class="description"> |
| 61 | + <div class="desc-item"><span class="number">1</span> 局域网连接,访问下载证书</div> |
| 62 | + <div class="desc-item"><span class="number">2</span> 扫描二维码下载证书到手机(局域网)</div> |
| 63 | + </div> |
| 64 | + </div> |
| 65 | + </div> |
| 66 | + </section> |
| 67 | + |
| 68 | + <!-- HTTP Client Section --> |
| 69 | + <section id="http-client" class="section"> |
| 70 | + <div class="section-header"> |
| 71 | + <div class="section-icon">🌐</div> |
| 72 | + <h2>HTTP Request & API Management</h2> |
| 73 | + </div> |
| 74 | + <div class="screenshots"> |
| 75 | + <div class="screenshot-item"> |
| 76 | + <img src="static/http_client_1.png" alt="HTTP Client 1" loading="lazy"> |
| 77 | + <div class="description"> |
| 78 | + <div class="desc-item"><span class="number">1</span> 创建 Top Level Folder</div> |
| 79 | + <div class="desc-item"><span class="number">2</span> 创建 Request item</div> |
| 80 | + <div class="desc-item"><span class="number">3</span> 创建 Sub group folder</div> |
| 81 | + <div class="desc-item"><span class="number">4</span> Modify Folder</div> |
| 82 | + <div class="desc-item"><span class="number">5</span> Delete item</div> |
| 83 | + </div> |
| 84 | + </div> |
| 85 | + <div class="screenshot-item"> |
| 86 | + <img src="static/http_client_2.png" alt="HTTP Client 2" loading="lazy"> |
| 87 | + </div> |
| 88 | + </div> |
| 89 | + </section> |
| 90 | + |
| 91 | + <!-- JSON Format Section --> |
| 92 | + <section id="json" class="section"> |
| 93 | + <div class="section-header"> |
| 94 | + <div class="section-icon">{}</div> |
| 95 | + <h2>JSON Format Pretty</h2> |
| 96 | + </div> |
| 97 | + <div class="screenshots"> |
| 98 | + <div class="screenshot-item"> |
| 99 | + <img src="static/json_1.png" alt="JSON Format" loading="lazy"> |
| 100 | + </div> |
| 101 | + </div> |
| 102 | + </section> |
| 103 | + |
| 104 | + <!-- QR Code Section --> |
| 105 | + <section id="qrcode" class="section"> |
| 106 | + <div class="section-header"> |
| 107 | + <div class="section-icon">📱</div> |
| 108 | + <h2>QR Code Generate & Read</h2> |
| 109 | + </div> |
| 110 | + <div class="screenshots"> |
| 111 | + <div class="screenshot-item"> |
| 112 | + <img src="static/qrcode_1.png" alt="QR Code 1" loading="lazy"> |
| 113 | + </div> |
| 114 | + <div class="screenshot-item"> |
| 115 | + <img src="static/qrcode_2.png" alt="QR Code 2" loading="lazy"> |
| 116 | + <div class="description"> |
| 117 | + <div class="desc-item"><span class="number">1</span> Copy from clipboard</div> |
| 118 | + </div> |
| 119 | + </div> |
| 120 | + </div> |
| 121 | + </section> |
| 122 | + |
| 123 | + <!-- Image Compress Section --> |
| 124 | + <section id="image" class="section"> |
| 125 | + <div class="section-header"> |
| 126 | + <div class="section-icon">🖼️</div> |
| 127 | + <h2>Image Compress</h2> |
| 128 | + </div> |
| 129 | + <div class="screenshots"> |
| 130 | + <div class="screenshot-item"> |
| 131 | + <img src="static/image_compress_1.png" alt="Image Compress" loading="lazy"> |
| 132 | + </div> |
| 133 | + </div> |
| 134 | + </section> |
| 135 | + |
| 136 | + <!-- Time Convert Section --> |
| 137 | + <section id="time" class="section"> |
| 138 | + <div class="section-header"> |
| 139 | + <div class="section-icon">⏰</div> |
| 140 | + <h2>Time Convert Format</h2> |
| 141 | + </div> |
| 142 | + <div class="screenshots"> |
| 143 | + <div class="screenshot-item"> |
| 144 | + <img src="static/time_1.png" alt="Time Convert" loading="lazy"> |
| 145 | + </div> |
| 146 | + </div> |
| 147 | + </section> |
| 148 | + </main> |
| 149 | + |
| 150 | + <footer class="footer"> |
| 151 | + <p>Devak - Secure, Offline, Under Your Control</p> |
| 152 | + <a href="https://github.com/outman/deva-support" class="github-link" target="_blank" rel="noopener"> |
| 153 | + <svg height="20" width="20" viewBox="0 0 16 16" fill="currentColor"> |
| 154 | + <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path> |
| 155 | + </svg> |
| 156 | + View on GitHub |
| 157 | + </a> |
| 158 | + </footer> |
| 159 | + </div> |
| 160 | + |
| 161 | + <script> |
| 162 | + // Smooth scroll for navigation links |
| 163 | + document.querySelectorAll('a[href^="#"]').forEach(anchor => { |
| 164 | + anchor.addEventListener('click', function (e) { |
| 165 | + e.preventDefault(); |
| 166 | + const target = document.querySelector(this.getAttribute('href')); |
| 167 | + if (target) { |
| 168 | + target.scrollIntoView({ behavior: 'smooth', block: 'start' }); |
| 169 | + } |
| 170 | + }); |
| 171 | + }); |
| 172 | + |
| 173 | + // Add active state to nav on scroll |
| 174 | + const sections = document.querySelectorAll('.section'); |
| 175 | + const navLinks = document.querySelectorAll('.nav-link'); |
| 176 | + |
| 177 | + window.addEventListener('scroll', () => { |
| 178 | + let current = ''; |
| 179 | + sections.forEach(section => { |
| 180 | + const sectionTop = section.offsetTop; |
| 181 | + const sectionHeight = section.clientHeight; |
| 182 | + if (scrollY >= sectionTop - 100) { |
| 183 | + current = section.getAttribute('id'); |
| 184 | + } |
| 185 | + }); |
| 186 | + |
| 187 | + navLinks.forEach(link => { |
| 188 | + link.classList.remove('active'); |
| 189 | + if (link.getAttribute('href') === `#${current}`) { |
| 190 | + link.classList.add('active'); |
| 191 | + } |
| 192 | + }); |
| 193 | + }); |
| 194 | + </script> |
| 195 | +</body> |
| 196 | +</html> |
0 commit comments