About

Hi, I'm Peter Zhang.

I build small, focused Mac & iOS productivity apps under the Obelisk Club brand. Everything I ship is local-first, one-time-purchase, and built in Swift for the Apple ecosystem.

What I work on

Currently 3 apps live across iOS, iPadOS, watchOS, and macOS. 10 more in various stages from "ready next quarter" to "scoped but not started." All share four principles:

  • Local-first. Your data stays on your device. No accounts, no cloud round-trips, no telemetry SDKs.
  • One-time pricing. No subscriptions. Free tier with optional one-time Pro unlock.
  • Focused scope. Each app does one thing. Feature creep gets spun out into a new app, not bloated into existing ones.
  • Native, modern macOS / iOS. Built in Swift, leveraging Apple frameworks (Vision, VideoToolbox, HealthKit, WatchKit, sips). No Electron.

Currently shipped

SnapPro

Professional Recording

ViewOne

Smart Burst Detection

PhotoBridge

Multi-Destination Backup

SipNote

Snap to Record

QuickPix

One-Click Compression

QuickVid

Smart Compression

IDKit

On-device, private — no photo leaves your iPhone

LoopSnap Motion Lab

One chip per chat app

Photo Archive: iCloud to Mac

Automatic iCloud download

自动翻页谱架

Auto page-turn

ShotKit

Beautiful Backgrounds

Lumio

Fast Everyday Capture

Beamora

True Peer-to-Peer

TextRift

Instant line-level comparison of two texts

Snipnook

Fully local and offline. No accounts, no sync, no tracking.

Hexnut

Precision picker: saturation/brightness field, hue rail, RGB, and hex entry

Statnook

Live CPU, memory, disk, network, and battery in your menu bar

Urlescent

Encode and decode URLs the moment you type

Codalith

Generate QR codes for links, Wi‑Fi, contacts, email, SMS, phone, location, and calendar events

Clikt

Tap anywhere to count — built for counting without looking

Luxmo

Instant reflected light & exposure metering

Dahdit

Instant two-way Morse translation, fully offline

Braceful

Format, minify & validate JSON offline

Metaless

Remove GPS location, camera, date and software metadata in a tap

Vincula

Instant two-way conversion as you type

Subnetic

Instant IPv4 / CIDR calculation as you type

Pixform

Convert HEIC, JPEG, PNG, WEBP, GIF, TIFF and BMP to JPEG or PNG

Chrona: Age Calculator

Exact age in years, months and days — instantly

Lexitally

Live word, character, sentence, and paragraph counts as you type

Dimework

Zero-based envelope budgeting with monthly rollover

Magnes

Live µT reading with analog gauge and color zones

SeoSnap

Full SEO audit in seconds

CertSeal

Instant certificate grade and expiry check

Amortiq

Instant live calculation — results as you type

Tinesplit

Instant split — result appears as you type

ZoneFlip

Instant time conversion across all pinned zones

Shiftreel

Convert MOV, MP4, and audio-only M4A fully on-device

Zerofold

Zero-based budgeting — give every dollar a job each month

Branchpad

Keyboard-first outline editor: Tab, Return, arrow keys — build maps at typing speed

Cellary

Offline drink-window calculator for 14 grape varieties

RateSlate

Live day, hourly, weekly, monthly & annual rate conversion

Quovoice

One-tap quote-to-invoice conversion

Manulog

All manuals organized by room — no more lost PDFs

Jotlight

Search-as-you-type: filter your whole library live, press Return to create

Tablecast

Convert CSV to JSON, PDF, TXT, or XLSX

Unitto

Type "5 km to mi" and get an instant answer

Frettle

Instant capture — keyboard ready the moment you tap

PairPals: Kids Memory Match

Flip-and-match memory game made for ages 2–6

Plentu

Fast one-tap daily entry capture

Vowscript

Three focused writing sessions per day: 3 × morning, 6 × afternoon, 9 × night

Ownwords

Write your own affirmations in seconds

PollenSnap

Log symptoms in under 3 seconds

Kitloom

Log any service in under 5 taps

Spinery

Local-first — all books stored on your device, no cloud required

Trickpad

Tally mode for any card game with unlimited players

