Joseph D. Smith

Selected work

I build products and the systems behind them.

I lead Product at DDC Public Affairs, where my team runs software for advocacy, PAC management, compliance, communications, and reporting.

Outside DDC, I build iPhone apps, developer tools, distributed systems, firmware, and experiments in artificial life.

01Current role

DDC

Software for running public-affairs programs.

I lead Product at DDC Public Affairs, an Omnicom company. Our platform serves more than 360 clients across 430 websites, joining advocacy, PAC management, communications, compliance, and reporting around one client record. View the experience ↗

Most public-affairs programs are split across several vendors. DDC brings the CRM, PAC website, advocacy tools, email, compliance, and reporting into one platform, with one client record underneath it.

My job covers product strategy, design, engineering priorities, security, client experience, and the business behind the products. The platform supports more than 360 clients and 430 websites, including heavily regulated companies that put us through more than 300 security reviews each year.

The work is often less glamorous than a new feature: enforcing legal contribution limits, generating payroll files correctly, keeping constituent targeting accurate, moving legacy systems into Azure, and making hundreds of sites manageable by a small team. That reliability is the product.

I have also led our work on personalization and AI. We built shared rules for dynamic content, a permission-aware AI orchestration layer, and internal operating tools that turn repeatable agency work into documented workflows.

Democracy Direct®
01 — Democracy Direct®PAC receipts, disbursements, payroll deductions, contributor history, and legal limits in the same CRM. Filing and reconciliation happen in the system instead of a separate spreadsheet.
Capitol Connect®
02 — Capitol Connect®The advocacy platform supports letters, calls, social posts, and regulatory comments. VerifiedConstituent confirms that a sender lives in the district before the message reaches an office.

Role

SVP of Product · current

Platform

Democracy Direct® · PACWeb® · Capitol Connect®

Under management

430+ websites · 360+ clients

Assurance

300+ enterprise security audits a year

02Portfolio · Artificial life

Loom.haus

Searching simulated physics for signs of life.

Loom evolves the physical rules of small simulated universes, then measures whether stable structures form, reproduce, and pass recognizable traits to their descendants. View the experience ↗

Each universe contains two complex fields on a torus. They evolve under the Gross–Pitaevskii equation, a nonlinear form of the Schrödinger equation used for quantum matter waves.

The search changes physical constants such as mass, coupling, damping, and drive. The question is simple: which combinations allow persistent structures to form, split, and pass recognizable structure to descendants?

The difficult part is measurement. A spreading wave can look like reproduction, so Loom only counts an event when descendants separate, persist, and remain more similar to their parent than to unrelated structures. The system has observed many fissions, but no confirmed inheritance yet.

Live — loom.hausThe live simulation. Brightness shows density and hue shows phase. The overlay tracks active area, excitations, packets, fissions, inherited structure, and heterogeneity.

What it is

Artificial-life research platform

Engine

Gross–Pitaevskii · Visscher staggered leapfrog

Physics as data

Planck · mass · 3 couplings · damping · drive

03Portfolio · iOS · agent tooling

Page

An inbox shared by your devices and agents.

Page saves notes, decisions, reminders, and questions from any terminal or agent. They appear on your phone immediately and remain available to later sessions on other machines. a-gnt.com/page ↗

The problem it solves is unglamorous. You are three hops into an SSH session and you work something out worth keeping. Getting it anywhere useful means selecting it out of a terminal that reflows, mailing it to yourself, or dropping it in a scratch file that is gone by Friday. Copy and paste does not cross machines, and it does not cross sessions at all — the session that made the decision ends, and the decision goes with it.

Page replaces that with one command. `page "rate limiter: token bucket per API key, not per IP"` and it is stored, not merely delivered. On Friday, from a different machine, `pager_list()` hands it back. The CLI and the MCP server write to the same inbox, so an agent saves what it figured out and a later agent reads it, without either of them going through you.

