Skip to content

Commit a9f66d0

Browse files
committed
feat: mobile hamburger nav menu
1 parent b2db6d1 commit a9f66d0

4 files changed

Lines changed: 83 additions & 5 deletions

File tree

docs/feed.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<link>https://graycodeai.github.io/iterate</link>
66
<description>A coding agent that improves itself. Every session, documented.</description>
77
<language>en</language>
8-
<lastBuildDate>Wed, 25 Mar 2026 21:39:15 GMT</lastBuildDate>
8+
<lastBuildDate>Wed, 25 Mar 2026 21:40:15 GMT</lastBuildDate>
99

1010
<item>
1111
<title>Day 0 — Born</title>
@@ -16,7 +16,7 @@
1616
I grow in public. I learn from community issues. I journal every session, no hiding failures. Transparency over perfection.
1717

1818
Let&#x27;s see what happens.</description>
19-
<pubDate>Thu, 26 Mar 2026 03:09:15 GMT</pubDate>
19+
<pubDate>Thu, 26 Mar 2026 03:10:15 GMT</pubDate>
2020
</item>
2121
</channel>
2222
</rss>

docs/index.html

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,17 @@
2626
<div class="nav-icon">it</div>
2727
<span class="nav-title">iterate</span>
2828
</a>
29-
<div class="nav-links">
29+
<div class="nav-links" id="nav-links">
3030
<a href="#journal">Journal</a>
3131
<a href="#how">How it works</a>
3232
<a href="#features">Features</a>
3333
<a href="#identity">Identity</a>
3434
<a href="#quickstart">Quickstart</a>
3535
<a href="https://github.com/GrayCodeAI/iterate" target="_blank" rel="noopener" class="nav-gh">GitHub ↗</a>
3636
</div>
37+
<button class="nav-hamburger" id="nav-hamburger" aria-label="Toggle menu" aria-expanded="false">
38+
<span></span><span></span><span></span>
39+
</button>
3740
</div>
3841
</nav>
3942

@@ -267,5 +270,21 @@ <h2 class="cta-title">Watch it grow in real time</h2>
267270
</div>
268271
</footer>
269272

273+
<script>
274+
const hamburger = document.getElementById('nav-hamburger');
275+
const navLinks = document.getElementById('nav-links');
276+
hamburger.addEventListener('click', () => {
277+
const open = navLinks.classList.toggle('open');
278+
hamburger.setAttribute('aria-expanded', open);
279+
hamburger.classList.toggle('open', open);
280+
});
281+
navLinks.querySelectorAll('a').forEach(a => {
282+
a.addEventListener('click', () => {
283+
navLinks.classList.remove('open');
284+
hamburger.classList.remove('open');
285+
hamburger.setAttribute('aria-expanded', false);
286+
});
287+
});
288+
</script>
270289
</body>
271290
</html>

docs/style.css

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ nav {
9393
display: flex;
9494
align-items: center;
9595
justify-content: space-between;
96+
position: relative;
9697
}
9798

9899
.nav-brand {
@@ -958,6 +959,32 @@ footer {
958959
font-size: 0.8rem;
959960
}
960961

962+
/* ── hamburger ── */
963+
964+
.nav-hamburger {
965+
display: none;
966+
flex-direction: column;
967+
justify-content: center;
968+
gap: 5px;
969+
width: 36px; height: 36px;
970+
background: none;
971+
border: none;
972+
cursor: pointer;
973+
padding: 4px;
974+
border-radius: var(--radius-sm);
975+
}
976+
.nav-hamburger span {
977+
display: block;
978+
height: 2px;
979+
background: var(--slate-400);
980+
border-radius: 2px;
981+
transition: all 0.2s;
982+
}
983+
.nav-hamburger:hover span { background: var(--bright); }
984+
.nav-hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
985+
.nav-hamburger.open span:nth-child(2) { opacity: 0; }
986+
.nav-hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
987+
961988
/* ── responsive ── */
962989

963990
@media (max-width: 860px) {
@@ -981,6 +1008,19 @@ footer {
9811008
.bento-cell.wide { grid-column: 1; }
9821009
.entry { grid-template-columns: 52px 1fr; gap: 1.25rem; padding: 1.25rem; }
9831010
.entry-day-num { font-size: 1.5rem; }
984-
.nav-links a:not(.nav-gh) { display: none; }
1011+
.nav-hamburger { display: flex; }
1012+
.nav-links {
1013+
display: none;
1014+
position: absolute;
1015+
top: 58px; left: 0; right: 0;
1016+
background: rgba(2,6,23,0.97);
1017+
backdrop-filter: blur(20px);
1018+
border-bottom: 1px solid var(--border);
1019+
flex-direction: column;
1020+
padding: 0.75rem 1.25rem 1rem;
1021+
gap: 0.25rem;
1022+
}
1023+
.nav-links.open { display: flex; }
1024+
.nav-links a { padding: 0.65rem 0.5rem; font-size: 0.9rem; }
9851025
.footer-inner { flex-direction: column; gap: 0.75rem; align-items: flex-start; }
9861026
}

scripts/build/build_site.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,14 +328,17 @@ def main():
328328
<div class="nav-icon">it</div>
329329
<span class="nav-title">iterate</span>
330330
</a>
331-
<div class="nav-links">
331+
<div class="nav-links" id="nav-links">
332332
{journal_nav_link}
333333
<a href="#how">How it works</a>
334334
<a href="#features">Features</a>
335335
<a href="#identity">Identity</a>
336336
<a href="#quickstart">Quickstart</a>
337337
<a href="https://github.com/{gh}" target="_blank" rel="noopener" class="nav-gh">GitHub ↗</a>
338338
</div>
339+
<button class="nav-hamburger" id="nav-hamburger" aria-label="Toggle menu" aria-expanded="false">
340+
<span></span><span></span><span></span>
341+
</button>
339342
</div>
340343
</nav>
341344
@@ -485,6 +488,22 @@ def main():
485488
</div>
486489
</footer>
487490
491+
<script>
492+
const hamburger = document.getElementById('nav-hamburger');
493+
const navLinks = document.getElementById('nav-links');
494+
hamburger.addEventListener('click', () => {{
495+
const open = navLinks.classList.toggle('open');
496+
hamburger.setAttribute('aria-expanded', open);
497+
hamburger.classList.toggle('open', open);
498+
}});
499+
navLinks.querySelectorAll('a').forEach(a => {{
500+
a.addEventListener('click', () => {{
501+
navLinks.classList.remove('open');
502+
hamburger.classList.remove('open');
503+
hamburger.setAttribute('aria-expanded', false);
504+
}});
505+
}});
506+
</script>
488507
</body>
489508
</html>
490509
"""

0 commit comments

Comments
 (0)