Hueper

Live camera color scan — hex/RGB/HSB update in real time, no tap needed

Pastebin Deck

Instant fuzzy search triggered by a global hotkey

Huemetric

Fresh, procedurally-generated plates every screening — nothing to memorize

Chrovis

Instant color harmony for 5 classic schemes

Palettine

Instant 5-color harmony from any seed color

Palettro

5 color harmony modes including Triadic and Monochromatic

TintKit

Instant HEX, RGB & HSL from any color source

Contrasta

WCAG 2.x contrast ratio with AA/AAA/UI component badges

LoopTally

Volume-button counting — count without looking at your phone

Cronwright

Visual builder for Standard, Quartz, and AWS EventBridge cron dialects

Rowlens

Opens CSV and TSV files instantly, fully offline — nothing uploaded

GitScribe

Paste a diff (or share it from any Git client) and get a clean commit message instantly

Giftlyst

A dedicated gift list per person or occasion, with a live running budget total

Gladbox

One-screen capture — always-visible box, no add-entry flow to navigate to

Tankwell

One-tap water change logging with automatic countdown reset

Radix64

Live two-way text ↔ Base64 — no separate encode/decode mode

Hourledger Time

One-tap timer — start billing in under a second, no setup

Scannic

Auto edge detection via Apple Vision

Tonewell

One-tap capture — no mood picker required

Filewise

Batch convert PNG, JPEG, HEIC, and TIFF instantly

Actinic

Full-stop & third-stop exposure wheel

RateCraft

Reverse-engineer your rate from income, overhead, tax, and margin

Wavrift

Convert M4A, WAV, and MP4 audio — fully on device

Tallyx

Zero-setup score tracking — open and play

Umbrio

Instant countdown timer — tap to start, stop anywhere on screen

Billpath

Sorted by due date — see what bills are coming first

HueBlend

Instant CMYK + RYB mixing recipe from any color

Dailytone

One-tap mood entry — 5 levels, done in seconds

Statusly

Every official HTTP status code, organized by category

Feelings Log

ReelGrab

Simmerly

PastTense

Distraction-free editor built for the scripting writing technique

Sortimals

Shape sorting puzzle for ages 2-6

Unixly

Auto-detects seconds vs milliseconds

Binafy

Instant text ↔ binary translation (UTF-8)

Innerlogue

Guided thought record — situation, automatic thought, emotion, and reframe on one screen

Epochly

Live two-way timestamp ↔ date conversion — no convert button, no unit picker first

Huecoat: Wall Paint Preview

Tap-to-select wall detection with an adjustable tolerance slider

Quakescan

Live USGS earthquake data near your location

UUID Forge

Instant v4 UUID generation

Enverra

Zero-based envelope budgeting — give every dollar a job

VisionNest

Arrange photos and worded goals freely on a vision board canvas

Waxshelf

Add records in seconds — cover photo, condition grade, shelf or crate location

TipBeam

One-screen bill, tip & split calculator

Spendjar

A category for every part of your spending, each with its own monthly budget

Yamlite

Instant offline YAML validation

Bandwise

Match a ring you own to find its size

PixScrub

One-tap metadata strip — GPS, camera, date, and software removed instantly

Glance Away

One-tap 20-20-20 eye break timer

Inktag

Live preview as you type

Fastura

Tap once — fast starts instantly, no setup

Peekmeta

Instant full EXIF metadata view

Pixveil

View full EXIF, GPS & IPTC metadata grouped by category

Cairnbar

Menu bar countdown — see time remaining without opening a window

LoanClarity

Instant monthly payment, total interest, and payoff date

Beat Sense

Full-screen tap zone — your entire screen is the button

Tempolo

Listen Mode — real-time BPM detection from any song via the microphone

Decibelly

Live dB SPL meter, updates in real time

Emotidex

Interactive feelings wheel based on Plutchik's model of emotion

GroceryListCategories

HashForge

SoundGauge

Live dB(A) sound level meter, updates in real time

Shelfling

SortaSize

Tap-to-sort gameplay — no dragging for small fingers

Cephalog

One-tap migraine logging in under 10 seconds

Lacquerly