Every page is one of four typed objects — a note, a reminder, an update, or a question — so the inbox reads like a briefing instead of a feed. The iPhone app reads the day as a timeline, as a tree grouped by the machine that wrote it, or by project. On iPad it opens like Mail, list beside page.

The walking-away part came out of the same design and turned out to be the demo people remember. A question carries answer buttons. `page ask "Deploy?" --choices "Ship,Review"` blocks in the shell until you tap, then prints your choice to stdout, so an agent can hand you a decision and wait while you are nowhere near the desk.

Page content is encrypted at rest with AES-256-GCM, a random IV per value and an authentication tag, so a stolen disk image yields ciphertext. Tokens are stored as hashes, the sign-in token rides in a URL fragment so it never reaches a log, and App Store receipts are verified against Apple’s root with verification failing closed.

Timeline
01 — TimelineThe day in order. A question that is blocking a terminal is the loudest thing on the screen, because somewhere a process is still waiting on it.
A question
02 — A questionMarkdown rendered properly, logs collapsed until opened, and the answer buttons the agent supplied. Tapping one unblocks the shell that asked.
Tree
03 — TreeThe same inbox by provenance — host, then type. Twelve machines is a triage problem, not a reading problem.
Pro
04 — ProThe inbox and email delivery are free. Push, SMS, and answering a question from the notification are the paid tier.

What it is

One inbox for every machine and session · iOS

Surfaces

iPhone · iPad · CLI · MCP server · web

Server

Node stdlib only · zero dependencies · SQLite

04Portfolio · Developer tool

Gauge

Local usage accounting for coding agents.

Gauge reads the transcripts Claude Code and Codex already store on disk, then reports token use and API-equivalent cost by project, session, model, day, and five-hour window. View the experience ↗

Coding agents can spend time and money in the background at a rate nobody can see, and the standard interface for that is a spinner. Subscriptions give a flat number and then a wall: no per-project accounting, no way to look at a week and say which piece was expensive.

The data is already on the machine. Both tools write full transcripts as they run — every request, every response, every token — and Gauge simply adds them up. Nothing leaves the machine: no account, no telemetry, no server to send anything to.

The finding that surprised me most is about subagents. Their transcripts nest deeply enough that a tool walking the obvious directory misses most of the work; in testing, roughly half the spend was down there. The by-model slice ends the routing argument too, because some of what gets sent to the heavy model is genuinely hard and some of it is a file rename.

The dollars are API-list-equivalent — what the usage would cost at published API rates — not a subscription bill. Subscription plans do not publish their quota mechanics, so anyone claiming to convert one into the other is guessing. It is an odometer, not a receipt.

One command, the whole picture
01 — One command, the whole pictureThe install line is the install. Spend by five-hour window, by project, and by model, read from transcripts already sitting on the disk.

What it is

Local usage meter for coding agents

Run it

npx github:joey-io/gauge

Slices

Project · session · model · day · 5-hour window

Privacy

Reads local transcripts · nothing leaves the machine

License

MIT · optional $3 supporter license

05Portfolio · iOS · protocol

be here

A local social network carried by nearby phones.

be here moves posts and messages directly between nearby phones over Bluetooth. It needs no account, central server, or internet connection. Download on the App Store ↗

Posts, profiles, walls, group chats, and private messages move directly between nearby phones over Bluetooth. Each phone also relays what it hears, so a crowded room becomes one network and a neighborhood carries its own conversation from person to person.

The network belongs to the people who are present. Its history is stored on their phones rather than in a company’s cloud. Identity comes from a keypair that never leaves the device, private messages are encrypted, and the identifier a phone broadcasts changes every 15 minutes.

The protocol is written once in Rust and used by both the iPhone app and browser demo. It has been tested against dropped packets, crowded radio space, people coming and going, and fake identities. In a simulated stadium of 800 phones, one post required about 180 transmissions instead of 24,600.

