2025-12-08 20:45:43 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
2025-12-15 17:30:45 +00:00
< title > sudoxnym f-droid repo< / title >
2025-12-08 20:45:43 +00:00
< link rel = "preconnect" href = "https://fonts.googleapis.com" >
2025-12-15 17:30:45 +00:00
< link href = "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=Space+Grotesk:wght@400;500;700&display=swap" rel = "stylesheet" >
2025-12-08 20:45:43 +00:00
< style >
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
2025-12-15 17:30:45 +00:00
--accent: #00ff9d;
--accent-dim: rgba(0, 255, 157, 0.15);
--bg-primary: #0a0a0f;
--bg-card: #12121a;
--bg-card-hover: #1a1a24;
--text-primary: #ffffff;
--text-secondary: #888899;
--border: #2a2a3a;
2025-12-08 20:45:43 +00:00
}
body {
2025-12-15 17:30:45 +00:00
font-family: "Space Grotesk", sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
2025-12-08 20:45:43 +00:00
min-height: 100vh;
2025-12-15 17:30:45 +00:00
overflow-x: hidden;
}
/* node network background */
.network-bg {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.node {
position: absolute;
width: 4px;
height: 4px;
background: var(--accent);
border-radius: 50%;
opacity: 0.3;
animation: pulse 3s ease-in-out infinite;
}
.node::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 1px;
background: linear-gradient(90deg, var(--accent), transparent);
transform-origin: left;
opacity: 0.1;
}
@keyframes pulse {
0%, 100% { opacity: 0.2; transform: scale(1); }
50% { opacity: 0.5; transform: scale(1.5); }
}
2025-12-08 20:45:43 +00:00
.container {
2025-12-15 17:30:45 +00:00
position: relative;
z-index: 1;
max-width: 700px;
margin: 0 auto;
padding: 3rem 1.5rem;
}
header {
2025-12-08 20:45:43 +00:00
text-align: center;
2025-12-15 17:30:45 +00:00
margin-bottom: 3rem;
2025-12-08 20:45:43 +00:00
}
h1 {
2025-12-15 17:30:45 +00:00
font-family: "JetBrains Mono", monospace;
font-size: 2rem;
font-weight: 700;
color: var(--accent);
2025-12-08 20:45:43 +00:00
margin-bottom: 0.5rem;
2025-12-15 17:30:45 +00:00
letter-spacing: -1px;
2025-12-08 20:45:43 +00:00
}
.tagline {
2025-12-15 17:30:45 +00:00
color: var(--text-secondary);
2025-12-08 20:45:43 +00:00
font-size: 1.1rem;
2025-12-15 17:30:45 +00:00
margin-bottom: 0.5rem;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.escape {
color: var(--accent);
font-family: "JetBrains Mono", monospace;
font-size: 0.9rem;
opacity: 0.8;
}
.qr-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px;
2025-12-08 20:45:43 +00:00
padding: 2rem;
2025-12-15 17:30:45 +00:00
text-align: center;
2025-12-08 20:45:43 +00:00
margin-bottom: 2rem;
}
2025-12-15 17:30:45 +00:00
.qr-wrapper {
background: white;
padding: 1rem;
border-radius: 8px;
display: inline-block;
margin-bottom: 1.5rem;
}
.qr-wrapper img {
width: 180px;
height: 180px;
display: block;
2025-12-08 20:45:43 +00:00
}
.repo-url {
2025-12-15 17:30:45 +00:00
font-family: "JetBrains Mono", monospace;
font-size: 0.85rem;
background: var(--accent-dim);
border: 1px solid var(--accent);
border-radius: 6px;
padding: 0.8rem 1rem;
color: var(--accent);
2025-12-08 20:45:43 +00:00
margin-bottom: 1rem;
2025-12-15 17:30:45 +00:00
word-break: break-all;
}
.btn-row {
display: flex;
gap: 0.75rem;
justify-content: center;
flex-wrap: wrap;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.btn {
font-family: "JetBrains Mono", monospace;
font-size: 0.85rem;
padding: 0.7rem 1.5rem;
border-radius: 6px;
2025-12-08 20:45:43 +00:00
border: none;
cursor: pointer;
2025-12-15 17:30:45 +00:00
transition: all 0.2s;
text-decoration: none;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.btn-primary {
background: var(--accent);
color: var(--bg-primary);
font-weight: 600;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.btn-primary:hover {
box-shadow: 0 0 20px rgba(0, 255, 157, 0.4);
transform: translateY(-1px);
}
.btn-secondary {
background: transparent;
border: 1px solid var(--border);
color: var(--text-primary);
}
.btn-secondary:hover {
border-color: var(--accent);
color: var(--accent);
}
.apps-section h2 {
font-family: "JetBrains Mono", monospace;
font-size: 1rem;
color: var(--text-secondary);
margin-bottom: 1rem;
font-weight: 500;
2025-12-08 20:45:43 +00:00
}
.app-card {
2025-12-15 17:30:45 +00:00
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 1.25rem;
2025-12-08 20:45:43 +00:00
margin-bottom: 1rem;
display: flex;
gap: 1rem;
2025-12-15 17:30:45 +00:00
align-items: flex-start;
transition: all 0.2s;
}
.app-card:hover {
background: var(--bg-card-hover);
border-color: var(--accent);
2025-12-08 20:45:43 +00:00
}
.app-icon {
2025-12-15 17:30:45 +00:00
width: 56px;
height: 56px;
background: var(--accent-dim);
border: 1px solid var(--accent);
2025-12-08 20:45:43 +00:00
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
2025-12-15 17:30:45 +00:00
font-size: 1.5rem;
flex-shrink: 0;
}
.app-info {
flex: 1;
2025-12-08 20:45:43 +00:00
}
.app-info h3 {
2025-12-15 17:30:45 +00:00
font-family: "JetBrains Mono", monospace;
font-size: 1.1rem;
color: var(--text-primary);
2025-12-08 20:45:43 +00:00
margin-bottom: 0.3rem;
}
.app-info p {
2025-12-15 17:30:45 +00:00
color: var(--text-secondary);
2025-12-08 20:45:43 +00:00
font-size: 0.9rem;
2025-12-15 17:30:45 +00:00
line-height: 1.4;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.app-tags {
display: flex;
gap: 0.5rem;
2025-12-08 20:45:43 +00:00
margin-top: 0.5rem;
2025-12-15 17:30:45 +00:00
flex-wrap: wrap;
}
.tag {
font-family: "JetBrains Mono", monospace;
font-size: 0.7rem;
padding: 0.2rem 0.5rem;
background: var(--bg-primary);
border: 1px solid var(--border);
border-radius: 4px;
color: var(--text-secondary);
}
.tag.root {
border-color: #ff6b6b;
color: #ff6b6b;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
2025-12-08 20:45:43 +00:00
.instructions {
2025-12-15 17:30:45 +00:00
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px;
2025-12-08 20:45:43 +00:00
padding: 1.5rem;
2025-12-15 17:30:45 +00:00
margin-top: 2rem;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.instructions h3 {
font-family: "JetBrains Mono", monospace;
font-size: 0.9rem;
color: var(--accent);
margin-bottom: 1rem;
2025-12-08 20:45:43 +00:00
}
.instructions ol {
margin-left: 1.2rem;
2025-12-15 17:30:45 +00:00
color: var(--text-secondary);
font-size: 0.9rem;
2025-12-08 20:45:43 +00:00
}
.instructions li {
2025-12-15 17:30:45 +00:00
margin-bottom: 0.6rem;
line-height: 1.4;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.instructions code {
font-family: "JetBrains Mono", monospace;
background: var(--bg-primary);
padding: 0.15rem 0.4rem;
border-radius: 4px;
font-size: 0.85rem;
color: var(--accent);
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
.fingerprint {
2025-12-08 20:45:43 +00:00
margin-top: 2rem;
2025-12-15 17:30:45 +00:00
text-align: center;
}
.fingerprint summary {
color: var(--text-secondary);
font-size: 0.85rem;
cursor: pointer;
font-family: "JetBrains Mono", monospace;
}
.fingerprint pre {
font-family: "JetBrains Mono", monospace;
font-size: 0.7rem;
color: var(--text-secondary);
background: var(--bg-card);
padding: 0.75rem;
border-radius: 6px;
margin-top: 0.5rem;
word-break: break-all;
white-space: pre-wrap;
}
footer {
text-align: center;
margin-top: 3rem;
padding-top: 2rem;
border-top: 1px solid var(--border);
}
footer a {
color: var(--text-secondary);
2025-12-08 20:45:43 +00:00
text-decoration: none;
2025-12-15 17:30:45 +00:00
font-family: "JetBrains Mono", monospace;
font-size: 0.85rem;
transition: color 0.2s;
2025-12-08 20:45:43 +00:00
}
2025-12-15 17:30:45 +00:00
footer a:hover {
color: var(--accent);
2025-12-08 20:45:43 +00:00
}
< / style >
< / head >
< body >
2025-12-15 17:30:45 +00:00
< div class = "network-bg" >
< div class = "node" style = "top: 15%; left: 10%; animation-delay: 0s;" > < / div >
< div class = "node" style = "top: 25%; left: 85%; animation-delay: 0.5s;" > < / div >
< div class = "node" style = "top: 45%; left: 5%; animation-delay: 1s;" > < / div >
< div class = "node" style = "top: 60%; left: 90%; animation-delay: 1.5s;" > < / div >
< div class = "node" style = "top: 80%; left: 15%; animation-delay: 2s;" > < / div >
< div class = "node" style = "top: 70%; left: 75%; animation-delay: 2.5s;" > < / div >
< div class = "node" style = "top: 35%; left: 50%; animation-delay: 0.8s;" > < / div >
< div class = "node" style = "top: 90%; left: 60%; animation-delay: 1.2s;" > < / div >
< / div >
2025-12-08 20:45:43 +00:00
< div class = "container" >
2025-12-15 17:30:45 +00:00
< header >
< h1 > sudoxnym/fdroid< / h1 >
< p class = "tagline" > personal f-droid repository< / p >
< p class = "escape" > // add repo, escape the play store< / p >
< / header >
2025-12-08 20:45:43 +00:00
2025-12-15 17:30:45 +00:00
< div class = "qr-card" >
< div class = "qr-wrapper" >
< img src = "https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=https://sudoxnym.github.io/fdroid-repo/repo&bgcolor=ffffff&color=0a0a0f" alt = "scan to add repo" >
< / div >
2025-12-08 20:45:43 +00:00
< div class = "repo-url" > https://sudoxnym.github.io/fdroid-repo/repo< / div >
2025-12-15 17:30:45 +00:00
< div class = "btn-row" >
< button class = "btn btn-primary" onclick = "navigator.clipboard.writeText('https://sudoxnym.github.io/fdroid-repo/repo');this.textContent='copied!';setTimeout(()=>this.textContent='copy url',2000)" > copy url< / button >
< a href = "fdroidrepos://sudoxnym.github.io/fdroid-repo/repo" class = "btn btn-secondary" > open in f-droid< / a >
< / div >
2025-12-08 20:45:43 +00:00
< / div >
2025-12-15 17:30:45 +00:00
< section class = "apps-section" >
< h2 > // available apps< / h2 >
< div class = "app-card" >
< div class = "app-icon" > 📱< / div >
< div class = "app-info" >
< h3 > resumd< / h3 >
< p > recent apps overlay for android tv. shows your recently used apps in a floating overlay.< / p >
< div class = "app-tags" >
< span class = "tag" > android tv< / span >
< span class = "tag root" > root< / span >
< span class = "tag" > system< / span >
< / div >
< / div >
< / div >
2025-12-08 20:45:43 +00:00
< div class = "app-card" >
< div class = "app-icon" > 🌙< / div >
< div class = "app-info" >
< h3 > nightd< / h3 >
2025-12-15 17:30:45 +00:00
< p > screen dimmer for android tv. reduces screen brightness with an overlay for comfortable viewing in dark rooms.< / p >
< div class = "app-tags" >
< span class = "tag" > android tv< / span >
< span class = "tag" > accessibility< / span >
< / div >
2025-12-08 20:45:43 +00:00
< / div >
< / div >
2025-12-15 17:30:45 +00:00
< / section >
2025-12-08 20:45:43 +00:00
< div class = "instructions" >
2025-12-15 17:30:45 +00:00
< h3 > // how to add this repo< / h3 >
2025-12-08 20:45:43 +00:00
< ol >
2025-12-15 17:30:45 +00:00
< li > install < code > f-droid< / code > or < code > neo store< / code > on your device< / li >
< li > go to < strong > settings< / strong > → < strong > repositories< / strong > < / li >
< li > tap < strong > add repository< / strong > < / li >
< li > scan the qr code above or paste the url< / li >
2025-12-08 20:45:43 +00:00
< li > refresh and install apps< / li >
< / ol >
< / div >
2025-12-15 17:30:45 +00:00
< details class = "fingerprint" >
< summary > repo fingerprint< / summary >
< pre > B8 BE 68 CF B8 4C 2C 84 F7 55 B0 92 BF 87 BE 57 7A B7 E4 F8 54 A4 66 12 EE 92 8B A0 E7 E5 66 1F< / pre >
< / details >
< footer >
< a href = "https://github.com/sudoxnym" > github.com/sudoxnym< / a >
< / footer >
2025-12-08 20:45:43 +00:00
< / div >
< / body >
< / html >