Skip to content

Commit 380fc78

Browse files
authored
Merge pull request #11 from kellenmurphy/ui/footer-and-privacy
UI: footer mobile centering, badges, and privacy notice
2 parents 578f6fa + f351253 commit 380fc78

5 files changed

Lines changed: 81 additions & 13 deletions

File tree

.github/workflows/ci.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,16 @@ jobs:
3434
- name: Type check
3535
run: npm run check
3636

37-
- name: Test
38-
run: npm test
37+
- name: Test with coverage
38+
run: npm run coverage
39+
40+
- name: Upload coverage to Codecov
41+
# codecov/codecov-action v6.0.0
42+
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2
43+
with:
44+
token: ${{ secrets.CODECOV_TOKEN }}
45+
files: ./coverage/lcov.info
46+
fail_ci_if_error: true
3947

4048
- name: Build
4149
run: npm run build

src/routes/+layout.svelte

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,30 +98,48 @@
9898

9999
<footer class="px-6 py-4">
100100
<div
101-
class="mx-auto flex max-w-5xl flex-wrap items-center justify-center gap-x-3 gap-y-1 text-xs text-neutral-400 dark:text-neutral-600"
101+
class="mx-auto flex max-w-5xl flex-col items-center gap-2 text-xs text-neutral-400 dark:text-neutral-600 sm:flex-row sm:flex-wrap sm:justify-center sm:gap-x-3 sm:gap-y-1"
102102
>
103103
<a
104104
href="/privacy"
105105
class="transition-colors hover:text-neutral-600 dark:hover:text-neutral-400"
106106
>Privacy</a
107107
>
108-
<span aria-hidden="true">&middot;</span>
108+
<span aria-hidden="true" class="hidden sm:inline">&middot;</span>
109109
<span>
110110
Made with ♥ by <a
111111
href="https://kellenmurphy.com"
112112
class="transition-colors hover:text-neutral-600 dark:hover:text-neutral-400"
113113
>Kellen "The SAML Guy" Murphy</a
114114
>
115115
</span>
116-
<span aria-hidden="true">&middot;</span>
117-
<a
118-
href="https://github.com/kellenmurphy/samlguy"
119-
class="transition-colors hover:text-neutral-600 dark:hover:text-neutral-400"
120-
target="_blank"
121-
rel="noopener noreferrer"
122-
>
123-
GitHub
124-
</a>
116+
<span aria-hidden="true" class="hidden sm:inline">&middot;</span>
117+
<span class="flex items-center gap-2">
118+
<a
119+
href="https://github.com/kellenmurphy/samlguy/actions/workflows/ci.yml"
120+
target="_blank"
121+
rel="noopener noreferrer"
122+
aria-label="CI status"
123+
>
124+
<img
125+
src="https://img.shields.io/github/actions/workflow/status/kellenmurphy/samlguy/ci.yml?branch=main&style=flat-square&label=CI&labelColor=404040"
126+
alt="CI status"
127+
class="h-4"
128+
/>
129+
</a>
130+
<a
131+
href="https://app.codecov.io/gh/kellenmurphy/samlguy"
132+
target="_blank"
133+
rel="noopener noreferrer"
134+
aria-label="Code coverage"
135+
>
136+
<img
137+
src="https://img.shields.io/codecov/c/github/kellenmurphy/samlguy?style=flat-square&label=coverage&labelColor=404040"
138+
alt="Code coverage"
139+
class="h-4"
140+
/>
141+
</a>
142+
</span>
125143
</div>
126144
</footer>
127145
</div>

src/routes/+page.svelte

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,24 @@
147147
class="h-48 w-full resize-y rounded-lg border border-neutral-300 bg-neutral-50 px-4 py-3 font-mono text-sm text-neutral-900 placeholder-neutral-400 focus:border-neutral-500 focus:outline-none dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:placeholder-neutral-600"
148148
></textarea>
149149

150+
<p class="flex items-center gap-1.5 text-xs text-neutral-400 dark:text-neutral-600">
151+
<svg
152+
xmlns="http://www.w3.org/2000/svg"
153+
viewBox="0 0 24 24"
154+
fill="none"
155+
stroke="currentColor"
156+
stroke-width="2"
157+
stroke-linecap="round"
158+
stroke-linejoin="round"
159+
class="h-3 w-3 shrink-0"
160+
aria-hidden="true"
161+
>
162+
<rect x="3" y="11" width="18" height="11" rx="2" ry="2" />
163+
<path d="M7 11V7a5 5 0 0 1 10 0v4" />
164+
</svg>
165+
Decoded entirely in your browser — nothing you paste is sent to any server.
166+
</p>
167+
150168
{#if detected === 'jwt' && results.length === 0}
151169
<div class="flex items-center gap-3">
152170
<span

src/routes/privacy/+page.svelte

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,29 @@
77
<h1 class="text-2xl font-bold">Privacy Policy</h1>
88
<p class="mt-1 text-sm text-neutral-500">Effective: May 2025</p>
99

10+
<div
11+
class="mt-6 flex items-start gap-3 rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-900/60 dark:bg-green-950/30"
12+
>
13+
<svg
14+
xmlns="http://www.w3.org/2000/svg"
15+
viewBox="0 0 24 24"
16+
fill="none"
17+
stroke="currentColor"
18+
stroke-width="2"
19+
stroke-linecap="round"
20+
stroke-linejoin="round"
21+
class="mt-0.5 h-4 w-4 shrink-0 text-green-700 dark:text-green-400"
22+
aria-hidden="true"
23+
>
24+
<rect x="3" y="11" width="18" height="11" rx="2" ry="2" />
25+
<path d="M7 11V7a5 5 0 0 1 10 0v4" />
26+
</svg>
27+
<p class="text-sm font-medium text-green-800 dark:text-green-400">
28+
Everything is processed in your browser. Nothing you paste — SAML assertions, JWTs,
29+
certificates, or any other identity data — is ever transmitted to or stored on any server.
30+
</p>
31+
</div>
32+
1033
<div class="mt-8 space-y-6 text-sm leading-relaxed text-neutral-700 dark:text-neutral-300">
1134
<section class="space-y-2">
1235
<h2 class="text-base font-semibold text-neutral-900 dark:text-neutral-100">

vitest.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export default defineConfig({
1212
include: ['src/lib/**/*.test.ts'],
1313
coverage: {
1414
provider: 'v8',
15+
reporter: ['text', 'lcov'],
1516
include: ['src/lib/**/*.ts'],
1617
exclude: ['src/lib/**/*.test.ts', 'src/lib/fixtures.test-helper.ts']
1718
}

0 commit comments

Comments
 (0)