Hosaka Computer

A little square screen for your desk

The Hosaka Computer is a small desk display that sits on a shelf and rotates through apps -- a clock, the weather, photographs and more.

480 × 480 Adorable Does Not Bite Silent Wi-Fi
about the size
of a coaster
The Hosaka panel: an 86.5 mm square display, 12 mm thick, with a USB-C port on the bottom edge
86.5 mm square, 12 mm thick, USB-C powered. The screen is the whole front.
Apps
Clock app: 07:37, Friday, August 28

clock local

Big-ass digital clock with the date beneath, 12- or 24-hour, in the device's time zone. Refreshes on the minute.

Weather app: sun icon, 59°F, mostly clear, Portland

weather live

Current conditions: temperature, conditions, place name. One per city if you like.

Moon app: the full Moon rendered from albedo and elevation maps

moon local

The motherfucking fucking moon: phase, libration and tilt

Gallery app: Lanyon Quoit dolmen at sunset

gallery stash

Upload images, even animated GIFs play

Catcam app: a kitchen seen from floor level, 18:59

catcam live

Note: Cat may not be present. Check local showtimes.

xcap app: a captured xscreensaver segment of blue and purple bands

xcap anim

A captured xscreensaver segment, played as a looping animation.

Emoji app: man facepalming

emoji stash

One large random emoji

Stamps app: a Spanish 1.50 peseta stamp

stamps stash

Random postage stamp

frog.tips

frog tipslive

ribbit

Weather radar

nexrad anim

animated weather radar for a window around the device with weather alerts

What's overhead?

overhead anim

Planes above me

year %

year local

Year % complete

Mugs app: a yellow mug reading 'a penny saved… is not enough!'

mugs stash

Mugs from eBay

Simpsons app: a frame-grab of two fortune-telling barrels

simpsons stash

Frame-grab from The Simpsons

Roadside app: a red mid-century Chinese restaurant on an empty lot

roadside stash

Public domain photographs from the John Margolies roadside america archive in the library of congress

Rural app: a small-town storefront, the Forget-Me-Not Senior Center

rural stash

Photographs from the Rural Indexing project

Commercials app: a still from a 1990s Pizza Hut X-Men ad

commercials stash

Retro TV commercial stills

Fruit app: a watercolour of a halved Bartlett pear

fruit stash

Random images from the Pomological Watercolor Collection in the USDA's national agricultural library

Test pattern app: eight colour bars

testpattern local

Calibration cards: colour bars, type-size ladder, gradient ramps, geometry grid

Calendar

calendar local

it's a calendar, what else could you possibly want

Discord

discord local

Discord member count

Gradient Clock

gradient clock local

Animated clock background

Hilbert Clock

hilbert clock local

Another pretty little clock

Also on the list, no picture

  • note -- a short block of text in a choice of size, weight, colour and background
  • wallpaper -- upload your cat pictures
  • world clock -- choose 4 locations, show time + day/night
  • what's my IP address? -- with map, hostname and ISP info
  • year % complete -- two decimal points! two!
  • system -- the device's own health as a dense spec sheet

Coming Soon

  • now playing -- maybe via last.fm?
  • chat -- a very stupid chat system
  • steam -- who's playing what
  • space -- Astronomy Picture of the Day, etc
  • tempest weather station -- hyper-local weather
  • tides -- courtesy of NOAA
  • earthquakes -- set a radius + threshold
  • air quality -- courtesy of waqi.info
  • webcomics -- let's agree to just call them "comics" from now on
  • radio station schedules -- now playing etc
  • museum art -- The Met, Art Institute of Chicago, Rijksmuseum
  • discord++ -- who's online, who's in voice chat
  • literature clock -- the blurst of times??
  • magic 8-ball -- opens the door to interactive apps
  • custom apps
Setup
Wifi setup

wifi local

WiFi setup screen

Keyboard

keyboard local

On-device keyboard

Keyboard symbols

symbols local

Available symbols on keyboard

Device

device settings local

As seen in first-time setup screen

How it works

Deliberately Dumb

Every picture is drawn on the server side. All the hardware does is request the next image to show on a cadence, looping forever

1

Ask

