PageSourceSearch

https://swiftrockies.com/recap-2026

html swiftrockies.com collected 2026-09-25 03:09:18 UTC 23,330 bytes, 510 lines download raw bytes

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.0">
6    <title>Swift Rockies 2026 - Conference Recap</title>
7    <meta name="description" content="Full recap of Swift Rockies 2026. Speakers, talks, and workshops from July 22-23, 2026 at the Wilder Institute Calgary Zoo.">
8    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
9    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
10    <link rel="shortcut icon" href="/favicon.ico" />
11    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
12    <link rel="manifest" href="/site.webmanifest" />
13    <link rel="preconnect" href="https://fonts.googleapis.com">
14    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
15    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
16    <link rel="stylesheet" href="style.css">
17    <style>
18        .recap-page {
19            padding-top: 90px;
20            padding-bottom: 5rem;
21        }
22
23        .recap-header {
24            text-align: center;
25            margin-bottom: 3rem;
26            padding-top: 3rem;
27        }
28
29        .recap-header-eyebrow {
30            font-size: var(--text-sm);
31            font-weight: 600;
32            letter-spacing: 0.08em;
33            text-transform: uppercase;
34            color: var(--primary);
35            margin-bottom: 0.75rem;
36        }
37
38        .recap-header h1 {
39            font-size: clamp(var(--text-3xl), 5vw, var(--text-5xl));
40            margin-bottom: 1rem;
41        }
42
43        .recap-header-meta {
44            font-size: var(--text-base);
45            color: var(--text-secondary);
46        }
47
48        .recap-group-photo {
49            width: 100%;
50            height: auto;
51            display: block;
52            border-radius: 16px;
53            box-shadow: 0 4px 8px rgba(0,0,0,0.04), 0 16px 40px rgba(0,0,0,0.10);
54            margin-bottom: 4rem;
55        }
56
57        .recap-content {
58            max-width: 860px;
59            margin: 0 auto;
60            padding: 0 1.5rem;
61        }
62
63        .recap-note {
64            background: var(--bg-secondary);
65            border-left: 4px solid var(--primary);
66            border-radius: 8px;
67            padding: 1.25rem 1.5rem;
68            margin-bottom: 3rem;
69            font-size: var(--text-sm);
70            color: var(--text-secondary);
71            line-height: 1.6;
72        }
73
74        .recap-day {
75            margin-bottom: 3.5rem;
76        }
77
78        .recap-day-header {
79            margin-bottom: 1.5rem;
80            padding-bottom: 0.75rem;
81            border-bottom: 2px solid var(--primary);
82        }
83
84        .recap-day-header h2 {
85            font-size: var(--text-2xl);
86            color: var(--text-primary);
87            margin-bottom: 0.25rem;
88        }
89
90        .recap-day-header p {
91            font-size: var(--text-sm);
92            color: var(--text-secondary);
93        }
94
95        .recap-talk-list {
96            list-style: none;
97            padding: 0;
98            margin: 0;
99        }
100
101        .recap-talk {
102            display: flex;
103            gap: 1.5rem;
104            padding: 1rem 0;
105            border-bottom: 1px solid var(--border-light, #f0f0f0);
106            align-items: baseline;
107        }
108
109        .recap-talk:last-child {
110            border-bottom: none;
111        }
112
113        .recap-talk-time {
114            font-size: var(--text-sm);
115            color: var(--text-secondary);
116            min-width: 72px;
117            flex-shrink: 0;
118            padding-top: 2px;
119        }
120
121        .recap-talk-body {
122            flex: 1;
123        }
124
125        .recap-talk-title {
126            font-size: var(--text-base);
127            font-weight: 600;
128            color: var(--text-primary);
129            line-height: 1.4;
130        }
131
132        .recap-talk-speaker {
133            font-size: var(--text-sm);
134            color: var(--text-secondary);
135            margin-top: 0.2rem;
136        }
137
138        .recap-talk-badge {
139            display: inline-block;
140            font-size: 11px;
141            font-weight: 600;
142            letter-spacing: 0.04em;
143            text-transform: uppercase;
144            background: var(--primary);
145            color: white;
146            padding: 2px 8px;
147            border-radius: 4px;
148            margin-left: 0.5rem;
149            vertical-align: middle;
150        }
151
152        .recap-talk-badge-apple {
153            background: #1E3A8A;
154        }
155
156        .recap-break {
157            font-size: var(--text-sm);
158            color: var(--text-secondary);
159            padding: 0.6rem 0;
160            border-bottom: 1px solid var(--border-light, #f0f0f0);
161            display: flex;
162            gap: 1.5rem;
163        }
164
165        .recap-break-time {
166            min-width: 72px;
167            flex-shrink: 0;
168        }
169
170        @media (max-width: 600px) {
171            .recap-talk {
172                flex-direction: column;
173                gap: 0.25rem;
174            }
175
176            .recap-break {
177                flex-direction: column;
178                gap: 0.25rem;
179            }
180        }
181    </style>
182</head>
183<body>
184    <nav class="navbar" id="navbar">
185        <div class="nav-container">
186            <a class='nav-logo' href='/'>
187                <img src="logo.svg" alt="Swift Rockies Logo" class="logo-img">
188            </a>
189            <button class="nav-toggle" id="navToggle" aria-label="Toggle navigation menu">
190                <span></span>
191                <span></span>
192                <span></span>
193            </button>
194            <ul class="nav-menu" id="navMenu">
195                <li><a class='nav-link' href='/'>Home</a></li>
196                <li><a class='nav-link' href='/#venue'>Venue</a></li>
197                <li><a class='nav-link' href='/#faq'>FAQ</a></li>
198                <li><a class='nav-link' href='/#contact'>Contact</a></li>
199            </ul>
200        </div>
201    </nav>
202
203    <div class="recap-page">
204        <div class="container">
205            <div class="recap-header">
206                <p class="recap-header-eyebrow">It happened.</p>
207                <h1>Swift Rockies 2026</h1>
208                <p class="recap-header-meta">July 22-23, 2026 &middot; Wilder Institute Calgary Zoo &middot; Calgary, Alberta</p>
209            </div>
210
211            <img src="assets/group_shot_2026.webp" alt="Swift Rockies 2026 group photo at the Calgary Zoo" class="recap-group-photo">
212
213            <div class="recap-content">
214                <p class="recap-note">This page is provided for attendees who need documentation for conference reports, expense submissions, or continuing education records. It includes the full schedule, all speakers, and all talk titles from July 22-23, 2026, plus the optional pre- and post-conference workshops.</p>
215
216                <!-- Pre-Conference Workshops -->
217                <div class="recap-day">
218                    <div class="recap-day-header">
219                        <h2>Pre-Conference Workshops</h2>
220                        <p>Tuesday, July 21, 2026 &middot; Optional, sold separately</p>
221                    </div>
222                    <ul class="recap-talk-list">
223                        <li class="recap-talk">
224                            <span class="recap-talk-time">9 AM - 4 PM</span>
225                            <div class="recap-talk-body">
226                                <div class="recap-talk-title">What's New and Interesting in App Intents</div>
227                                <div class="recap-talk-speaker">Daniel Steinberg</div>
228                            </div>
229                        </li>
230                        <li class="recap-talk">
231                            <span class="recap-talk-time">9 AM - 5 PM</span>
232                            <div class="recap-talk-body">
233                                <div class="recap-talk-title">Swift Concurrency Lab</div>
234                                <div class="recap-talk-speaker">Matt Massicotte</div>
235                            </div>
236                        </li>
237                        <li class="recap-talk">
238                            <span class="recap-talk-time">9 AM - 5 PM</span>
239                            <div class="recap-talk-body">
240                                <div class="recap-talk-title">From Passion to Product: The App Strategy Workshop</div>
241                                <div class="recap-talk-speaker">Abbey Jackson</div>
242                            </div>
243                        </li>
244                    </ul>
245                </div>
246
247                <!-- Day 1 -->
248                <div class="recap-day">
249                    <div class="recap-day-header">
250                        <h2>Day 1</h2>
251                        <p>Wednesday, July 22, 2026</p>
252                    </div>
253                    <ul class="recap-talk-list">
254                        <li class="recap-break">
255                            <span class="recap-break-time">8:00 AM</span>
256                            <span>Doors Open &amp; Breakfast</span>
257                        </li>
258                        <li class="recap-talk">
259                            <span class="recap-talk-time">9:00 AM</span>
260                            <div class="recap-talk-body">
261                                <div class="recap-talk-title">Custom Styleable Containers in SwiftUI</div>
262                                <div class="recap-talk-speaker">Dave DeLong</div>
263                            </div>
264                        </li>
265                        <li class="recap-talk">
266                            <span class="recap-talk-time">9:30 AM</span>
267                            <div class="recap-talk-body">
268                                <div class="recap-talk-title">Faster Builds With Xcode Compilation Cache</div>
269                                <div class="recap-talk-speaker">Francis Chary</div>
270                            </div>
271                        </li>
272                        <li class="recap-talk">
273                            <span class="recap-talk-time">10:00 AM</span>
274                            <div class="recap-talk-body">
275                                <div class="recap-talk-title">Practical Guide to Swift Macros</div>
276                                <div class="recap-talk-speaker">Mahmood Tahir</div>
277                            </div>
278                        </li>
279                        <li class="recap-break">
280                            <span class="recap-break-time">10:30 AM</span>
281                            <span>Coffee Break</span>
282                        </li>
283                        <li class="recap-talk">
284                            <span class="recap-talk-time">11:00 AM</span>
285                            <div class="recap-talk-body">
286                                <div class="recap-talk-title">Swift beyond Apple: Making Software for the Physical World</div>
287                                <div class="recap-talk-speaker">Joannis Orlandos</div>
288                            </div>
289                        </li>
290                        <li class="recap-talk">
291                            <span class="recap-talk-time">11:30 AM</span>
292                            <div class="recap-talk-body">
293                                <div class="recap-talk-title">Accessibility for the App You're About to Ship</div>
294                                <div class="recap-talk-speaker">Adrian Eves</div>
295                            </div>
296                        </li>
297                        <li class="recap-talk">
298                            <span class="recap-talk-time">12:00 PM</span>
299                            <div class="recap-talk-body">
300                                <div class="recap-talk-title">Engineering Culture: A Shared Build</div>
301                                <div class="recap-talk-speaker">Ines Rosales</div>
302                            </div>
303                        </li>
304                        <li class="recap-break">
305                            <span class="recap-break-time">12:30 PM</span>
306                            <span>Lunch</span>
307                        </li>
308                        <li class="recap-talk">
309                            <span class="recap-talk-time">1:30 PM</span>
310                            <div class="recap-talk-body">
311                                <div class="recap-talk-title">More AI, More Human: Why the new tools demand more care, not less</div>
312                                <div class="recap-talk-speaker">Krishna Satya</div>
313                            </div>
314                        </li>
315                        <li class="recap-talk">
316                            <span class="recap-talk-time">2:00 PM</span>
317                            <div class="recap-talk-body">
318                                <div class="recap-talk-title">Swift Concurrency's Pit of Success</div>
319                                <div class="recap-talk-speaker">Matt Massicotte</div>
320                            </div>
321                        </li>
322                        <li class="recap-talk">
323                            <span class="recap-talk-time">2:30 PM</span>
324                            <div class="recap-talk-body">
325                                <div class="recap-talk-title">The Myth of the Self-Taught iOS Developer</div>
326                                <div class="recap-talk-speaker">Stewart Lynch</div>
327                            </div>
328                        </li>
329                        <li class="recap-break">
330                            <span class="recap-break-time">3:00 PM</span>
331                            <span>Coffee Break</span>
332                        </li>
333                        <li class="recap-talk">
334                            <span class="recap-talk-time">3:30 PM</span>
335                            <div class="recap-talk-body">
336                                <div class="recap-talk-title">CloudKit Public Database as a Backend</div>
337                                <div class="recap-talk-speaker">Danijela Vrzan</div>
338                            </div>
339                        </li>
340                        <li class="recap-talk">
341                            <span class="recap-talk-time">4:00 PM</span>
342                            <div class="recap-talk-body">
343                                <div class="recap-talk-title">Instruments: Profiling Your App in Practice</div>
344                                <div class="recap-talk-speaker">James Dempsey</div>
345                            </div>
346                        </li>
347                        <li class="recap-talk">
348                            <span class="recap-talk-time">4:30 PM</span>
349                            <div class="recap-talk-body">
350                                <div class="recap-talk-title">Breathe</div>
351                                <div class="recap-talk-speaker">Daniel Steinberg</div>
352                            </div>
353                        </li>
354                    </ul>
355                </div>
356
357                <!-- Day 2 -->
358                <div class="recap-day">
359                    <div class="recap-day-header">
360                        <h2>Day 2</h2>
361                        <p>Thursday, July 23, 2026</p>
362                    </div>
363                    <ul class="recap-talk-list">
364                        <li class="recap-break">
365                            <span class="recap-break-time">8:00 AM</span>
366                            <span>Doors Open &amp; Breakfast</span>
367                        </li>
368                        <li class="recap-talk">
369                            <span class="recap-talk-time">9:00 AM</span>
370                            <div class="recap-talk-body">
371                                <div class="recap-talk-title">My Slow Return to a Swift Career</div>
372                                <div class="recap-talk-speaker">Ash Furrow</div>
373                            </div>
374                        </li>
375                        <li class="recap-talk">
376                            <span class="recap-talk-time">9:30 AM</span>
377                            <div class="recap-talk-body">
378                                <div class="recap-talk-title">How I Bought My Way Into Tech: Rethinking Who Gets In</div>
379                                <div class="recap-talk-speaker">Abbey Jackson</div>
380                            </div>
381                        </li>
382                        <li class="recap-talk">
383                            <span class="recap-talk-time">10:00 AM</span>
384                            <div class="recap-talk-body">
385                                <div class="recap-talk-title">Keynote Karaoke</div>
386                                <div class="recap-talk-speaker">Philippe Casgrain</div>
387                            </div>
388                        </li>
389                        <li class="recap-break">
390                            <span class="recap-break-time">10:30 AM</span>
391                            <span>Coffee Break</span>
392                        </li>
393                        <li class="recap-talk">
394                            <span class="recap-talk-time">11:00 AM</span>
395                            <div class="recap-talk-body">
396                                <div class="recap-talk-title">Scaling Swift Development</div>
397                                <div class="recap-talk-speaker">Marek Fo&#345;t</div>
398                            </div>
399                        </li>
400                        <li class="recap-talk">
401                            <span class="recap-talk-time">11:30 AM</span>
402                            <div class="recap-talk-body">
403                                <div class="recap-talk-title">Goodbye Simulator, Hello Device Hub</div>
404                                <div class="recap-talk-speaker">Mikaela Caron</div>
405                            </div>
406                        </li>
407                        <li class="recap-talk">
408                            <span class="recap-talk-time">12:00 PM</span>
409                            <div class="recap-talk-body">
410                                <div class="recap-talk-title">Arts and Crafts</div>
411                                <div class="recap-talk-speaker">Ellen Shapiro</div>
412                            </div>
413                        </li>
414                        <li class="recap-break">
415                            <span class="recap-break-time">12:30 PM</span>
416                            <span>Lunch</span>
417                        </li>
418                        <li class="recap-talk">
419                            <span class="recap-talk-time">1:30 - 3:00 PM</span>
420                            <div class="recap-talk-body">
421                                <div class="recap-talk-title">Discover what's next: The biggest updates from WWDC26 <span class="recap-talk-badge recap-talk-badge-apple">Apple Session</span></div>
422                                <div class="recap-talk-speaker">Apple</div>
423                            </div>
424                        </li>
425                        <li class="recap-break">
426                            <span class="recap-break-time">3:00 PM</span>
427                            <span>Coffee Break</span>
428                        </li>
429                        <li class="recap-talk">
430                            <span class="recap-talk-time">3:30 - 5:00 PM</span>
431                            <div class="recap-talk-body">
432                                <div class="recap-talk-title">Live Podcast Recording: Launched <span class="recap-talk-badge">Live Recording</span></div>
433                                <div class="recap-talk-speaker">Charlie Chapman with Abbey Jackson, Krishna Satya &amp; Ash Furrow</div>
434                            </div>
435                        </li>
436                        <li class="recap-break">
437                            <span class="recap-break-time">5:00 PM</span>
438                            <span>Break</span>
439                        </li>
440                        <li class="recap-talk">
441                            <span class="recap-talk-time">5:30 - 6:00 PM</span>
442                            <div class="recap-talk-body">
443                                <div class="recap-talk-title">Live Musical Performance <span class="recap-talk-badge">Performance</span></div>
444                                <div class="recap-talk-speaker">James Dempsey and the Breakpoints (Danijela Vrzan, Rob Napier, Ellen Shapiro, Adrian Eves, Daniel Steinberg)</div>
445                            </div>
446                        </li>
447                    </ul>
448                </div>
449
450                <!-- Post-Conference Workshops -->
451                <div class="recap-day">
452                    <div class="recap-day-header">
453                        <h2>Post-Conference Workshops</h2>
454                        <p>Friday, July 24, 2026 &middot; Optional, sold separately</p>
455                    </div>
456                    <ul class="recap-talk-list">
457                        <li class="recap-talk">
458                            <span class="recap-talk-time">9 AM - 5 PM</span>
459                            <div class="recap-talk-body">
460                                <div class="recap-talk-title">Building Local AI Systems with Swift and WendyOS</div>
461                                <div class="recap-talk-speaker">Joannis Orlandos</div>
462                            </div>
463                        </li>
464                        <li class="recap-talk">
465                            <span class="recap-talk-time">9 AM - 5 PM</span>
466                            <div class="recap-talk-body">
467                                <div class="recap-talk-title">Scaling Swift Development</div>
468                                <div class="recap-talk-speaker">Marek Fo&#345;t</div>
469                            </div>
470                        </li>
471                    </ul>
472                </div>
473            </div>
474        </div>
475    </div>
476
477    <footer class="footer">
478        <div class="container">
479            <div class="footer-content">
480                <div class="footer-brand">
481                    <img src="logo.svg" alt="Swift Rockies Logo" class="footer-logo">
482                    <p>Swift Rockies 2026</p>
483                    <p class="footer-tagline">A retreat-style iOS developer conference</p>
484                </div>
485                <div class="footer-links">
486                    <h4>Quick Links</h4>
487                    <ul>
488                        <li><a href='/'>Home</a></li>
489                        <li><a href='/#venue'>Venue</a></li>
490                        <li><a href='/#faq'>FAQ</a></li>
491                        <li><a href='/conduct'>Code of Conduct</a></li>
492                        <li><a href='/privacy'>Privacy Policy</a></li>
493                        <li><a href='/terms'>Terms of Service</a></li>
494                    </ul>
495                </div>
496                <div class="footer-contact">
497                    <h4>Contact</h4>
498                    <p><a href="mailto:[email protected]">[email protected]</a></p>
499                    <p>Calgary, Alberta, Canada</p>
500                </div>
501            </div>
502            <div class="footer-bottom">
503                <p>&copy; 2026 Swift Rockies. All rights reserved.</p>
504            </div>
505        </div>
506    </footer>
507
508    
508<script src="script.js"></script>
508
509</body>
510</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.