Skip to content

Commit 93b8169

Browse files
committed
feat: add GitHub integration, OG image, and Tuist marketing
- Add GitHub button to navigation bar with icon - Update "Found an issue?" to link to GitHub issues/PRs instead of email - Move "In the tradition of..." text to footer - Add OG image (f() icon) for social sharing - Add Tuist attribution in author credit and Tools section - Update README with current topics and languages
1 parent d6dcca9 commit 93b8169

File tree

15 files changed

+132
-25
lines changed

15 files changed

+132
-25
lines changed

README.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,17 @@ In the tradition of [fuckingblocksyntax.com](https://fuckingblocksyntax.com/) an
1515

1616
## Topics Covered
1717

18-
- **Isolation** - The core mental model for Swift concurrency
1918
- **Async/Await** - Suspension vs blocking, and why it matters
20-
- **Actors** - When to use them (and when not to)
21-
- **MainActor** - Your best friend for UI code
22-
- **Sendable** - The thread-safety certificate
23-
- **Common Patterns** - Network requests, parallel work, preventing double-taps
19+
- **Tasks** - Managing async work with Task and TaskGroup
20+
- **Isolation** - The core mental model for Swift concurrency (MainActor, actors, nonisolated)
21+
- **Sendable** - What can safely cross isolation boundaries
22+
- **Isolation Inheritance** - How isolation flows through your code
2423
- **Common Mistakes** - And how to avoid them
2524

25+
## Languages
26+
27+
Available in 10 languages: English, Spanish, Portuguese (BR & PT), Arabic, Korean, Japanese, Chinese (Simplified & Traditional), and Russian.
28+
2629
## Development
2730

2831
This site is built with [Eleventy](https://www.11ty.dev/).

src/_layouts/base.njk

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,17 @@
3131
<meta property="og:description" content="{{ description }}">
3232
<meta property="og:site_name" content="Fucking Approachable Swift Concurrency">
3333
<meta property="og:locale" content="{{ lang | default('en') }}">
34+
<meta property="og:image" content="https://fuckingapproachableswiftconcurrency.com/images/og-image.png">
35+
<meta property="og:image:width" content="1200">
36+
<meta property="og:image:height" content="1200">
37+
<meta property="og:image:alt" content="Fucking Approachable Swift Concurrency">
3438

3539
<!-- Twitter -->
3640
<meta name="twitter:card" content="summary">
3741
<meta name="twitter:url" content="https://fuckingapproachableswiftconcurrency.com{{ page.url }}">
3842
<meta name="twitter:title" content="{{ title }}">
3943
<meta name="twitter:description" content="{{ description }}">
44+
<meta name="twitter:image" content="https://fuckingapproachableswiftconcurrency.com/images/og-image.png">
4045

4146
<!-- Favicon -->
4247
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg">
@@ -87,6 +92,9 @@
8792
<a href="#{{ key }}">{{ label }}</a>
8893
{% endfor %}
8994
</nav>
95+
<a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency" class="github-link" aria-label="View on GitHub" target="_blank" rel="noopener">
96+
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><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 0024 12c0-6.63-5.37-12-12-12z"/></svg>
97+
</a>
9098
<div class="language-selector">
9199
<button class="language-toggle" aria-label="Select language" aria-expanded="false">
92100
<span class="current-lang">{{ languages[lang].native | default('English') }}</span>
@@ -110,6 +118,7 @@
110118
<footer class="site-footer">
111119
<div class="container">
112120
<p>{{ footer.madeWith | default('Made with frustration and love. Because Swift concurrency doesn\'t have to be confusing.') }}</p>
121+
<p class="tribute">{{ footer.tradition | default('In the tradition of') }} <a href="https://fuckingblocksyntax.com/">fuckingblocksyntax.com</a> {{ footer.traditionAnd | default('and') }} <a href="https://fuckingifcaseletsyntax.com/">fuckingifcaseletsyntax.com</a></p>
113122
<p><a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency">{{ footer.viewOnGitHub | default('View on GitHub') }}</a></p>
114123
</div>
115124
</footer>

src/ar/index.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ nav:
1313
mistakes: الأخطاء الشائعة
1414
footer:
1515
madeWith: صُنع بالإحباط والحب. لأن تزامن Swift لا يجب أن يكون مربكاً.
16+
tradition: في تقليد
17+
traditionAnd: و
1618
viewOnGitHub: عرض على GitHub
1719
---
1820

1921
<section class="hero">
2022
<div class="container">
2123
<h1>دليل سهل جداً<br><span class="accent">لتزامن Swift</span></h1>
2224
<p class="subtitle">افهم أخيراً async/await والمهام ولماذا المترجم يصرخ عليك.</p>
23-
<p class="credit">شكر كبير لـ <a href="https://www.massicotte.org/">Matt Massicotte</a> لجعل تزامن Swift مفهوماً. من إعداد <a href="https://pepicrft.me">Pedro Piñera</a>. وجدت مشكلة؟ <a href="mailto:pedro@tuist.dev">pedro@tuist.dev</a></p>
24-
<p class="tribute">في تقليد <a href="https://fuckingblocksyntax.com/">fuckingblocksyntax.com</a> و <a href="https://fuckingifcaseletsyntax.com/">fuckingifcaseletsyntax.com</a></p>
25+
<p class="credit">شكر كبير لـ <a href="https://www.massicotte.org/">Matt Massicotte</a> لجعل تزامن Swift مفهوماً. من إعداد <a href="https://pepicrft.me">Pedro Piñera</a>، مؤسس مشارك لـ <a href="https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=author">Tuist</a>. وجدت مشكلة؟ <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/issues/new">افتح issue</a> أو <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/pulls">أرسل PR</a>.</p>
2526
</div>
2627
</section>
2728

@@ -666,6 +667,12 @@ func fetchAll() async {
666667
- [توثيق تزامن Swift](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)
667668
- [WWDC21: تعرف على async/await](https://developer.apple.com/videos/play/wwdc2021/10132/)
668669
- [WWDC21: احمِ الحالة القابلة للتغيير مع actors](https://developer.apple.com/videos/play/wwdc2021/10133/)
670+
</div>
671+
672+
<div class="resources">
673+
<h4>أدوات</h4>
674+
675+
- [Tuist](https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=tools) - طوّر أسرع مع فرق ومشاريع أكبر
669676
</div>
670677

671678
</div>

src/css/style.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,19 @@ blockquote {
922922
background: rgba(156, 163, 175, 0.15);
923923
}
924924

925+
/* GitHub Link */
926+
.github-link {
927+
display: flex;
928+
align-items: center;
929+
color: var(--color-text);
930+
opacity: 0.7;
931+
transition: opacity 0.2s;
932+
}
933+
934+
.github-link:hover {
935+
opacity: 1;
936+
}
937+
925938
/* Language Selector */
926939
.language-selector {
927940
position: relative;

src/en/index.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ footer:
2020
<div class="container">
2121
<h1>Fucking Approachable<br><span class="accent">Swift Concurrency</span></h1>
2222
<p class="subtitle">Finally understand async/await, Tasks, and why the compiler keeps yelling at you.</p>
23-
<p class="credit">Huge thanks to <a href="https://www.massicotte.org/">Matt Massicotte</a> for making Swift concurrency understandable. Put together by <a href="https://pepicrft.me">Pedro Piñera</a>. Found an issue? <a href="mailto:pedro@tuist.dev">pedro@tuist.dev</a></p>
24-
<p class="tribute">In the tradition of <a href="https://fuckingblocksyntax.com/">fuckingblocksyntax.com</a> and <a href="https://fuckingifcaseletsyntax.com/">fuckingifcaseletsyntax.com</a></p>
23+
<p class="credit">Huge thanks to <a href="https://www.massicotte.org/">Matt Massicotte</a> for making Swift concurrency understandable. Put together by <a href="https://pepicrft.me">Pedro Piñera</a>, co-founder of <a href="https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=author">Tuist</a>. Found an issue? <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/issues/new">Open an issue</a> or <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/pulls">submit a PR</a>.</p>
2524
</div>
2625
</section>
2726

@@ -666,6 +665,12 @@ If you're already in an async context, prefer structured concurrency (`async let
666665
- [Swift Concurrency Documentation](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)
667666
- [WWDC21: Meet async/await](https://developer.apple.com/videos/play/wwdc2021/10132/)
668667
- [WWDC21: Protect mutable state with actors](https://developer.apple.com/videos/play/wwdc2021/10133/)
668+
</div>
669+
670+
<div class="resources">
671+
<h4>Tools</h4>
672+
673+
- [Tuist](https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=tools) - Ship faster with larger teams and codebases
669674
</div>
670675

671676
</div>

src/es/index.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ nav:
1313
mistakes: Trampas
1414
footer:
1515
madeWith: Hecho con frustración y amor. Porque la concurrencia en Swift no tiene que ser confusa.
16+
tradition: En la tradición de
17+
traditionAnd: y
1618
viewOnGitHub: Ver en GitHub
1719
---
1820

1921
<section class="hero">
2022
<div class="container">
2123
<h1>Jodidamente Accesible<br><span class="accent">Swift Concurrency</span></h1>
2224
<p class="subtitle">Por fin entiende async/await, Tasks, y por qué el compilador no para de gritarte.</p>
23-
<p class="credit">Enorme agradecimiento a <a href="https://www.massicotte.org/">Matt Massicotte</a> por hacer comprensible la concurrencia en Swift. Recopilado por <a href="https://pepicrft.me">Pedro Piñera</a>. ¿Encontraste un error? <a href="mailto:pedro@tuist.dev">pedro@tuist.dev</a></p>
24-
<p class="tribute">En la tradición de <a href="https://fuckingblocksyntax.com/">fuckingblocksyntax.com</a> y <a href="https://fuckingifcaseletsyntax.com/">fuckingifcaseletsyntax.com</a></p>
25+
<p class="credit">Enorme agradecimiento a <a href="https://www.massicotte.org/">Matt Massicotte</a> por hacer comprensible la concurrencia en Swift. Recopilado por <a href="https://pepicrft.me">Pedro Piñera</a>, co-fundador de <a href="https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=author">Tuist</a>. ¿Encontraste un error? <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/issues/new">Abre un issue</a> o <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/pulls">envía un PR</a>.</p>
2526
</div>
2627
</section>
2728

@@ -666,6 +667,12 @@ Si ya estás en un contexto async, prefiere la concurrencia estructurada (`async
666667
- [Swift Concurrency Documentation](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)
667668
- [WWDC21: Meet async/await](https://developer.apple.com/videos/play/wwdc2021/10132/)
668669
- [WWDC21: Protect mutable state with actors](https://developer.apple.com/videos/play/wwdc2021/10133/)
670+
</div>
671+
672+
<div class="resources">
673+
<h4>Herramientas</h4>
674+
675+
- [Tuist](https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=tools) - Desarrolla más rápido con equipos y proyectos grandes
669676
</div>
670677

671678
</div>

src/images/og-image.png

68.2 KB
Loading

src/images/og-image.svg

Lines changed: 14 additions & 0 deletions
Loading

src/ja/index.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ nav:
1313
mistakes: 落とし穴
1414
footer:
1515
madeWith: フラストレーションと愛を込めて作りました。Swift の並行処理が難しい必要はないから。
16+
tradition: 次の伝統を受け継いで
17+
traditionAnd:
1618
viewOnGitHub: GitHub で見る
1719
---
1820

1921
<section class="hero">
2022
<div class="container">
2123
<h1>クソ分かりやすい<br><span class="accent">Swift 並行処理</span></h1>
2224
<p class="subtitle">async/await、Tasks、そしてコンパイラがなぜあなたに怒鳴り続けるのかを、ついに理解しよう。</p>
23-
<p class="credit"><a href="https://www.massicotte.org/">Matt Massicotte</a> 氏に多大な感謝を。Swift 並行処理を理解可能にしてくれました。<a href="https://pepicrft.me">Pedro Piñera</a> がまとめました。問題を見つけた? <a href="mailto:pedro@tuist.dev">pedro@tuist.dev</a></p>
24-
<p class="tribute"><a href="https://fuckingblocksyntax.com/">fuckingblocksyntax.com</a> と <a href="https://fuckingifcaseletsyntax.com/">fuckingifcaseletsyntax.com</a> の伝統を受け継いで</p>
25+
<p class="credit"><a href="https://www.massicotte.org/">Matt Massicotte</a> 氏に多大な感謝を。Swift 並行処理を理解可能にしてくれました。<a href="https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=author">Tuist</a> 共同創設者の <a href="https://pepicrft.me">Pedro Piñera</a> がまとめました。問題を見つけた? <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/issues/new">Issue を開く</a>か <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/pulls">PR を送る</a>。</p>
2526
</div>
2627
</section>
2728

@@ -666,6 +667,12 @@ func fetchAll() async {
666667
- [Swift 並行処理ドキュメント](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)
667668
- [WWDC21: Meet async/await](https://developer.apple.com/videos/play/wwdc2021/10132/)
668669
- [WWDC21: Protect mutable state with actors](https://developer.apple.com/videos/play/wwdc2021/10133/)
670+
</div>
671+
672+
<div class="resources">
673+
<h4>ツール</h4>
674+
675+
- [Tuist](https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=tools) - 大規模なチームとコードベースでより速く開発
669676
</div>
670677

671678
</div>

src/ko/index.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ nav:
1313
mistakes: 함정
1414
footer:
1515
madeWith: 좌절과 사랑으로 만들었습니다. Swift 동시성이 혼란스러울 필요는 없으니까요.
16+
tradition: 다음의 전통을 따릅니다
17+
traditionAnd:
1618
viewOnGitHub: GitHub에서 보기
1719
---
1820

1921
<section class="hero">
2022
<div class="container">
2123
<h1>빌어먹게 쉬운<br><span class="accent">Swift 동시성</span></h1>
2224
<p class="subtitle">드디어 async/await, Tasks, 그리고 왜 컴파일러가 계속 소리 지르는지 이해하세요.</p>
23-
<p class="credit"><a href="https://www.massicotte.org/">Matt Massicotte</a>에게 큰 감사를 드립니다. Swift 동시성을 이해할 수 있게 만들어주셨습니다. <a href="https://pepicrft.me">Pedro Piñera</a>가 정리했습니다. 오류를 발견하셨나요? <a href="mailto:pedro@tuist.dev">pedro@tuist.dev</a></p>
24-
<p class="tribute"><a href="https://fuckingblocksyntax.com/">fuckingblocksyntax.com</a>과 <a href="https://fuckingifcaseletsyntax.com/">fuckingifcaseletsyntax.com</a>의 전통을 따릅니다</p>
25+
<p class="credit"><a href="https://www.massicotte.org/">Matt Massicotte</a>에게 큰 감사를 드립니다. Swift 동시성을 이해할 수 있게 만들어주셨습니다. <a href="https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=author">Tuist</a>의 공동 창립자 <a href="https://pepicrft.me">Pedro Piñera</a>가 정리했습니다. 오류를 발견하셨나요? <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/issues/new">이슈 열기</a> 또는 <a href="https://github.com/pepicrft/fuckingapproachableswiftconcurrency/pulls">PR 제출</a>.</p>
2526
</div>
2627
</section>
2728

@@ -666,6 +667,12 @@ func fetchAll() async {
666667
- [Swift Concurrency Documentation](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)
667668
- [WWDC21: Meet async/await](https://developer.apple.com/videos/play/wwdc2021/10132/)
668669
- [WWDC21: Protect mutable state with actors](https://developer.apple.com/videos/play/wwdc2021/10133/)
670+
</div>
671+
672+
<div class="resources">
673+
<h4>도구</h4>
674+
675+
- [Tuist](https://tuist.dev?utm_source=fuckingapproachableswiftconcurrency&utm_medium=website&utm_campaign=tools) - 더 큰 팀과 코드베이스로 더 빠르게 개발하세요
669676
</div>
670677

671678
</div>

0 commit comments

Comments
 (0)