iOS 17 · Swift 5.9 · Firebase

Master
System Design
on the go

A native iOS app for engineers. Read curated articles, follow top engineering blogs, study with flash cards — with Gemini AI to explain it all.

HOME
📌 Daily Pick
Consistent Hashing Deep Dive
New
📖 In Progress
Database Indexing
64%
CAP Theorem
31%
✦ AI Summary
Consistent hashing minimizes key remapping when nodes join or leave a cluster by mapping both keys and nodes to a ring...
🏠
📄
📰
🃏
⚙️
5
App Tabs
3
AI Modes
100%
Native SwiftUI
Free
No Subscription

Everything you need
to level up

Built for engineers who want to learn system design without switching between a dozen tabs.

📄
Articles
Markdown articles synced from GitHub. Native rendering with Mermaid diagram support, syntax highlighting, and tap-to-zoom images.
DocReaderView
🤖
AI Assistant
Powered by Gemini 2.5 Flash Lite via Firebase AI. Summarize any article or blog post, get an ELI5 explanation, or chat with full article context.
GeminiService
📰
Engineering Blogs
RSS feeds from Netflix, Uber, Airbnb, Google and more. Cached locally with configurable refresh. AI summaries on any post.
BlogFeedService
🃏
Flash Cards
Study decks synced from GitHub with SHA-based change detection. Know / Don't Know tracking with progress persistence.
FlashCardStore
🔐
Secure Auth
Google Sign-In via Firebase Authentication. Face ID / Touch ID lock with passcode fallback. App Check enforced on all AI endpoints.
BiometricService
🏠
Smart Home
Daily picks, in-progress articles, completed articles, liked blogs — all surfaced on a dashboard with one-tap deep navigation into any tab.
NavigationRouter

Clean layers,
Swift concurrency

Unidirectional data flow with SwiftUI ObservableObject stores and Swift actor-based services.

SwiftUI Views
Reads @Published stores, drives navigation via NavigationRouter
HomeView DocReaderView CompanyBlogView StudyView
@Published bindings
ObservableObject Stores
State management, UserDefaults persistence
DocStore BlogStore ActivityStore AuthStore
async / await
Swift Actors (Services)
Thread-safe, concurrent-safe network + AI calls
DocSyncService GeminiService BlogFeedService
HTTPS
External Services
No backend needed — GitHub + Firebase only
GitHub Raw Firebase AI Firebase Auth RSS Feeds
App Launch Sequence
01
FirebaseApp.configure()
Must be first. AppCheck debug provider registered in #if DEBUG before configure.
02
Auth state listener
AuthStore subscribes to Firebase auth changes. Fires immediately with persisted session or nil.
Auth.auth().addStateDidChangeListener { _, user in self.user = user self.isLoading = false }
03
Auth gate
isLoading → splash. Not signed in → LoginView. Signed in → check biometric.
04
Biometric gate
Face ID / passcode. On success → ContentView (TabView). Re-locks on background.
05
ContentView ready
5-tab experience. NavigationRouter drives cross-tab deep linking from Home cards.

Powered by Firebase,
secured end-to-end

Three Firebase services doing exactly what they're designed for — nothing more.

🔑
Firebase Authentication
Google Sign-In via OAuth. Firebase persists sessions across app launches. Anonymous auth available in development builds.
✓ Tokens managed by SDK
Firebase AI Logic (Gemini)
Gemini 2.5 Flash Lite via .googleAI() backend. Free tier, no billing setup. Called through a Swift actor for thread safety.
✓ App Check enforced
🛡️
App Check
Enforced on Firebase AI endpoint. Debug provider for simulator (registered token). DeviceCheck for physical devices in release. Prevents API abuse.
✓ Enforced in production
GeminiService.swift
// Swift actor — thread-safe AI calls actor GeminiService { static let shared = GeminiService() func summarizeArticle( _ doc: Doc, markdown: String ) async throws -> String { let ai = FirebaseAI.firebaseAI( backend: .googleAI() ) let model = ai.generativeModel( modelName: "gemini-2.5-flash-lite" ) let prompt = buildPrompt(doc, markdown) let response = try await model.generateContent(prompt) return response.text ?? "" } }

GitHub as your CMS

All content lives in this repository. No backend, no API keys for content, full community contribution via pull requests.

01 / WRITE
✍️
Author Content
Write a Markdown article using the template. Add Mermaid diagrams for architecture visuals. Fork the repo and open a PR.
02 / REGISTER
📋
Add to Index
Add one row to articles/index.md with filename, display name, and category. The app reads this on sync.
03 / MERGE
🔀
PR Merged
Maintainer reviews and merges the PR. Content is immediately available on GitHub's raw CDN.
04 / LIVE
📱
Available in App
Users tap the sync button. App fetches the updated index, detects new articles, downloads them. No app update required.

Security by default,
not by accident

Built with the right defaults from the start.

🔒
No Secrets in Source
GoogleService-Info.plist is in .gitignore. All API keys are in the plist only. No credentials embedded in Swift code.
✓ gitignore enforced
🛡️
App Check Enforced
Firebase AI endpoint is protected by App Check. Debug token for simulator, DeviceCheck for production. Prevents API key abuse.
✓ Production enforced
🔐
Debug Code Isolated
All debug bypass logic (debugBypass, forceUnlock) is strictly inside #if DEBUG. Zero debug code in release builds.
✓ Compiler-enforced
🌐
HTTPS Only
All network requests use HTTPS. NSAllowsArbitraryLoads is NOT set. ATS enforced by default. No insecure HTTP anywhere.
✓ ATS enforced

Community-driven
from day one

SDTool grows through the community. Every article, blog, and flash card deck is a pull request away.

Start learning.
Today.

Clone the repo, set up Firebase, and you're running in under 10 minutes.