index.html

  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">
  6    <title>Git Repositories</title>
  7    <style>
  8         
  9        :root {
 10            --line-height: 1.3rem;
 11            --grid-height: 0.65rem;
 12            --bg-color: #0d1117;
 13            --text-color: #e6edf3;
 14            --border: #6a708e;
 15            --link-color: #79C0FF;
 16            --hover: #ff79c6;
 17            --visited: #79C0FF;
 18            --white: #f2f2f2;
 19            --grey: #414558;
 20            --grey-light: #6a708e;
 21            --code: #414558;
 22            --pre: #252525;
 23        }
 24        html {
 25            background-color: var(--bg-color);
 26            color: var(--text-color);
 27            font-size: 16px;
 28            line-height: var(--line-height);
 29            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
 30            -webkit-text-size-adjust: 100%;
 31        }
 32        body {
 33            margin: 0 auto;
 34            max-width: 900px;
 35            padding: 0 var(--grid-height);
 36        }
 37        *, ::before, ::after { box-sizing: border-box; }
 38
 39        .site-header {
 40            margin: 1rem auto;
 41            display: flex;
 42            flex-direction: row;
 43            align-items: center;
 44            gap: 1rem;
 45        }
 46
 47        .site-header__logo {
 48            width: 4rem;
 49            height: 4rem;
 50            flex-shrink: 0;
 51        }
 52
 53        .site-header__content {
 54            display: flex;
 55            flex-direction: column;
 56            justify-content: center;
 57        }
 58
 59        .site-header__title {
 60            font-size: 1rem;
 61            font-weight: bold;
 62            line-height: var(--line-height);
 63            text-transform: uppercase;
 64            margin: 0;
 65        }
 66
 67        .site-header__desc {
 68            font-size: 0.9rem;
 69            color: var(--grey-light);
 70            margin: 0;
 71            line-height: var(--line-height);
 72        }
 73
 74        .repo-grid {
 75            display: flex;
 76            flex-direction: column;
 77            gap: 0.5rem;
 78            margin: 1rem 0;
 79        }
 80
 81        .repo-card {
 82            display: block;
 83            border: 1px solid var(--border);
 84            border-radius: 4px;
 85            padding: 0.75rem 1rem;
 86            background-color: var(--pre);
 87            transition: border-color 0.2s ease;
 88            text-decoration: none;
 89            color: inherit;
 90            width: 100%;
 91        }
 92
 93        .repo-card:hover {
 94            border-color: var(--link-color);
 95        }
 96
 97        .repo-card__name {
 98            font-size: 1rem;
 99            font-weight: bold;
100            margin: 0 0 0.25rem 0;
101            text-transform: uppercase;
102            color: var(--link-color);
103        }
104
105        .repo-card__desc {
106            font-size: 0.9rem;
107            color: var(--grey-light);
108            margin: 0 0 var(--grid-height) 0;
109            line-height: var(--line-height);
110        }
111
112        .repo-card__desc:empty {
113            margin: 0;
114            display: none;
115        }
116
117        .repo-card__updated {
118            font-size: 0.8rem;
119            color: var(--grey-light);
120            font-family: monospace;
121        }
122
123        footer {
124            text-align: center;
125            margin: calc(var(--line-height) * 3) 0;
126            color: var(--grey-light);
127            font-size: 0.8rem;
128        }
129
130        @media only screen and (max-width: 40em) {
131            body {
132                padding: 0 var(--grid-height);
133            }
134            .repo-card__updated {
135                display: none;
136            }
137        }
138    </style>
139</head>
140<body>
141    <header class="site-header">
142        <img src="logo.png" class="site-header__logo" alt="Logo" />
143        <div class="site-header__content">
144            <h1 class="site-header__title">Forged In Fire</h1>
145            <p class="site-header__desc">Artisanally handcrafted code with only a little help from AI</p>
146        </div>
147    </header>
148
149    <main>
150        <div class="repo-grid">
151            
152            <a href="pgit" class="repo-card">
153                <div class="repo-card__name">pgit</div>
154                <p class="repo-card__desc"></p>
155                <time class="repo-card__updated" data-time="2026-04-15T13:01:28Z">
156                    Apr 15, 2026
157                </time>
158            </a>
159            
160        </div>
161    </main>
162
163    <footer>
164        <p>Generated with pgit-index</p>
165    </footer>
166
167    <script>
168    (function() {
169        var MINUTE_MS = 60000;
170        var HOUR_MS = 3600000;
171        var DAY_MS = 86400000;
172        var MONTH_MS = 30 * DAY_MS;
173
174        function updateTimes() {
175            var elements = document.querySelectorAll('[data-time]');
176            var now = new Date();
177            var minDiffMs = Infinity;
178
179            elements.forEach(function(el) {
180                var date = new Date(el.getAttribute('data-time'));
181                var diffMs = now - date;
182                if (diffMs < minDiffMs && diffMs >= 0) {
183                    minDiffMs = diffMs;
184                }
185                var diffMins = Math.floor(diffMs / MINUTE_MS);
186                var diffHours = Math.floor(diffMs / HOUR_MS);
187                var diffDays = Math.floor(diffMs / DAY_MS);
188                var text;
189                if (diffMins < 1) {
190                    text = 'just now';
191                } else if (diffMins < 60) {
192                    text = diffMins + ' minute' + (diffMins === 1 ? '' : 's') + ' ago';
193                } else if (diffHours < 24) {
194                    text = diffHours + ' hour' + (diffHours === 1 ? '' : 's') + ' ago';
195                } else if (diffDays < 30) {
196                    text = diffDays + ' day' + (diffDays === 1 ? '' : 's') + ' ago';
197                } else {
198                    return;
199                }
200                el.textContent = text;
201            });
202            return minDiffMs;
203        }
204
205        function scheduleUpdate() {
206            var minDiffMs = updateTimes();
207            var intervalMs;
208            if (minDiffMs < HOUR_MS) {
209                intervalMs = MINUTE_MS;
210            } else if (minDiffMs < DAY_MS) {
211                intervalMs = HOUR_MS;
212            } else if (minDiffMs < MONTH_MS) {
213                intervalMs = DAY_MS;
214            } else {
215                return;
216            }
217            setTimeout(scheduleUpdate, intervalMs);
218        }
219        scheduleUpdate();
220    })();
221    </script>
222</body>
223</html>