Camera and photo-library matching, not camera-only

Stowline

Smart templates that scale quantities to your trip length

Passphrasely

Random passwords with full character-class control

Papershift

Convert PDF pages to PNG or JPEG images

Pageon

Drag-and-drop page reordering

Practicia

One-tap timer — start practicing instantly, no setup

Wellstreak

One-tap habit logging, no account needed

Barm

One-tap feed logging with smart hydration ratio presets

Stretchcue: Stretching Timer

5 curated stretch routines, ready to go

Tallymood

One-tap logging — a five-level mood grid for the whole year, at a glance

Relo Ready

Countdown timeline auto-organized into 6 move-day phases

Castral

Instant one-tap rolling for all standard dice: d4, d6, d8, d10, d12, d20, d100

Warrantide

Mullion

CardSweep

Scan any business card in seconds with Apple Vision OCR

BreakPoint Number

Instant break-even calculation on every keystroke

TintScout

Sipdash

One-tap logging with quick presets

Cineproof

Live grid preview — drag sliders, see results instantly

Spirio

Three built-in patterns: Box Breathing, 4-7-8, Physiological Sigh

Linkloupe

Instant local link previews via direct Open Graph fetch

ScreenshotTextRedactor

Twinsift

On-device Vision-based near-duplicate detection

IPGlance

Every local address at a glance — Wi-Fi, cellular, hotspot, VPN

SubnetMaskCalculator

Instant IPv4 & IPv6 subnet calculator

Amortio

Instant monthly payment, total interest, and total cost

ConvertKit One

PDF → JPG & PNG — full-resolution page images

Vinculum

Live bidirectional converter — type a number or a roman numeral and watch the other update instantly

Chronoburn

Drag directly on your video to position, resize, and time the clock — no keyframe editor.

Visaframe

Live face-alignment guide with a green in-spec indicator

NetLoom

Instant IPv4 & IPv6 address and CIDR block breakdown

Cinesheet

Live frame grid — drop a video and watch frames appear one by one

Tidyloop

Auto-rotating chore chart

Seamreel: Screenshot Stitcher

Auto-sort by overlap — drop screenshots in any order

TurnSlip

Instant offline queue management

Framecal

Calendar grid — every day filled with photo thumbnails

Isolux

Tactile colour wheel — drag to pick any hue

VerticalHorizontalReframe

GradeArc

5 curve methods including bell curve normalization

Segflow: Lesson Timer

Lesson plans with named, ordered time segments

SplitScreenComparison

Kanjika

JwtDecoder

WingTally Life

Fully offline species search across 350+ North American birds

LivePhotoLooping

Chromaloom

Instant on-device palette extraction from photo or camera

Sixframe

Live 6-platform grid preview

Frameloom

Live multi-platform preview grid

Fillframe

One-tap conversion to 9:16, 1:1, and 16:9 platform presets

DipDrop Counter

One-tap rep counter with haptic feedback

MeditationBreathingDisplay

Bookmarque

Furl

Visual curl command builder

DreamBoardMaker

EmotionalCheckIn

One-tap check-in from the Home Screen or Lock Screen widget

Estimly

One-screen quote builder with live totals

ExifDateBatch

Batch offset by days, hours, and minutes — see every timestamp shift live

GlucoNote

Hourglow

One-click start and stop

Duemark

One-screen invoice editor with live totals

Spokewell

Twelve bridge statements ringing the one belief you are reaching for

Lullcut

Automatic silence detection from the audio waveform, entirely on your Mac

ManifestationPlanner

Markwise

Solve any two of cost, price, markup, margin and profit

MedRhythm

Nexum

Native macOS SwiftUI app — zero Electron or web views

Odometrix

Snap-to-log odometer capture via on-device text recognition

Palette Loom

Pgvista

Pillfold

Build a daily supplement and vitamin checklist

Ipsumly

Exact character-count mode — ask for 160 characters, get 160

Planaura

PlantSip

Overdue, Today, and Upcoming — sorted by what needs water first

PostureReminderTimer

RecipeStepDisplay

Regexly

ScoreNight

Built for Apple TV — swipe the remote to score, no phone required

Shadeframe