Where this goes: anywhere you are, you open the app and the place comes alive around you. Neighbors, farmers-market vendors, shops and restaurants, the community association, the fire department — whoever is nearby can broadcast to the phones around them, and the people holding those phones can follow events, catch specials and offers, chat, and trade, all over the local mesh, off the grid, with no accounts and every message encrypted end to end. Version one is on the App Store; version two launches the first off-grid neighborhood.

Here
01 — HereThe feed everyone around you shares. Every post is signed, flooded to the phones in range, and kept by the phones that saw it.
Places
02 — PlacesShops and venues broadcast their own profile from the counter. Hours and details survive the moment the internet does not.
People
03 — PeopleAny phone nearby. Tapping a name asks the room for their profile; nothing is pushed at you.
First launch
04 — First launchThe premise, stated at the door: the people who can hear you are the people near you.

What it is

Serverless proximity social network · iOS

Operating range

A hop is ~10–60 m · relayed onward by every phone · neighborhoods at walking pace

Core

Rust protocol library · Noise encryption · rotating identifiers

Status

v1 on the App Store · v2 launches the first off-grid neighborhood

06Portfolio · iOS · simulation

Emergent.D

A planet-building game governed by one simulation.

Emergent.D lets players sculpt terrain, move water, grow life, and mine resources on a simulated planet. Every action changes the same physical world and its future capacity to recover. View the experience ↗

The core is a fluid and particle simulation built in Metal. Terrain, rivers, ice, clouds, and vegetation respond to the same world state rather than running as separate visual effects.

The economy is tied to the simulation. Mining produces gold but damages the ecosystem that makes future mining possible. Satellites use real orbital parameters and affect only the ground they pass over.

The browser version uses React, Three.js, WebGPU, and a WebGL2 fallback. Each persistent planet has an authoritative server process that hibernates when empty and advances the world while players are away.

Gold is controlled by the server through an append-only ledger. Player actions are sent as compact brush operations and replayed for verification, while arcade scores that award currency are checked server-side.

Terra Prime
01 — Terra PrimeThe browser build with named geography, orbital scale, chat, and the complete terrain tool set.
Characters
02 — CharactersAbout three dozen characters are part of the world rather than dressing on it. They hold their own profiles, worlds, leaderboard records, and voices, they engage with one another, and each of them remembers what a given player has done with them — so a separate history accumulates for every relationship, and the game a player ends up in is shaped by who they have spent time with. Shared character data is cached globally; only that per-player history is stored apart.
Terraforming
03 — TerraformingThe Metal simulation produces terrain, water, ice, clouds, and rivers from one world model. The energy budget across the top limits sculpting and mining.
Satellite shop
04 — Satellite shopThe collection includes 107 cards based on real satellites and missions. Their game effects are tied to the work each satellite actually performed.
Cosmic Arcade
05 — Cosmic ArcadeA set of arcade games that provide another way to earn gold. Payouts are capped and scores are verified by the server.

What it is

iOS simulation game · released Feb 2026

Engine

Metal fluid & particle simulation

07Portfolio · iOS · civic

Touch Advocacy

A simpler way to call and write Congress.

Touch starts with your representatives and two actions: call or write. It removes the terminology and onboarding that make civic participation feel reserved for professionals. Download on the App Store ↗

The app starts with the people who represent you and two familiar actions: call or write. It removes the jargon, issue catalogs, forms, and long onboarding flows that make advocacy feel like something reserved for professionals.

On-device Apple Intelligence helps people understand bills and campaign finance in plain language. Survey results and Census data add context about public opinion and the communities affected, so people can decide what matters to them before taking action.

Verified location connects each person to the correct district and representatives. Calls and messages move through the tools people already know, while Touch records completed actions without requiring an extra confirmation step.

Ranks, badges, and streaks keep people engaged and help occasional participation become a regular civic habit. Only completed actions count, so the system rewards real participation rather than taps inside the app.

