Moro: Infant Tracker for Twins & Multiples An iPhone app for parents of twins and triplets. Log a feed, nap or diaper once and it applies to every baby, so the whole household sits on one timeline. Problem. Baby trackers are built for one child. Twin parents enter everything twice, juggle separate profiles, and never see whose schedules overlap. The double-logging hits hardest at 3am. Solution. Moro is built for multiples first. Pick more than one baby and one tap logs the same activity for all of them. A 24-hour timeline stacks every child's day to reveal "The Gap", the window when everyone is finally asleep. Every caregiver's phone updates the moment anything changes. Built with: SwiftUI (iOS 17+), Supabase (Auth, Postgres, Realtime, Storage), Swift Charts, MVVM + Repository + @Observable, PostHog, XcodeGen Tandem logging: one tap records the same activity for every selected baby24-hour timeline that reveals "The Gap" across all childrenLive sync across every caregiver's phoneColor-coded per-child theming across the entire UI14 activity types: feeds, sleep, diaper, growth, medical, milestones
Postlite: AI Social Scheduler That Judges Every Post A social media scheduler with taste. Agents draft posts in your voice, a judge called Jev scores every draft Read, Skim or Pass, and nothing goes out until you approve. Publishes to X, Threads, Bluesky, LinkedIn, Instagram, Facebook, TikTok, YouTube, Pinterest and Google Business. Problem. Schedulers make it easy to post more, not better. AI drafting made the feed worse: generic hooks, empty promo, the same three templates. Nobody was standing between the draft and the publish button. Solution. Postlite puts a judge there. Every draft gets a slop score from 0 to 100 with signals for specific, novel, bait and promo, and on X a Pass blocks the post outright. Each AI task routes to its own Claude model, the voice profile rides along as a cached prompt prefix, and every call logs tokens, cache hits and cost. Ten publish adapters handle each network's quirks: chunked video uploads, per-network quotas, tokens sealed with AES-256-GCM and refreshed under a lock so two publishes never fight. Built with: Next.js 16 (App Router) + React 19, Claude API (Sonnet 5, Haiku 4.5, Opus 5, per task), TypeSafe AI (Jev judge), Supabase (Postgres, Auth, RLS on every table), Stripe Billing, Tailwind v4, Zod, Upstash rate limits, MCP server + Chrome extension Jev judge: 8 signals and a 0 to 100 slop score, five bands from Signal to CookedPer-task model routing with prompt-cached voice profiles; every call logged with cost and latency10 publish adapters, each respecting its network's limits and media rulesOAuth tokens sealed with AES-256-GCM in a service-role-only table, refreshed under a lockPublic API, MCP server and Siri Shortcut with per-plan rate limits (60 to 400 requests a minute)Free Slop Check with no login, rate limited per IP through Upstash
Notemark: Visual Feedback on Live Websites Pin a comment on the exact pixel of a live website or Figma file. Share one link, reviewers need no account, and every note can become a task in GitHub, Linear, Jira or Asana. Problem. Website feedback arrives as screenshots in Slack with "the button, no, the other one". Reviewers will not sign up for a tool to leave one note. And the dashboard had grown a dozen shades of grey, no dark mode and tap targets too small for a phone. Solution. Notemark drops the comment where the cursor is. My part was making it feel like one product: a HIG-style token set for labels, fills, separators and blurred materials, a corner-radius scale, 44px tap targets, and dark mode that follows the system and applies before first paint. That pass touched 197 files, restyled every screen from auth to the browser extension, and added proper dialog roles and Escape handling along the way. Built with: Next.js 14 (App Router) + React 18, Tailwind + SCSS modules + shadcn/ui, Supabase (Postgres, Auth, Realtime), Claude API (comment triage), Stripe Billing, Chrome + VS Code extensions, MCP server HIG token system: label, fill, separator, tint and material layers as Tailwind utilitiesDark mode that follows the system and is applied before paint, no flash28px and 44px hit targets, focus rings and hover effects only on devices that can hoverPinned comments on live URLs and Figma files, shared by link with no reviewer accountClaude triage sorts each note into bug, design, copy or question and suggests an assigneeRealtime presence: see who is viewing the canvas with you
Kathari: Cleaning Services Booking Platform A booking platform for a Canadian cleaning company. Customers book cleanings and vacuum rentals and pay in a few taps, with separate portals for homeowners, businesses and property managers. Problem. Local cleaning businesses run on phone, text and spreadsheets. No shared schedule, no online payment, no way for property managers to handle multiple units. Double-bookings and missed jobs follow. Solution. Kathari puts the whole operation online. Homeowners and businesses book and pay through Stripe in one flow, then watch the job status update live. Property managers run every building from one dashboard. Every booking is confirmed on the server, never trusted from the browser. Built with: Next.js 16 (App Router), Supabase (Postgres, Auth, Realtime, Edge Functions), Stripe Payments, Resend + Cloudflare R2, TypeScript + Zod, Sentry Three portals: residents, commercial, property managersStripe checkout for services and vacuum rentalsLive booking status that updates in real timeGuest booking flow with no account requiredEvery booking verified on a secure server, not the browser
PIN: Private Messaging App A privacy-first messaging app for iPhone. Secure chats, voice notes and file sharing, with a live status feed borrowed from BBM, in Apple's new "Liquid Glass" look. Problem. Mainstream messengers trade privacy for reach: history in the cloud, metadata harvested, bloated apps. People want secure messaging without losing rich media, presence and real-time collaboration. Solution. PIN keeps keys and conversations on the device, never in the cloud, so nobody else can read them. On top of that: voice notes, photos and files, group chats, a live status feed like old BBM, and shared notes two people can edit at once inside a chat. Native iPhone, Liquid Glass throughout. Built with: SwiftUI (iOS 26), Keychain / Secure Enclave, Liquid Glass design language, Local-first storage, MVVM + @Observable Encryption keys stored on-device only, never in the cloudVoice notes, images, video and files up to 16MBGroup chats up to 250 membersLive status timeline + now-playing (BBM-inspired)Collaborative note editing with real-time typing
érgo: Minimalist iOS To-Do A fast, private to-do app for iPhone. Smart lists (Today, Upcoming, Inbox), folders and a home-screen widget. No account, everything stays on the device. Problem. Most to-do apps are bloated, or locked behind subscriptions and forced sign-ups. People want something fast, native and private that handles the day. Solution. érgo stays on the device and works offline. Smart lists surface what is due today and what is next, folders group longer projects, and a widget puts the day one glance away. Sign in with Apple is optional. Built with Apple frameworks only, no outside dependencies, so it stays fast. Built with: SwiftUI (iOS 26), SwiftData (local-first, user-scoped), WidgetKit, Sign in with Apple, MVVM + @Observable Smart lists: Today, Upcoming, InboxFolders for grouping projectsHome-screen widget for a glanceable dayTheme colors and Sign in with AppleDependency-free, fully offline
Phase: Quit Tracker with an On-Device Coach An iPhone app for quitting smoking, vaping, drinking, gambling, sugar or scrolling, and staying stopped. Live streak, money saved, milestones, and a coach that runs on the phone when a craving hits. No account, no server. Problem. Quit apps put subscriptions, sign-ups and cloud accounts in front of something deeply private. At the moment that matters, the craving, you get a static tip or a paywall. Solution. Phase runs entirely on the device. Tap Hold on and a 4-7-8 breathing exercise starts, with a countdown and a coach written by Apple's on-device intelligence, so nothing typed leaves the phone. Streak, savings and units avoided recompute from the quit date, and widgets, the Lock Screen and the Dynamic Island keep today in view. Pro is a one-time purchase: unlimited habits, Apple Health signals, craving heatmaps. Built with: SwiftUI (iOS 26, Liquid Glass), SwiftData (on-device only), Foundation Models (on-device coach), HealthKit + WidgetKit + Live Activities, App Intents for Siri, StoreKit 2 (one-time Pro) Hold on: breathing, countdown and an on-device coach when a craving hitsLive streak, money saved and units avoided, recomputed from the quit dateMilestones, growth rings, weekly recap and an achievements galleryWidgets, Lock Screen and Dynamic Island for the running streakCraving heatmap, intensity trends and Apple Health signals in Pro
Ascent: Client Management for Personal Trainers An app for personal trainers and their clients. The client logs a set with an RPE, the app works out next week's weight, and every exercise has its own chat thread with voice notes. Works offline, syncs when it can. Problem. Trainers lose their evenings to two things: working out progressive overload by hand for every client, and bouncing between the training app and a separate chat app to answer "how did that feel?". Solution. Ascent folds both into the workout. Auto-progression reads the hardest set: RPE under 8 with every rep hit means load goes up one plate step, RPE over 9 with a missed rep means it comes down, anything else holds. A "why this weight" sheet shows the history in plain words. Each exercise carries a realtime thread with voice notes. Writes go to an outbox in SQLite first, retry with backoff, and get set aside for review after eight attempts, so a dead gym signal never loses a set. Built with: Expo 57 + React Native 0.86 (New Architecture), Expo Router (typed routes), NativeWind + Tailwind, Supabase (Postgres, Auth, Realtime), Zustand + expo-sqlite outbox, Reanimated 4, Jest (18 test files) RPE-based auto-progression that snaps to plate steps and respects a weight floor"Why this weight" history rebuilt from each set's progression delta and reasonStreaks and adherence computed at UTC noon so time zones never move a sessionOffline outbox: six write types, oldest first, backoff from 1s to 10m, human review after 8 triesPer-exercise realtime chat with voice notes on web and in Expo GoTrainer and client roles with row-level security in Postgres
Snake: Snake 2026 · Arcade Game Classic Snake rebuilt for iPhone. 50 hand-crafted levels across 5 worlds, 10 power-ups, rival snakes, and a different buzz for every move. Problem. Snake is timeless but dated: flat graphics, one board, no progression. A modern version needs smooth motion, tactile feedback and depth while staying familiar. Solution. Snake 2026 draws on a SwiftUI Canvas driven by TimelineView, so motion stays smooth while the phone buzzes differently when you eat, chain a combo, level up or crash. The five worlds (Classic, Desert, Ocean, Lava, Cyber) add progression with stars and unlocks. Ten power-ups, rival AI snakes, endless mode, daily challenges and eight skins keep every run different. Built with: SwiftUI (TimelineView + Canvas), Core Haptics (CHHapticEngine), @Observable game model, Swipe + on-screen D-pad input, iOS 18+ 50 hand-crafted levels across 5 themed worlds, with stars and world unlocks10 power-ups: ghost phase, speed burst, magnet, bomb clear, portal swap and moreRival AI snakes with pathfinding and aggression that scales per levelEndless mode with a fresh maze every 5 applesDistinct Core Haptics pattern for eat, combo, crash, level-up and each power-upDaily and weekly challenges, 8 unlockable skins, colour-blind modes