Skip to content

Commit 897d2e5

Browse files
authored
Merge pull request #1 from stechstudio/feature/web-ui
Web UI Implementation with Template Management & Permissions System
2 parents 2a3db1d + 88c77ff commit 897d2e5

150 files changed

Lines changed: 19695 additions & 697 deletions

File tree

Some content is hidden

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

.github/workflows/build-ui.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: Build Web UI
2+
3+
on:
4+
push:
5+
branches: [ main, develop, feature/web-ui ]
6+
paths:
7+
- 'src/Server/frontend/**'
8+
- '.github/workflows/build-ui.yml'
9+
pull_request:
10+
branches: [ main ]
11+
paths:
12+
- 'src/Server/frontend/**'
13+
14+
jobs:
15+
build:
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- uses: actions/checkout@v4
20+
21+
- name: Setup Node.js
22+
uses: actions/setup-node@v4
23+
with:
24+
node-version: '20'
25+
cache: 'npm'
26+
cache-dependency-path: src/Server/frontend/package-lock.json
27+
28+
- name: Install dependencies
29+
run: npm ci
30+
working-directory: src/Server/frontend
31+
32+
- name: Build UI
33+
run: npm run build
34+
working-directory: src/Server/frontend
35+
36+
- name: Check build output
37+
run: |
38+
echo "Build artifacts:"
39+
ls -la src/Server/public/assets/
40+
echo "Total size:"
41+
du -sh src/Server/public/
42+
43+
- name: Upload build artifacts
44+
uses: actions/upload-artifact@v4
45+
with:
46+
name: ui-build
47+
path: src/Server/public/
48+
retention-days: 7
49+
50+
- name: Commit built assets
51+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
52+
run: |
53+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
54+
git config --local user.name "github-actions[bot]"
55+
git add src/Server/public/
56+
git diff --staged --quiet || git commit -m "Build: Update UI assets [skip ci]"
57+
git push

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ composer.lock
22
workbench/
33
vendor/
44
.env*
5-
*_PLAN.md
5+
env/
66
CLAUDE.md
7+
*_PLAN.md
78
.claude
89
.keep
910
node_modules

README.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
## Key Features
1010

1111
- **🔐 Multi-Vault Support** - AWS SSM Parameter Store and AWS Secrets Manager
12+
- **🖥️ Web UI** - Modern browser-based interface for visual secret management
1213
- **🚀 Interactive Shell** - Context-aware shell with tab completion for rapid secret management
1314
- **🌍 Environment Isolation** - Separate secrets by stage (local, staging, production)
14-
- **📝 Template System** - Merge secrets into templates while preserving structure
15+
- **📝 Template Management** - Create, validate, and process templates with placeholders
1516
- **🔄 Bulk Operations** - Import, export, copy, and diff secrets across environments
1617
- **🤝 Team Collaboration** - Share secret management with proper access controls
1718
- **⚙️ CI/CD Ready** - Export secrets for deployment pipelines
@@ -34,6 +35,9 @@ composer require stechstudio/keep
3435
# Export to .env
3536
./vendor/bin/keep export --stage=production --file=.env
3637

38+
# Create template from existing secrets
39+
./vendor/bin/keep template:add .env.template --stage=production
40+
3741
# Use template with placeholders
3842
./vendor/bin/keep export --stage=production --template=.env.template --file=.env
3943
```
@@ -61,6 +65,29 @@ ssm:production> diff staging production
6165
│ API_KEY │ abc... │ abc... │ ✓ │
6266
```
6367

68+
## Web UI
69+
70+
Keep includes a modern web interface for visual secret management:
71+
72+
```bash
73+
# Start the web server
74+
./vendor/bin/keep server
75+
76+
# Custom port (default: 4000)
77+
./vendor/bin/keep server --port=8080
78+
79+
# Don't auto-open browser
80+
./vendor/bin/keep server --no-browser
81+
```
82+
83+
The Web UI provides:
84+
- **Visual secret management** with search and filtering
85+
- **Diff matrix view** comparing secrets across stages/vaults
86+
- **Export functionality** with live preview
87+
- **Import wizard** for .env files with conflict resolution
88+
- **Settings management** for vaults and stages
89+
- **Real-time validation** and error handling
90+
6491
## Documentation
6592

