Ace Citizenship

一款我为帮助妻子通过美国公民身份测试而构建的免费iOS应用。她通过了。现在它帮助其他人实现同样的梦想。

Ace Citizenship app interface

摘要

当我妻子开始准备美国入籍测试时,我找不到符合我标准的学习应用。

Ace Citizenship使用间隔重复涵盖所有128道官方USCIS公民问题——这与使Duolingo有效的技术相同。

该应用完全免费,并将保持完全免费。没有广告,没有订阅,没有陷阱。

起源故事

我为一位观众构建了Ace Citizenship:我的妻子。她需要通过USCIS入籍测试,我想给她最好的成功工具。

市场上现有的应用令人失望。侵入性广告打断学习。订阅付费墙阻止访问基本内容。

我知道我可以做得更好。所以我从零开始设计、品牌化和开发整个应用。

应用

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问题的答案取决于您的具体情况——您的居住州、您的国会代表。Ace Citizenship会根据您的实际测试条件个性化这些问题。

这种对细节的关注意味着用户不只是在记忆通用答案;他们在学习测试当天需要的确切信息。

USCIS questions reference

技术实现

Ace Citizenship完全使用SwiftUI为iOS构建,充分利用Apple的现代框架。

架构易于维护且高效。

遵循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个州及领地的数据库,已更新至当前第119届国会。

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准备她的入籍测试。她通过了。今天,她是美国公民。

那一刻——我们一起站在USCIS办公室,她手持入籍证书——让每一小时的开发都值得。

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

帮助他人

在我妻子成功后,我在App Store发布了Ace Citizenship。它获得了5星评价,用户一致报告该应用帮助他们通过了公民身份测试。

一位用户写道:"我每天用这个应用练习30分钟,坚持了一个月就通过了!"

该应用继续帮助移民实现成为美国公民的目标,一次一个学习环节。

感谢

Ace Citizenship代表了我在构建软件方面的热爱:为我关心的人解决真实问题,然后与世界分享该解决方案。

这个项目让我能够跨越整个产品生命周期工作。

该应用是免费的,并将保持免费。因为有些事情——比如帮助人们成为他们选择称之为家的国家的公民——比收入更重要。

在App Store下载 →