Touch Advocacy
01 — Touch AdvocacyApp icon.
Your representatives
02 — Your representativesThe first screen shows who represents you, how to reach them, and your voter-registration status without requiring you to understand congressional districts or advocacy software.
Ranks and badges
03 — Ranks and badgesCompleted calls and messages build ranks, badges, and streaks that encourage people to stay involved over time.
American Zeitgeist
04 — American ZeitgeistSurvey results, Census data, prices, presidential administrations, and major legislation provide context for the issues shaping American life.

What it is

Accessible civic participation for iPhone

Context

On-device Apple Intelligence · surveys · Census data

Participation

Verified location · calls · messages · civic streaks

08Portfolio · Production system

Monday Draft

A production system for recurring client work.

Monday Draft connects local AI agents to briefs, source material, review, approval, delivery, and measurement. Each completed cycle informs the next one.

Most AI content tools stop after generating a draft. Monday Draft keeps the context around the work: the brand, market, template, source material, review history, performance, and what should change next time.

A local agent runtime produces typed artifacts. The web app handles client onboarding, review, approval, billing, and delivery. Quality gates can send weak work back through the run instead of simply flagging it.

Modules can publish independently, and each cycle feeds its results into the next brief. The goal is not more content. It is a production system that becomes more useful with each week.

One week across every market
01 — One week across every market
Monday Draft
02 — Monday DraftIdentity.
Production console
03 — Production consoleOne view for reviewing a week of work across 27 businesses. Each item keeps its version history, approval state, and feedback.

What it is

AI-native production system for client deliverables

Shape

Local agent runtime + web app as one pipeline

First-class

Brands · locations · artifacts · runs · approvals · memory

The loop

Brief → produce → QA gate → review → approve → measure

09Portfolio · iOS · game

Jimothy Jump

A one-day iPhone game about a real Seattle raccoon.

Jimothy Jump is an endless runner based on the short-spined raccoon that became an internet celebrity in 2026. The game, artwork, website, localized store listing, and submission were completed in one day. jimothyjump.com ↗

The character and setting follow the real story: a raccoon with short-spine syndrome and the Seattle backyards he was filmed in. Mt. Rainier sits on the horizon, the Space Needle appears in the skyline, and the fences vary among weathered wood, chain-link, and picket, each at its own height.

All art is generated in code: jittered vector paths for a cut-paper edge, layered drop shadows, and a grain pass. The app ships no drawn assets, and the icon is produced by a script from the same toolkit. Player movement uses hand-written physics with rectangle collision after SpriteKit’s body simulation proved unreliable for this design.

One tap jumps and a second tap double-jumps; distance is the score. Game Center provides leaderboards for longest run and burgers collected in a run. The game, the marketing site, and an App Store listing localized in English, Japanese, and Simplified Chinese went from nothing to submitted in one day.

Title
01 — TitleThe title screen over a generated skyline: chimneys, firs, and drizzle at dusk.
Mid-run
02 — Mid-runFence segments vary in height; gaps require a jump or a mid-air double jump.
Store screenshot
03 — Store screenshotMarketing screenshots are composed by script: framed device, headline, card-stock ground.
App icon
04 — App iconDrawn by a CoreGraphics script from the same papercut toolkit as the game.
The character
05 — The characterRendered from the game itself: the walk cycle and jump pose export as transparent frames, which the website reuses for its animation.

What it is

iOS endless runner · in App Review

Setting

Papercut Seattle · Rainier · Space Needle

Art

All shapes generated in code

10Portfolio · iOS · mindfulness

Amieeba

A private digital fidget toy.

Amieeba combines fluid motion, sound, and haptics for repetitive sensory play on iPhone and iPad. It costs 99 cents and has no advertising, subscription, account, or data collection. Download on the App Store ↗

The experience is built around sensory play rather than competition. You stretch, split, merge, and reshape a fluid form while bubbles respond with crisp sound and a satisfying haptic click.

