Ace Citizenship

一款我為幫助妻子通過美國公民身份測試而構建的免費iOS應用。

Ace Citizenship app interface

摘要

當我妻子開始準備美國入籍測試時,我找不到符合我標準的學習應用。

Ace Citizenship使用間隔重複涵蓋所有128道官方USCIS公民問題。

該應用完全免費,並將保持完全免費。

起源故事

我為一位觀眾構建了Ace Citizenship:我的妻子。

市場上現有的應用令人失望。

我知道我可以做得更好。

應用

Ace Citizenship提供高端體驗而無高端價格。介面簡潔、專注,尊重您的時間。

Welcome screen
Quiz interface
Completion screen
Settings screen

視覺設計

我創造了一種統一的3D視覺語言——夢幻、樂觀、明顯的美國風格——讓學習不再枯燥。

每幅插圖都是使用我在100,000多次圖像生成中完善的自定義提示在Midjourney中生成的。

在dreamofelectric.com查看更多我的AI生成藝術作品。 dreamofelectric.com.

3D flag
3D Capitol
3D States map

間隔重複

Ace Citizenship的核心是一種優化學習環節的間隔重複算法。

這種基於證據的方法在提高記憶力的同時大大減少了學習時間。

該應用追蹤進度並適應個人學習模式。

個性化學習

一些USCIS問題的答案取決於您的具體情況。

這種對細節的關注意味著用戶在學習測試當天需要的確切資訊。

USCIS questions reference

技術實現

Ace Citizenship完全使用SwiftUI為iOS構建。

架構易於維護且高效。

遵循Apple的Human Interface Guidelines。

內部機制

以下是使應用有效的代碼庫中的一些有趣模式。

間隔重複算法

核心學習引擎優先處理您困難的問題。

Flashcards.swift
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個州及領地的數據庫。

Questions.swift
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功能實現編譯時安全性。

Theme.swift
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準備她的入籍測試。她通過了。今天,她是美國公民。

那一刻讓每一小時的開發都值得。

Citizenship ceremony materials
效忠宣誓
Naturalization ceremony
今天,我是美國人

幫助他人

在我妻子成功後,我在App Store發布了Ace Citizenship。它獲得了5星評價。

一位用戶寫道:「我每天用這個應用練習30分鐘,堅持了一個月就通過了!」

該應用繼續幫助移民實現成為美國公民的目標。

感謝

Ace Citizenship代表了我在構建軟體方面的熱愛。

這個項目讓我能夠跨越整個產品生命週期工作。

該應用是免費的,並將保持免費。

在App Store下載 →