The device fetches /frame over HTTP, sending its ID and a one-line health report

2

Draw

The server looks at the device's rotation, works out which app is up from the clock, renders a 480×480 PNG -- usually a few kilobytes -- and sends it back

3

Dwell

Put 'em on the glass, girl

Features

What It Do

It's a Tidbyt but instead of 64x32 we get 480x480.

A settings page for the owner, no login

Every device gets its own page where you can add and remove apps, tweak settings (location, time zone, temperature scale, brightness, quiet hours) and see a live preview.

A rotation per device

An ordered list of apps, each shown for n seconds. Some apps can appear more than once -- weather in two cities, several notes.

Stashes

A stash is a named slot holding one picture. Anything that can make an HTTP PUT can post to it, and the matching app on the panel shows whatever was posted last.

Text and share links

A stash can also hold a short block of text -- "today's menu", a message wall, whatever you want to post.

Interrupts

A stash can be flagged so that a new post takes the panel for 30 seconds regardless of where the rotation is, then hands back. Used to keep the clock up to date + apps like "Spotify Now Playing".

Touch

Swipe left or right to move through the rotation. Long-press for on-device menu.

On-device Wi-Fi setup

A panel with no credentials scans for networks, lists them with signal bars, and gives you an on-screen keyboard for the password: 1

Animation

Apps can return a short looping GIF clip.

Telemetry

Every poll carries uptime, free memory, Wi-Fi signal, die temperature and failure counts. The panel can even show its own health as an app.

Hardware

Tech Specs

For the nerds in my life

The panel

Board
Guition ESP32-4848S040 -- an ESP32-S3 with 16 MB flash and 8 MB PSRAM, sold as a bare board with the screen attached
Display
480×480 ST7701 IPS LCD, ~170 ppi, on a 16-bit parallel RGB bus. RGB565 colour: 65,536 colours and no smooth gradients
Touch
GT911 capacitive. Taps, swipes and long presses are the whole input surface -- no buttons
Backlight
PWM-dimmable in ten levels; boots at 65%. Adjustable from device display or web
Firmware
Arduino framework via PlatformIO. Arduino_GFX drives the panel; PNGdec decodes each frame a line at a time so it never needs a second full-size buffer
Size
86.5 mm square, 12 mm thick. USB-C power

The server

Binary
One Go program, hosakad, renders frames, serves the owner pages and takes stash uploads
Storage
A MariaDB database for devices, rotations and telemetry; pictures live as files on disk
Wire
HTTPS
Network
Anywhere from 10MB - 300MB/day depending on apps
Bench
Tools for minting device identities and stash tokens; Serial console on the panel dumps and seeds settings, adjusts the backlight and dumps the framebuffer
Origin Story

I love my Tidbyt but its days are numbered.

🤖 🤖 Full Disclosure 🤖 🤖

Claude is writing C++ and Go, I'm writing anything a human is expected to read. As evidence I offer profanity and spelling errors

"Fun" Facts

Timeline

14-Aug-2026

Came across this Live Usage Display project, ordered a board from AliExpress after I saw the price: ~$28 USD (!)

15-Aug-2026

Created a backend in Go, read everything I could about the Guition ESP32-4848S040, ESP-IDF, Arduino and pio. Started designing an API and gathering data sources. Plenty of prior art to examine.

22-Aug-2026

Board arrives. 4K lines of C++ later and I got to fuck around & find out: It works pretty well!

28-Aug-2026

Everything shown is working. Ordered more boards. Currently chasing a display anomaly I've called "the slip".

02-Sep-2026

TLS; anti-slip technology; OTA firmware updates; Live updates for apps that show time

03-Sep-2026

Brightness slider built-in to firmware; Maps have styles: light, dark, greyscale, black

Writers

Posting a picture is one request.

The stash apps above are fed by small scripts that run on a schedule somewhere else. The whole contract is a 480×480 PNG, JPEG or GIF, under 512 KB, and a token.

It's just that easy:

curl -X PUT \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: image/png" \
  --data-binary @frame.png \
  "$BASE/stash/my_gallery"

{ "name": "my_gallery", "format": "png",
  "width": 480, "height": 480,
  "bytes": 174037, "changed": true }