Dongli

Dongli

@dongli.aeyo.app

Advertising → AI engineering → solo dev. Founder of Aeyo - the grocery list that maintains itself. Wrote annual slogans and brand campaigns for Audi Finance China.

8 followers20 following40 posts

Pinned

Hello world. Also a charitable description of the project I'm building. I'm Dongli. 12 years in advertising. 30 years shopping. Went back to school for AI. Now writing Swift. More to come — the build, the bugs, the right amount of padding, and the long Victoria light.

A button that tells you where the thing goes is describing its own plumbing. A button that tells you what you're about to lose is describing your decision. I've been writing the first kind for years without noticing.

A tester went to Walmart for three things. Aeyo reminded him of five more. He needed all five. Real shopping is not a hello world project. A list holds what you typed. Everything it does not hold, you hold. Whatever an app doesn't handle for you, it loads onto your mind.

Almost every good idea in software already exists somewhere. Frequency tracking lives in habit apps. Crowdsourced metadata lives inside every large store. What's rare is refusing to hand a person work the system could have done itself. That refusal isn't a feature. It decides everything after it.

We decided somewhere that software should greet you with a form. Name, email, a password you'll forget, a box to uncheck. None of that was ever for you. A tool that respects you doesn't ask who you are — the system you already trust has told it.

Most dashboards are a grid of gauges, half of them empty, all of them reminding you they exist. The honest version breathes: a section appears when it has something to say and leaves when it doesn't. An interface can be alive without performing aliveness.

Shipped a full day of product work today: one new field, one accessor, four deletions. Nothing new on any screen. What changed: a checked-off item can no longer come back tomorrow claiming it's overdue. The most valuable day of the release, and there is nothing to screenshot.

When two people share a list, every device becomes a witness. The loudest witness usually rewrite the story. The honest version is quieter: things happen once, on a date — everything after that is retelling.

Every list app I tried gave me a nicer place to write things down. The writing was never the job. The job is the quiet tally — what's low, what's due, what someone will want the day after it's too late. A tool that keeps the list but not the count keeps almost nothing.

Many apps punish you for leaving. Come back after a month and there's a wall of overdue, a stack of red, a pile of small guilts you didn't earn. But forgetting isn't failure — it's just being a person. The honest design lets you walk back in and feel nothing. Calm is a feature. Guilt is a bug.

Designing for the ADHD brain isn't charity — it's a higher bar. Fewer decisions, no timers, one obvious path: those are taxes everyone pays, just below the line where most people notice. Build for the most-taxed and you raise the floor for all of them.

Doing the right thing once is just a mood. Making the next permission ask in my app prove it can't be engineered around — in the same code review, in writing — is the part that survives forgetting. Good intentions don't compile. Rules do.

Spent the past few days closing the parts of my app where refusing a permission silently broke things. Search. Onboarding. Store add. Shopping mode. The fixes had nothing in common except this: treat refusal as a constraint, not an exception.

Some gaps are physics. Cross-device sync needs an identity — no engineering trick gets you sync without one. Lock-screen alerts need the notification permission, by definition. The honest move is being precise about which gaps are physics and which are choices. Most are choices.

"Trust us, we're the good guys" leaves your right contingent on a vendor's character. The structural move is different: even an app you fully trust shouldn't make refusal costly. Right-with-a-cost is coercion in slow motion.

Watched someone install something I built. They said no to most permissions. My first reaction was worry — will it work properly for them. That's the wrong worry. The user is the constant; the app is the variable. A right that costs you the app was never a right.

Squid eggs in a tide pool. The whole cluster sways with the water like it's breathing. Stood there a lot longer than I planned to.

Some part of your attention never fully leaves the grocery store. It keeps a running tally — what's low, what's nearly out, what someone will ask for the day after it's too late. You never agreed to run it. You just always have.

Yes, that link has tags on it. They're just labels my own server reads. No SDK. Nothing phoning anyone. Turns out you can see what's working without renting it from a third party.

You are up to date.