Skip to content

Commit 616a0a0

Browse files
committed
init
0 parents  commit 616a0a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+5059
-0
lines changed

.github/workflows/deploy.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Deploy to GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
pages: write
11+
id-token: write
12+
13+
concurrency:
14+
group: "pages"
15+
cancel-in-progress: false
16+
17+
jobs:
18+
deploy:
19+
environment:
20+
name: github-pages
21+
url: ${{ steps.deployment.outputs.page_url }}
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Checkout
25+
uses: actions/checkout@v4
26+
27+
- name: Setup Node.js
28+
uses: actions/setup-node@v4
29+
with:
30+
node-version: '20'
31+
cache: 'pnpm'
32+
33+
- name: Install pnpm
34+
uses: pnpm/action-setup@v4
35+
with:
36+
version: 9
37+
38+
- name: Install dependencies
39+
run: pnpm install
40+
41+
- name: Build
42+
run: pnpm run build
43+
44+
- name: Setup Pages
45+
uses: actions/configure-pages@v5
46+
47+
- name: Upload artifact
48+
uses: actions/upload-pages-artifact@v3
49+
with:
50+
path: './build'
51+
52+
- name: Deploy to GitHub Pages
53+
id: deployment
54+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
node_modules
2+
3+
# Output
4+
.output
5+
.vercel
6+
.netlify
7+
.wrangler
8+
/.svelte-kit
9+
/build
10+
11+
# OS
12+
.DS_Store
13+
Thumbs.db
14+
15+
# Env
16+
.env
17+
.env.*
18+
!.env.example
19+
!.env.test
20+
21+
# Vite
22+
vite.config.js.timestamp-*
23+
vite.config.ts.timestamp-*

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
engine-strict=true

.prettierignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Package Managers
2+
package-lock.json
3+
pnpm-lock.yaml
4+
yarn.lock
5+
bun.lock
6+
bun.lockb
7+
8+
# Miscellaneous
9+
/static/

.prettierrc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"useTabs": true,
3+
"singleQuote": true,
4+
"trailingComma": "none",
5+
"printWidth": 100,
6+
"plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
7+
"overrides": [
8+
{
9+
"files": "*.svelte",
10+
"options": {
11+
"parser": "svelte"
12+
}
13+
}
14+
],
15+
"tailwindStylesheet": "./src/routes/layout.css"
16+
}

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"files.associations": {
3+
"*.css": "tailwindcss"
4+
}
5+
}

AGENTS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Devak
2+
3+
## svelte static for github pages
4+

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Devak
2+
## Description
3+
> Your data never leaves your machine. Keep sensitive code, keys, and projects secure—offline and under your control.
4+
5+
## Logo
6+
- static/logo.png
7+
8+
## Application Feature
9+
10+
### Capture HTTP/HTTPS Requests
11+
- Video static/htts_capture.mp4
12+
- Screen UI static/https_capture_1.png
13+
1. capture 流量证书设置按钮
14+
2. 监听本机地址和端口
15+
3. 启动监听按钮
16+
4. 根据 url 过滤
17+
5. 清空所有记录
18+
- Screen UI static/https_caputre_2.png
19+
- Screen UI static/https_capture_3.png
20+
1. Copy 证书内容,可以将内容手动保存为 pem 文件
21+
2. Save 证书内容,保存到本机 pem 文件
22+
3. 开启 http 服务,通过局域网访问 URL 下载证书(需要在同一个局域网内),iOS 手机会下载 mobilecofig 文件,其他设备下载 pem 文件。
23+
- Screen UI static/https_capture_4.png
24+
1. 局域网连接,访问下载证书
25+
2. 扫描二期码下载证书到手机(局域网)
26+
27+
### HTTP request and api manage
28+
- Screen UI static/http_client_1.png
29+
1. 创建 Top Level Folder
30+
2. 创建 Request item
31+
3. 创建 Sub group folder
32+
4. Modify Folder
33+
5. Delete item
34+
- Screen UI static/http_client_1.png
35+
36+
### JSON format pretty
37+
- Screen UI static/json_1.png
38+
39+
### QrCode generate and read
40+
- Screen UI static/qrcode_1.png
41+
- Screen UI static/qrcode_2.png
42+
1. Copy from clipboard
43+
44+
### Image compress
45+
- Screen UI static/image_compress_1.png
46+
47+
### Time convert format
48+
- Screen UI static/time_1.png

eslint.config.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import prettier from 'eslint-config-prettier';
2+
import { fileURLToPath } from 'node:url';
3+
import { includeIgnoreFile } from '@eslint/compat';
4+
import js from '@eslint/js';
5+
import svelte from 'eslint-plugin-svelte';
6+
import globals from 'globals';
7+
import svelteConfig from './svelte.config.js';
8+
9+
const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url));
10+
11+
/** @type {import('eslint').Linter.Config[]} */ export default [
12+
includeIgnoreFile(gitignorePath),
13+
js.configs.recommended,
14+
...svelte.configs.recommended,
15+
prettier,
16+
...svelte.configs.prettier,
17+
18+
{
19+
languageOptions: { globals: { ...globals.browser, ...globals.node } }
20+
},
21+
22+
{
23+
files: ['**/*.svelte', '**/*.svelte.js'],
24+
languageOptions: { parserOptions: { svelteConfig } }
25+
}
26+
];

index.html

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
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

Comments
 (0)