6693
📚 **Full documentation available at [https://stechstudio.github.io/keep/](https://stechstudio.github.io/keep/)**

composer.json

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@
2121
],
2222
"require": {
2323
"php": "^8.3",
24-
"ext-sodium": "*",
2524
"ext-readline": "*",
25+
"ext-sodium": "*",
2626
"illuminate/console": "^12.0",
2727
"illuminate/container": "^12.0",
28-
"illuminate/events": "^12.0",
2928
"illuminate/support": "^12.0",
3029
"laravel/prompts": "^0.3.0",
3130
"symfony/console": "^7.0",
@@ -48,8 +47,7 @@
4847
"autoload": {
4948
"psr-4": {
5049
"STS\\Keep\\": "src/"
51-
},
52-
"files": ["src/bootstrap.php"]
50+
}
5351
},
5452
"autoload-dev": {
5553
"psr-4": {
@@ -63,7 +61,15 @@
6361
"lint": [
6462
"@php vendor/bin/phpstan analyse --verbose --ansi"
6563
],
66-
"format": "vendor/bin/pint --preset laravel"
64+
"format": "vendor/bin/pint --preset laravel",
65+
"ui:install": "cd src/Server/frontend && npm install",
66+
"ui:build": "cd src/Server/frontend && npm run build",
67+
"ui:dev": "cd src/Server/frontend && npm run dev",
68+
"ui:clean": "cd src/Server/frontend && npm run clean",
69+
"build": [
70+
"@ui:install",
71+
"@ui:build"
72+
]
6773
},
6874
"bin": ["bin/keep"],
6975
"config": {

docs/.vitepress/config.mjs

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,20 @@ export default defineConfig({
66

77
// Base URL for GitHub Pages (repository name)
88
base: '/keep/',
9+
10+
// Ignore dead links for now
11+
ignoreDeadLinks: true,
12+
13+
// Favicon - must include base path explicitly for head elements
14+
head: [
15+
['link', { rel: 'icon', type: 'image/svg+xml', href: '/keep/logo.svg' }],
16+
['link', { rel: 'alternate icon', type: 'image/svg+xml', href: '/keep/logo.svg' }],
17+
['link', { rel: 'mask-icon', href: '/keep/logo.svg', color: '#000000' }]
18+
],
919

1020
themeConfig: {
21+
// Logo in nav bar
22+
logo: '/logo.svg',
1123
// GitHub repository
1224
socialLinks: [
1325
{icon: 'github', link: 'https://github.com/stechstudio/keep'}
@@ -16,8 +28,7 @@ export default defineConfig({
1628
// Navigation
1729
nav: [
1830
{text: 'Home', link: '/'},
19-
{text: 'Guide', link: '/guide/'},
20-
{text: 'Examples', link: '/examples/'}
31+
{text: 'Guide', link: '/guide/'}
2132
],
2233

2334
// Sidebar
@@ -29,18 +40,35 @@ export default defineConfig({
2940
{text: 'Introduction', link: '/guide/'},
3041
{text: 'Installation', link: '/guide/installation'},
3142
{text: 'Configuration', link: '/guide/configuration'},
32-
{text: 'Quick Start', link: '/guide/quick-start'},
33-
{text: 'Interactive Shell', link: '/guide/shell'}
43+
{text: 'Quick Start', link: '/guide/quick-start'}
3444
]
3545
},
3646
{
37-
text: 'Managing Secrets',
47+
text: 'CLI Commands',
3848
items: [
39-
{text: 'Overview', link: '/guide/managing-secrets/'},
40-
{text: 'Creating & Viewing', link: '/guide/managing-secrets/creating-viewing'},
41-
{text: 'Cross-Environment', link: '/guide/managing-secrets/cross-environment'},
42-
{text: 'Exporting to .env', link: '/guide/managing-secrets/exporting-to-env'}
43-
// {text: 'Runtime Secrets', link: '/guide/managing-secrets/runtime-secrets'} // Deferred to future release
49+
{text: 'Overview', link: '/guide/cli-commands/'},
50+
{text: 'Creating & Viewing', link: '/guide/cli-commands/creating-viewing'},
51+
{text: 'Cross-Environment', link: '/guide/cli-commands/cross-environment'},
52+
{text: 'Exporting to .env', link: '/guide/cli-commands/exporting-to-env'}
53+
// {text: 'Runtime Secrets', link: '/guide/cli-commands/runtime-secrets'} // Deferred to future release
54+
]
55+
},
56+
{
57+
text: 'Interactive Shell',
58+
items: [
59+
{text: 'Getting Started', link: '/guide/shell'},
60+
{text: 'Commands & Shortcuts', link: '/guide/shell-commands'},
61+
{text: 'Tips & Tricks', link: '/guide/shell-tips'}
62+
]
63+
},
64+
{
65+
text: 'Web UI',
66+
items: [
67+
{text: 'Getting Started', link: '/guide/web-ui/'},
68+
{text: 'Managing Secrets', link: '/guide/web-ui/managing-secrets'},
69+
{text: 'Diff & Compare', link: '/guide/web-ui/diff-compare'},
70+
{text: 'Import & Export', link: '/guide/web-ui/import-export'},
71+
{text: 'Security', link: '/guide/web-ui/security'}
4472
]
4573
},
4674
{
@@ -59,18 +87,6 @@ export default defineConfig({
5987
// {text: 'Security Architecture', link: '/guide/reference/security-architecture'} // Deferred - encrypted cache feature
6088
]
6189
}
62-
],
63-
'/examples/': [
64-
{
65-
text: 'Examples',
66-
items: [
67-
{text: 'Overview', link: '/examples/'},
68-
// {text: 'Laravel Integration', link: '/examples/laravel'}, // Deferred to future release
69-
{text: 'CI/CD Workflows', link: '/examples/ci-cd'},
70-
{text: 'Multi-Environment Setup', link: '/examples/multi-environment'},
71-
{text: 'AWS Setup', link: '/examples/aws-setup'}
72-
]
73-
}
7490
]
7591
},
7692

0 commit comments

Comments
 (0)