One-click dark mode for any website via a Safari toolbar toggle

Nightledger

One-tap sleep timer, no wearable required

Spirave

Box, Equal, and 4-7-8 breathing patterns — tap once and begin

Stridekeep

Live step ring with today's steps, distance, and floors climbed

StitchTally

One giant tap target for split-second counting

Flareline

One-screen quick log — record a symptom in seconds

TallyTable

TuneStrum

Voxen

Live word-by-word highlighting as text is read aloud

Nowscript

On-device phrasing check that keeps every intention in the present tense

Skysill

Full-bleed ambient display that rotates through your saved cities

IpLookout

Goalsize

Target-size compression: set a byte budget and Goalsize hits it

Focalign

Tap to mark a focal point, then scrub through aspect ratio presets with an instant live crop preview

ClipShape

Real-time safe-zone overlay per platform

Dualscope

Frame-accurate synchronized playback

VideoFrameScrubber

Clustereo

On-device visual similarity clustering (Vision) — not just file hashes

Burstsift

CiteWeave

Instant DOI lookup with title, authors, journal, and year

Clipright

Zero re-encode container-level rotation — full quality, original codec, seconds not minutes

Renewio

Track leases, subscriptions, insurance, warranties, and vendor contracts

EnvScope

Secret detection — API keys, tokens, and passwords are flagged and masked automatically

HumanitarianAidSector

FocalPeak: Sharp Frame Finder

Live sharpness waveform while you scrub

Branchsmith

Instant, valid branch names from any task description

NationLedger

Live search across IRS-registered nonprofits

Flossary

Offline DMC ↔ Anchor color cross-reference

EducationCharitiesWorldwide

Lantern Registry

Live search across ProPublica's IRS nonprofit registry

SnapGrep

Instant full-text search across your entire screenshot library

VolunteerOpportunitiesNear

Chalktick

Full-screen projection-ready countdown

Duplifind

Exact & near-duplicate detection — content hashing plus metadata matching

MicrofinancePlatformsWorldwide

Duploop

Exact duplicate detection via cryptographic file hashing

Kinetrace

Live motion heatmap timeline as your video is analyzed

Cruxscale

Instant conversion across YDS, French, UIAA, British, Ewbank, Saxon, V-Scale, and Fontainebleau

DeliverableTracker

Facetile: Avatar Cropper

Face-aware auto-cropping powered by on-device Vision

Freqscope

Precision tone generator — 20 Hz to 2000 Hz, four waveforms

Hashreel

Perceptual video matching finds re-encoded, resized, and trimmed duplicates — not just exact file matches

Homewheel

Longbox Ledger

Track every comic issue you own — series, number, condition, price, and notes

PhotoGpsMap

RampCraft

Interactive Bezier speed-curve editor with draggable keyframes

ReelTessera

Drop a video — instant live preview

Scenecatch

Automatic scene-cut detection powered by on-device Vision

FrameFlux

Turn any video into smooth slow motion

VideoTimestampScrub

Hotkey mark — drop a pin like a lap timer while scrubbing

Cropless

Non-destructive batch fitting — every photo stays fully visible, never cropped

Focalsweep

On-device blur detection, no account or cloud needed

Scrubwave

Multi-factor activity heatmap — combines motion, audio level, face presence, and scene cuts into one timeline

Why a portfolio of small apps?

The orthodox indie-dev advice is to pick one app and grind on it for years. That doesn't match how I work — I get bored after 6-8 months of focused work on a single app. The portfolio model trades compound MRR for the compound interest of staying engaged across years instead of burning out at year 2.

For the long-form version of this argument: 13 Mac & iOS apps, 0 subscriptions.

Selected writing

I write occasionally about Apple-ecosystem tools, indie development, and the practical details of building local-first apps. Highlights:

Get in touch

Best way to reach me is email. I read every message and the next version of every app is built from these conversations.

obeliskclubclub@gmail.com

Press inquiries: subject "Press kit" gets a fast reply with screenshots, icons, and bio.

Indie dev peers comparing notes: subject "Portfolio model" gets a longer reply.

Stay in the loop

New apps and posts ship to the RSS feed. Email reaches me at obeliskclubclub@gmail.com.