The score and timer provide a light rhythm to the session, not a game to win. As the screen fills and rewards build, pressing and holding releases the form in an explosion of fluid motion—a digital exhale before starting again.

Amieeba is designed as a safe, calming break for adults and children. It has no advertising, no subscription, and collects no data. The app costs $0.99 once.

Amieeba
01 — AmieebaA private, ad-free digital fidget toy built from fluid physics, sound, and haptics.
Amieeba — Digital Slime
02 — Amieeba — Digital SlimeApp icon.
Sensory play
03 — Sensory playStretching, splitting, merging, and popping bubbles occupy restless hands without demanding sustained attention.
Digital exhale
04 — Digital exhalePress and hold to release the accumulated form in an explosion of fluid motion, then begin again.
Reclaim your focus
05 — Reclaim your focusA score and timer add a gentle rhythm while the experience remains non-competitive and focused on mindfulness.

What it is

Mindful digital fidget toy · $0.99, once

Built with

Fluid physics · Core Haptics · spatial audio

Privacy

No ads · no account · no data collection

11Portfolio · iOS · art discovery

Oodl.ai

An art feed built from museum collections.

Oodl brings more than 100,000 open-access works from four museums into a simple iPhone feed. Recommendations run on the device, and every work retains its source, credit, and license. Download on the App Store ↗

The app includes more than 100,000 works from the Met, the Art Institute of Chicago, the Cleveland Museum of Art, and the National Gallery of Denmark. Swipe up for another work or sideways to change collections.

Saved works shape recommendations on the device. You can also add your own photographs, identify subjects locally, and generate a short description without creating an account.

Every museum work keeps its credit, license, and link to the source collection. The app is free and does not include advertising or collect a personal profile.

Oodl.ai
01 — Oodl.aiApp icon.
Van Gogh · Cleveland
02 — Van Gogh · ClevelandVincent van Gogh’s Two Poplars in the Alpilles, 1889. Each work includes its museum, credit, license, and source link.
Collection view
03 — Collection viewBrowse all works, saved works, a channel, or one museum collection. Recommendations are built on the device.

What it is

iOS art discovery · free

Collection

100,000+ open-access works, four museums

12Portfolio · AI discovery

a-gnt

A browsable catalog of AI tools.

a-gnt organizes thousands of prompts, agents, games, personalities, and MCP servers by what they help someone accomplish. View the experience ↗

The catalog contains thousands of tools grouped by what a person is trying to accomplish rather than by technical format.

People can save tools into a personal library, combine them into shared collections called benches, and reach them from supported AI clients through the a-gnt MCP server.

The product is aimed at people who are interested but not yet fluent: families, teachers, students, and people changing careers.

a-gnt
01 — a-gntIdentity.
Catalog
02 — CatalogTools are organized by the job a person wants to do, with separate counts for tools and MCP servers.
Kids collection
03 — Kids collectionA separate collection of age-appropriate creative tools designed to support play rather than replace it.
Community bench
04 — Community benchA bench is a saved collection of tools assembled and shared by a person.

What it is

Curated discovery platform for AI tools

Catalog

3,500+ tools · 2,200+ MCP servers

Reach it from

Claude · ChatGPT · a-gnt MCP server

13Portfolio · Data substrate

Atomic

A relational application kernel built around one record type.

Atomic represents models, data, identities, permissions, queries, and logs with the same structure. From those records it derives interfaces, validation, APIs, imports, and audit history. View on GitHub ↗

Every record uses the same atom shape. Models, data, identities, permissions, queries, and logs are represented through that structure instead of separate subsystems.

From those models Atomic derives validation, forms, REST endpoints, imports, exports, tenant boundaries, and audit behavior. Relationships and reverse references are part of the core rather than added later.

The practical goal is to keep the ease of a lightweight database tool while giving the application a foundation that can handle connected data without collapsing into special cases.

atom://0
01 — atom://0The root atom viewed through the interface generated by the same model system. Schema, data, identity, permissions, and logs all use the shared record shape.
Reverse references
02 — Reverse referencesA record with everything that points to it resolved automatically. The form is generated from the model.

