Snack Cart POS
Why an ESP32-S3
I picked the S3 because I wanted headroom — for driving the screen and for having enough processing power left over that I wouldn’t be fighting the chip the whole build. WiFi was non-negotiable too; I wanted an interface where the owner could log in, verify payments went through, and adjust prices and inventory without touching the device itself. The S3 is probably overkill in some areas, but at this scale the cost delta between “just enough” and “plenty of headroom” is a couple of dollars, so it was an easy call.
For the screen I just picked a cheap, big display. 3.5“ ended up being the sweet spot — it’s not an exceptionally crisp panel, but it does the job well for a few dollars.
Changes along the way

Touch → buttons. I originally planned to drive the whole interface off the touchscreen, but the input lag was annoying enough that I scrapped it. I built a simple tactile button bank instead and color-coded the buttons so each one’s function is fairly intuitive at a glance.

Database → SD card. I tried to keep the database on the S3 itself, but kept running into partitioning issues on the chip. I switched to a cheap SD card I already had lying around — and since the display module came with a built-in SD reader, adding it was basically free and saved a lot of headaches trying to force the DB to work on the S3’s flash.
Real-time clock. I considered skipping a hardware clock entirely, but worried about losing power and the clock resetting — the owner might go weeks between admin logins, so timestamp accuracy actually matters here. I grabbed a DS3231 I had on hand. The chip turned out to be the wide-body SOP16 package, which was an oversight on my part — I didn’t have an adapter for it, and I didn’t want to spin up a custom board just for a couple of chips. So I used a SOP14 adapter board I had and just overhung a couple of the N.C. pins.

Software
Built on PlatformIO/Arduino with LVGL 8 driving the UI, and a SQLite database on the SD card tracking users, items, checkouts, and line items. A built-in WiFi access point serves a lightweight admin dashboard — Home, Balance, Items, Report, Users, and Admin tabs — for editing inventory, clearing balances, and pulling lifetime totals, no companion app required.
Where it’s at

Splash screen, screensaver (hand-drawn dancing fish mascot, rising bubbles), badge enrollment, and the full six-page web admin are built and working. Still open:
- POS/transaction screen — the actual checkout flow. Biggest remaining gap; currently just a stub.
- Real-time clock wiring — chip is soldered to its adapter; pull-ups, decoupling cap, and battery wiring still need finishing, and the software side (sync on boot, NTP correction) isn’t written yet.
- Physical enclosure — walnut + PETG build hasn’t started.
- Auth on the web admin — currently gated only by the WiFi AP password, no login yet.