Project · Clone of iMessage
Pingline
A 6-part build: a spec, 3 milestone guides, 1 AI checkpoint, and a defend-your-code rubric. You build it in Xcode on a Mac; each guide walks the exact Swift 6 patterns.
The spec
Milestones
3 steps · 270 min total- 1Pingline M1 — models and the connection actor55 minModel messages and conversations as Sendable value types keyed for realtime · Build an actor that owns connect, disconnect, and an offline send buffer
- 2Pingline M2 — Realtime as an AsyncSequence60 minSubscribe to a Supabase Realtime channel for message inserts · Expose incoming messages as an AsyncStream consumed with for await
- 3Pingline M3 — optimistic send and reconciliation65 minShow a sent message instantly and reconcile it on ack or failure · Add scroll-to-bottom and a typing indicator to the thread
AI checkpoints
Review the diff, then grade your fixAI checkpoint — review before you acceptPingline checkpoint — the reentrancy bug
actor Outbox {
private var pending: [Message] = []
private var nextSequence = 0
private let sender: MessageSender
init(sender: MessageSender) { self.sender = sender }
func enqueue(_ message: Message) {
pending.append(message)
}
// Flush the next queued message with the next sequence number.
… 12 more lines — download or open to review in full