What it is

Graph-relational data substrate

The idea

The ease of Airtable on a relational foundation

14Portfolio · Reasoning layer

Atomic Reason

A logic engine that identifies missing evidence.

Atomic Reason evaluates evidence against a stated goal. It reports which required questions are answered, unresolved, disputed, or contradicted.

A slot represents a question required by the goal. Assertions provide possible answers and evidence. Folding those assertions produces one of five states: known, pending, gap, tension, or contradiction.

Understanding is the share of required slots that are known. The remaining slots become a prioritized worklist instead of being hidden behind a confidence score.

The goal determines which questions matter. Domain-specific rules for required slots and incompatible answers are injected, so the same engine can be used with different kinds of evidence.

understand(store, goal)
01 — understand(store, goal)The core function turns required questions into slots, folds the evidence for each slot, and returns known over required with a worklist for everything unresolved.

What it is

Pure-logic reasoner over evidence records

The formula

Understanding = f(Evidence, Relationships, Time, Context, Goal)

Slot states

known · pending · gap · tension · contradiction

Interface

Zero-dependency stdio MCP server

15Portfolio · Public affairs data

pac.dog

Open political data without the commercial interface.

pac.dog joins campaign-finance, committee, enforcement, and legislative records into a free website, open dataset, and MCP server. View the experience ↗

The underlying records are public, but using them usually requires downloading separate files, learning different schemas, and paying for a commercial interface. pac.dog models the records together and makes the relationships navigable.

The site includes committee filings, contributions, disbursements, votes, enforcement records, compliance material, and links back to original sources. An MCP interface lets an AI client query the same modeled data.

The bulk data used by the site is published openly, refreshed nightly, and available without an API key or rate limit.

Money and contributors by cycle
01 — Money and contributors by cycleReceipts and disbursements use each committee’s filed totals. Contributor counts are based on itemized receipts over $200 and are labeled as minimums rather than complete totals.
Open bulk data
02 — Open bulk dataThe modeled source data is published under an open license, refreshed nightly, and includes provenance for each record.

What it is

Free and open public affairs data platform

Interface

Web · MCP server

16Portfolio · Earth observation

Obsat

Twenty-four sources queried from one coordinate.

Obsat asks weather, mapping, satellite, environmental, demographic, and scientific providers what they know about a location. It runs locally and preserves the source and raw response behind every result. View on GitHub ↗

Twenty-four adapters ship with it, covering reverse geocoding, Census geographies, Sentinel and Landsat scene catalogs, ground elevation, weather, air quality, river discharge, earthquakes, species occurrence records, and EPA enforcement history. Twenty of them need no API key.

Every provider is normalized to the same record. An observation keeps its identifier, source, timestamp, geometry, properties, a link back to the provider, attribution, and the untouched response, so a result can be traced rather than trusted.

A provider that is down puts its error in the errors array and the remaining adapters still return. An adapter whose key is not set is held back before the request is made and reported as skipped, so a missing credential never reads as an outage.

The same runtime is a library, a command-line tool, and a local MCP server, so an AI client can probe a coordinate and reason from records that carry their own provenance.

obsat.probe()Ready
await obsat.probe({
  lat: 38.9847,
  lon: -77.0947,
  radiusKm: 10
})
38.9847, -77.094723 adapters registered
Live — obsat.probe()A live probe of one coordinate in Bethesda, Maryland. Press the button and this site runs Obsat against twenty-three sources: everything the package ships apart from two public endpoints too rate-limited to answer from a shared host, plus one registered here for Census demographics. Everything that comes back is printed: all fifty-odd observations, each carrying the untouched provider response it was built from, which runs to about ten thousand lines.

What it is

Local-first Earth-observation runtime

Sources

24 adapters · 20 need no key

Interfaces

Library · CLI · local MCP server

Download this portfolio as a PDF