AIDEA Weekly
한국어

↑↓ Enter Esc

Building Strayling

2026-11-01, updated 2026-11-02. Claude put this together from the repositories and work logs.

Take a photo of an animal you meet on the street, and the phone cuts out just that animal and turns it into a photo sticker. It goes into your sticker book and onto the neighborhood map. I wrote this from the repository's code, docs and git history (main, as of November 2, 2026).

Naming a cut-out stickerNeighborhood map with animal stickers on it
Screens from the Google Play listing.

What it does

How the cut-out works

Android uses ML Kit Subject Segmentation, and iOS 17 and later uses Vision. Both run on the phone. The photo goes in as a 1024px JPEG with EXIF removed, and only the largest subject and its largest connected region are kept. Then the filter, a white border and a shadow are applied, and it is saved as 512px and 160px WebP. Quality steps down through 0.86, 0.75 and 0.6 until the files fit the 300KB and 48KB caps.

On Android the processing limit is 15 seconds. If the cut-out area is under 2% or the cut-out fails, the middle 80% becomes a square photo card. Since this card includes the background, it is locked as private and only you can see it.

How Strayling handles photos and location. Take a photo, cut it out on the phone, turn coordinates into a neighborhood cell, then upload the sticker to the map.
Coordinates and original photos never go to the server. Source: Strayling docs/PRODUCT.md

Map and location

The phone turns coordinates into an H3 resolution 8 cell ID before sending them. The map groups cells at resolution 8 at zoom 13 or higher, 6 at 10 or higher, 4 at 6 or higher, and 2 when zoomed out further. Up to 400 cells at a time, with 3 thumbnails per cell.

On November 2, 2026, I narrowed what other people can see. That date is from the repository commits. Owners still see everything.

What other people can see. New cards show only in a wider cell for the first 6 hours, meetings show after 6 hours, times show as dates only, and pets always show in a wider cell with no name.
Rules after the November 2, 2026 change. Source: Strayling docs/PRODUCT.md

Structure

Strayling structure. The Expo app calls a Next.js API, data is stored in PostgreSQL, and stickers are served through S3 and CloudFront.
Source: Strayling README and docs/PLAN.md

Where AI is used

The server uses only Claude, and the default model is from the Haiku line. It is used for name and species suggestions, finding the same animal, speech bubbles, comment translation, diary drafts, opinions on reports, summarizing reviews and so on. Only the sticker and text are sent. Camera photos, exact locations and accounts are not. If a call fails, only that feature is skipped. Opinions on reports are for reference, and a person makes the decision.

How it was built

Problems I ran into

Tools and numbers

I used Claude Code for development. This is based on the Co-Authored-By lines in commits and does not mean a share of the work. The docs say Aside was used for making and checking images.

ItemValue
Commits713 (2026-10-04 to 11-02)
PR numbersUp to #354
Claude co-author lines419 lines
Server test files94
App version0.1.5
AppExpo 57, React Native 0.86
ServerNext.js 16, Drizzle, PostgreSQL

The test file count is a count of files. I did not run the tests while writing this.

Next

The items in the docs are push notifications and the next native build, real-time chat in the neighborhood lounge, removing compatibility code for old app versions, and iOS universal links. No dates are given.