Not Fighting the World Filed under: #0b0b10

!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); }
Journal · Admin · Items 3 / 10

Independent iOS developer shipping SwiftUI products in public.

theappguy.app

Building and shipping real SwiftUI products in public. Practical notes on architecture, performance, and long‑term iteration.

Topics SwiftUI iOS development Indie apps Performance Architecture Shipping software
Gary Makinson
Independent iOS developer shipping SwiftUI products in public.
GM
Focused on performance, architecture, and long‑term product craft. I care about apps that feel fast, respectful, and thoughtfully designed over years, not weeks.
Search items… A → Z
  • 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.”
#0b0b10 · 0b0b10 Meta
#0b0b10
#f5f5f7
#e6e6e6
#0a66c2
#e1306c
#000000
#0b0b10 Updated · 2026‑01‑29

Screenshot gallery

No file chosen · Optional title
Allowed: PNG, JPG, JPEG, GIF, WEBP, HEIC, HEIF, MP4, MOV, WEBM
Files
  • 173777EA-165B-4260-8CC7-158FECDB5C36-2.png
  • 173777EA-165B-4260-8CC7-158FECDB5C36-2.png
  • errro-3.png
  • errro-3.png

Selected projects

Shipping
Performance and monitoring

Improving startup time, reducing memory usage, and increasing crash‑free sessions.

StoreKit
Storefront and monetization

Modernizing purchase flows and subscription management with clear entitlements and reliable restore behavior.

SwiftUI
Design systems

Reusable components, motion, and delightful interactions that feel at home on Apple platforms.

What I focus on

SwiftUI · Modern UI, accessibility, and smooth interactions across Apple platforms.
StoreKit · Clear purchase journeys, entitlement logic, and robust testing.
Built by Gary Makinson · theappguy.app Independent iOS products · SwiftUI · Shipping in public
Back to Journal Edit