Skip to content

Commit 5e02c9f

Browse files
saimalshaficlaude
andcommitted
Add about modal on F*eather title tap in cities screen
Tapping the F*eather heading opens a glass card modal with the app tagline, made-by credit, and a GitHub icon linking to saimalshafi's profile. Backdrop blurs the cities list; tap outside to dismiss. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f8895cd commit 5e02c9f

1 file changed

Lines changed: 82 additions & 1 deletion

File tree

Feather.jsx

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1170,6 +1170,7 @@ function Widget({ label, value, sub, tint, theme }) {
11701170
function CitiesScreen({ cities, activeIdx, citySearch, setCitySearch, citySearching, citySearchError, onSelectCity, onSearch, onDeleteCity, closing }) {
11711171
const [suggestions, setSuggestions] = useState([]);
11721172
const [suggestionsLoading, setSuggestionsLoading] = useState(false);
1173+
const [showAbout, setShowAbout] = useState(false);
11731174
const searchAreaRef = useRef(null);
11741175

11751176
// ---- Swipe-to-delete state ----
@@ -1284,7 +1285,10 @@ function CitiesScreen({ cities, activeIdx, citySearch, setCitySearch, citySearch
12841285

12851286
{/* Header */}
12861287
<div style={{ padding: "calc(env(safe-area-inset-top, 0px) + 20px) 20px 24px", display: "flex", justifyContent: "flex-start", alignItems: "flex-end" }}>
1287-
<div style={{ fontFamily: IMPACT_STACK, fontSize: "34px", letterSpacing: "-0.5px", color: "#111" }}>F*eather</div>
1288+
<div
1289+
onClick={() => setShowAbout(true)}
1290+
style={{ fontFamily: IMPACT_STACK, fontSize: "34px", letterSpacing: "-0.5px", color: "#111", cursor: "pointer" }}
1291+
>F*eather</div>
12881292
</div>
12891293

12901294
{/* City cards */}
@@ -1433,6 +1437,83 @@ function CitiesScreen({ cities, activeIdx, citySearch, setCitySearch, citySearch
14331437
</div>
14341438
</div>
14351439
</div>
1440+
1441+
{/* ---- About modal ---- */}
1442+
{showAbout && (
1443+
<div
1444+
onClick={() => setShowAbout(false)}
1445+
style={{
1446+
position: "fixed", inset: 0, zIndex: 100,
1447+
background: "rgba(0,0,0,0.28)",
1448+
backdropFilter: "blur(6px)", WebkitBackdropFilter: "blur(6px)",
1449+
display: "flex", alignItems: "center", justifyContent: "center",
1450+
padding: "24px",
1451+
animation: "featherFadeIn 200ms ease both",
1452+
}}
1453+
>
1454+
<div
1455+
onClick={e => e.stopPropagation()}
1456+
style={{
1457+
width: "100%", maxWidth: "360px",
1458+
background: "rgba(255,255,255,0.88)",
1459+
backdropFilter: "blur(40px) saturate(200%)",
1460+
WebkitBackdropFilter: "blur(40px) saturate(200%)",
1461+
border: "1px solid rgba(255,255,255,0.7)",
1462+
borderRadius: "24px",
1463+
padding: "32px 28px 28px",
1464+
boxShadow: "0 24px 64px rgba(0,0,0,0.16), 0 4px 16px rgba(0,0,0,0.08)",
1465+
display: "flex", flexDirection: "column", gap: "0",
1466+
}}
1467+
>
1468+
{/* Title */}
1469+
<div style={{ fontFamily: IMPACT_STACK, fontSize: "48px", letterSpacing: "-1px", color: "#111", lineHeight: 1, marginBottom: "14px" }}>
1470+
F*eather
1471+
</div>
1472+
1473+
{/* Subtitle */}
1474+
<div style={{ fontFamily: SFPRO_STACK, fontSize: "15px", color: "rgba(0,0,0,0.60)", lineHeight: 1.55, marginBottom: "28px" }}>
1475+
A brutally honest weather app for the days when you just need the f*cking weather.
1476+
</div>
1477+
1478+
{/* Divider */}
1479+
<div style={{ height: "1px", background: "rgba(0,0,0,0.08)", marginBottom: "20px" }} />
1480+
1481+
{/* Made by */}
1482+
<div style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
1483+
<div>
1484+
<div style={{ fontFamily: SFPRO_STACK, fontSize: "11px", fontWeight: 600, textTransform: "uppercase", letterSpacing: "0.7px", color: "rgba(0,0,0,0.38)", marginBottom: "3px" }}>
1485+
Made by
1486+
</div>
1487+
<div style={{ fontFamily: SFPRO_STACK, fontSize: "16px", fontWeight: 600, color: "#111", letterSpacing: "-0.2px" }}>
1488+
Saim Alshafi
1489+
</div>
1490+
</div>
1491+
{/* GitHub link */}
1492+
<a
1493+
href="https://github.com/saimalshafi"
1494+
target="_blank"
1495+
rel="noopener noreferrer"
1496+
onClick={e => e.stopPropagation()}
1497+
style={{
1498+
display: "flex", alignItems: "center", justifyContent: "center",
1499+
width: "44px", height: "44px", borderRadius: "12px",
1500+
background: "rgba(0,0,0,0.06)",
1501+
border: "1px solid rgba(0,0,0,0.08)",
1502+
color: "#111", textDecoration: "none",
1503+
transition: "background 150ms ease",
1504+
flexShrink: 0,
1505+
}}
1506+
onPointerEnter={e => e.currentTarget.style.background = "rgba(0,0,0,0.11)"}
1507+
onPointerLeave={e => e.currentTarget.style.background = "rgba(0,0,0,0.06)"}
1508+
>
1509+
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" aria-label="GitHub">
1510+
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/>
1511+
</svg>
1512+
</a>
1513+
</div>
1514+
</div>
1515+
</div>
1516+
)}
14361517
</div>
14371518
);
14381519
}

0 commit comments

Comments
 (0)