!DOCTYPE html>
theappguy.app · Gary Makinson :root { --bg: #0b0b10; --bg-alt: #111119; --fg: #f5f5f7; --muted: #e6e6e6; --accent-blue: #0a66c2; --accent-pink: #e1306c; --border-subtle: rgba(230, 230, 230, 0.08); --card-radius: 14px; --shadow-soft: 0 18px 45px rgba(0, 0, 0, 0.45); --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", sans-serif; --code-bg: #111118; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; background: radial-gradient(circle at top left, #151525 0, #050509 55%, #000 100%); color: var(--fg); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; padding: 40px 20px 56px; display: flex; justify-content: center; } .page { width: 100%; max-width: 1060px; display: grid; grid-template-columns: minmax(0, 2.1fr) minmax(260px, 1.2fr); gap: 32px; } @media (max-width: 900px) { body { padding: 24px 16px 40px; } .page { grid-template-columns: minmax(0, 1fr); } } /* Left column */ .stack { display: flex; flex-direction: column; gap: 20px; } .pill-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); } .pill { padding: 4px 10px; border-radius: 999px; border: 1px solid var(--border-subtle); background: linear-gradient(135deg, #131320, #06060c); display: inline-flex; align-items: center; gap: 6px; } .pill-dot { width: 6px; height: 6px; border-radius: 999px; background: radial-gradient(circle at 30% 30%, #3cf, #0a66c2); box-shadow: 0 0 10px rgba(10, 102, 194, 0.7); } header.hero { padding: 20px 20px 22px; border-radius: var(--card-radius); background: radial-gradient(circle at top left, #18182a 0, #07070f 55%, #050509 100%); border: 1px solid var(--border-subtle); box-shadow: var(--shadow-soft); } .hero-top { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; margin-bottom: 10px; } .site-title { font-size: 14px; text-transform: uppercase; letter-spacing: 0.16em; color: var(--muted); } .site-badge { font-size: 12px; padding: 4px 10px; border-radius: 999px; border: 1px solid rgba(241, 241, 243, 0.16); color: var(--muted); display: inline-flex; align-items: center; gap: 6px; } .site-badge-dot { width: 7px; height: 7px; border-radius: 999px; background: radial-gradient(circle at 30% 30%, #6af, #0a66c2); } h1 { margin: 0 0 6px; font-size: clamp(26px, 3vw, 30px); letter-spacing: -0.03em; } .hero-subtitle { margin: 0 0 10px; color: var(--muted); font-size: 14px; line-height: 1.6; max-width: 42rem; } .hero-meta { display: flex; flex-wrap: wrap; gap: 6px 10px; font-size: 12px; color: var(--muted); } .hero-meta-label { opacity: 0.7; text-transform: uppercase; letter-spacing: 0.12em; font-size: 11px; } .topic-tag { padding: 3px 8px; border-radius: 999px; background: rgba(245, 245, 247, 0.06); border: 1px solid rgba(245, 245, 247, 0.08); font-size: 11px; } /* Bio card */ .card { border-radius: var(--card-radius); background: linear-gradient(145deg, #11111b, #050508); border: 1px solid var(--border-subtle); padding: 16px 18px; box-shadow: 0 12px 35px rgba(0, 0, 0, 0.55); } .card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; gap: 8px; } .identity { display: flex; flex-direction: column; gap: 2px; } .identity-name { font-weight: 600; font-size: 14px; } .identity-role { font-size: 12px; color: var(--muted); } .avatar-pill { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 999px; background: radial-gradient(circle at 30% 25%, #3cf, #0a66c2 40%, #111118 100%); box-shadow: 0 0 0 1px rgba(230, 230, 230, 0.2); font-size: 15px; font-weight: 600; } .card-body { font-size: 13px; color: var(--muted); line-height: 1.7; } /* Section headings */ .section-label { margin-top: 6px; margin-bottom: 6px; font-size: 11px; text-transform: uppercase; letter-spacing: 0.16em; color: var(--muted); opacity: 0.8; } h2 { margin: 0 0 10px; font-size: 15px; letter-spacing: -0.01em; } /* Posts list */ .posts-card { padding: 14px 16px; } .posts-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; } .search-pill { padding: 4px 8px; border-radius: 999px; border: 1px solid var(--border-subtle); font-size: 11px; color: var(--muted); opacity: 0.9; } .az-pill { font-size: 11px; padding: 3px 7px; border-radius: 999px; border: 1px solid rgba(245, 245, 247, 0.16); background: rgba(0, 0, 0, 0.25); } .posts-list { display: flex; flex-direction: column; gap: 10px; margin: 0; padding: 0; list-style: none; } .post-item { padding: 10px 10px 9px; border-radius: 10px; background: radial-gradient(circle at top left, #191926 0, #06060c 55%, #040408 100%); border: 1px solid rgba(245, 245, 247, 0.04); } .post-meta { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 6px; } .post-title { font-size: 13px; font-weight: 500; } .post-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--muted); opacity: 0.75; } .post-date { font-size: 11px; color: var(--muted); opacity: 0.8; } .post-snippet { font-size: 12px; color: var(--muted); line-height: 1.6; } blockquote { margin: 0; padding: 8px 10px; border-left: 2px solid rgba(225, 48, 108, 0.7); background: rgba(225, 48, 108, 0.06); border-radius: 0 10px 10px 0; font-size: 12px; color: var(--muted); } /* Right column */ .sidebar { display: flex; flex-direction: column; gap: 18px; } .palette { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; } .swatch { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--muted); } .swatch-color { width: 16px; height: 16px; border-radius: 6px; border: 1px solid rgba(0, 0, 0, 0.5); } .swatch-label { opacity: 0.85; } .meta-row { display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--muted); margin-top: 6px; } .meta-tag { padding: 3px 7px; border-radius: 999px; border: 1px solid rgba(245, 245, 247, 0.12); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; } .files-list { margin-top: 8px; font-size: 11px; color: var(--muted); } .files-list strong { font-size: 11px; text-transform: uppercase; letter-spacing: 0.13em; opacity: 0.8; } .files-list ul { list-style: none; padding-left: 0; margin: 4px 0 0; } .files-list li { padding: 2px 0; opacity: 0.9; } .projects-grid { display: flex; flex-direction: column; gap: 10px; margin-top: 6px; } .project { padding: 10px 10px 9px; border-radius: 10px; background: radial-gradient(circle at top left, #181825 0, #05050a 60%, #020205 100%); border: 1px solid rgba(245, 245, 247, 0.05); } .project-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.14em; color: var(--muted); opacity: 0.8; margin-bottom: 4px; } .project-title { font-size: 13px; font-weight: 500; margin-bottom: 3px; } .project-body { font-size: 12px; color: var(--muted); line-height: 1.6; } .focus-list { margin-top: 6px; font-size: 12px; color: var(--muted); display: flex; flex-direction: column; gap: 4px; } .focus-key { font-weight: 500; color: var(--fg); } footer.site-footer { margin-top: 4px; font-size: 11px; color: var(--muted); display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; opacity: 0.9; } code { font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 11px; background: var(--code-bg); padding: 2px 5px; border-radius: 4px; border: 1px solid rgba(230, 230, 230, 0.08); }Independent iOS developer shipping SwiftUI products in public.
Building and shipping real SwiftUI products in public. Practical notes on architecture, performance, and long‑term iteration.
-
Real strength isn’t about never struggling. It’s about staying with yourself when life gets heavy. If you’re ever feeling low, you’re not alone. My DMs are open…
-
“I’m not fighting the world. I’m fighting the part of me that wants to disappear to make things easier.”
Screenshot gallery
PNG, JPG, JPEG, GIF,
WEBP, HEIC, HEIF,
MP4, MOV, WEBM
- 173777EA-165B-4260-8CC7-158FECDB5C36-2.png
- 173777EA-165B-4260-8CC7-158FECDB5C36-2.png
- errro-3.png
- errro-3.png
Selected projects
Improving startup time, reducing memory usage, and increasing crash‑free sessions.
Modernizing purchase flows and subscription management with clear entitlements and reliable restore behavior.
Reusable components, motion, and delightful interactions that feel at home on Apple platforms.