Ace Citizenship
一款我為幫助妻子通過美國公民身份測試而構建的免費iOS應用。
摘要
當我妻子開始準備美國歸化考試時,我找不到一款符合我標準的學習 App。市面產品不是廣告過多、就是內容過時,或忽略了經過驗證的學習方法。所以我決定自己做一個。
Ace Citizenship使用間隔重複涵蓋所有128道官方USCIS公民問題。
該應用程式現在和將來都是完全免費的。沒有廣告,沒有訂閱,沒有陷阱。有些事情比收入更重要。
起源故事
我為一位觀眾構建了Ace Citizenship:我的妻子。
市面上既有 App 的體驗令人失望:侵入式廣告頻繁打斷學習、訂閱付費牆阻擋關鍵內容,整體設計也像是事後拼湊。
我知道我可以做得更好。因此,我從頭開始設計、品牌化和設計了整個應用程式 - 這是一種將我的產品設計經驗與構建有用軟體的熱情結合在一起的熱愛勞動。
應用
Ace Citizenship提供高端體驗而無高端價格。介面簡潔、專注,尊重您的時間。
視覺設計
我創造了一種統一的3D視覺語言——夢幻、樂觀、明顯的美國風格——讓學習不再枯燥。
每幅插圖都是使用我在100,000多次圖像生成中完善的自定義提示在Midjourney中生成的。
在dreamofelectric.com查看更多我的AI生成藝術作品。 dreamofelectric.com.
間隔重複
Ace Citizenship的核心是一種優化學習環節的間隔重複算法。
這種基於證據的方法在提高記憶力的同時大大減少了學習時間。
該應用程式追蹤進度並適應個人學習模式,提供智慧且反應靈敏的個人化體驗。
個性化學習
一些美國移民局問題的答案取決於您的具體情況 - 您的居住州、您的國會代表。 Ace Citizenship 對這些問題進行個性化設置,以符合您的實際測試條件。
這種對細節的關注意味著用戶在學習測試當天需要的確切資訊。
技術實現
Ace Citizenship 完全以 SwiftUI 建構於 iOS,充分運用 Apple 的現代框架。App 使用 SwiftData 做本地持久化,並透過 iCloud 在不需帳號系統的情況下同步學習進度。
該架構可維護且高效。當美國移民局修改其官方清單時,問題庫會無縫更新,間隔重複引擎完全在裝置上運行以提供即時回饋。
遵循Apple的Human Interface Guidelines。
內部機制
以下是使應用有效的代碼庫中的一些有趣模式。
間隔重複算法
核心學習引擎會優先考慮您遇到的問題。當你回答錯誤時,該卡片會進入一個單獨的隊列,並混合到你的下一個學習課程中 - 確保你更頻繁地看到困難的材料,直到你掌握它。
func completeCard(correct: Bool) {
if !currentSet.isEmpty {
let card = currentSet.removeFirst()
remainingCards -= 1
if correct {
cards.append(card) // Back to main deck
} else {
incorrectCards.append(card) // Priority requeue
}
}
}
func prepareNextSet() {
// Prioritize missed questions in next round
let incorrectCount = min(incorrectCards.count, 10)
let newCardsCount = 10 - incorrectCount
currentSet = Array(incorrectCards.prefix(incorrectCount))
incorrectCards.removeFirst(incorrectCount)
currentSet += Array(cards.prefix(newCardsCount))
}
州特定個性化
該應用程式維護所有 50 個州和地區的資料庫,並為本屆第 119 屆國會進行了更新。當您選擇所在州時,有關參議員、州長和首都的問題將根據您的實際測試條件進行個人化。
struct StateInfo {
let name: String
let senators: [String]
let governor: String
let capital: String
}
// Updated for 119th Congress (January 2025)
let stateInformation: [String: StateInfo] = [
"California": StateInfo(
name: "California",
senators: ["Adam Schiff", "Alex Padilla"],
governor: "Gavin Newsom",
capital: "Sacramento"
),
// ... all 50 states + territories
]
類型安全主題
主題系統使用Swift的KeyPath功能實現編譯時安全性。
struct Theme {
struct ColorSet {
let background: Color
let surface: Color
let onBackground: Color
let blue: Color
let green: Color
let red: Color
}
static func color(
_ keyPath: KeyPath<ColorSet, Color>,
for colorScheme: ColorScheme
) -> Color {
let colorSet = colorScheme == .dark
? darkMode
: lightMode
return colorSet[keyPath: keyPath]
}
}
// Usage: Theme.color(\.blue, for: colorScheme)
她通過了
我妻子使用Ace Citizenship準備她的入籍測試。她通過了。今天,她是美國公民。
那一刻——當她拿著入籍證書站在美國移民局辦公室時——讓每一個小時的發展都是值得的。該應用程式完全按照預期運行。
幫助他人
在妻子順利通過考試後,我將 Ace Citizenship 發布到 App Store。現在它獲得了 5 星評分,使用者也持續回饋這款 App 確實幫助他們通過公民考試。
一位用戶寫道:「我每天用這個應用練習30分鐘,堅持了一個月就通過了!」
該應用程式繼續幫助移民實現成為美國公民的目標,一次一個學習課程。這是我曾經交付過的最具個人意義的專案。
感謝
Ace Citizenship代表了我在構建軟體方面的熱愛。
這個專案讓我能夠在整個產品生命週期中工作——從識別需求,到設計體驗,再到編寫每一行程式碼。這是我的技藝的純粹表達。
該應用程式現在和將來都是免費的。因為有些事情——例如幫助人們成為他們選擇稱之為家鄉的國家的公民——比收入更重要。