Skip to the content
2 layers35 × 47.5 mmTabquarium, the printed circuit board in 3D

Tabquarium is an ESP32-C3 ESP-IDF aquarium game on a 128x64 SSD1306 OLED featuring blindbox fish/decor collecting, persistent/offline progression with save recovery, hunger-starvation simulation, and polished sleep-aware UI with LED reward feedback.

Size
35 × 47.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
14
Nets
17
Pads
45
Tracks, vias
61, 17
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
8 Apr 2026
Updated
21 Apr 2026

Overview

Tabquarium is an open-source printed circuit board by jackshisd, from the jackshisd/Tabquarium repository on GitHub. It is a 2-layer board of 35 × 47.5 mm with 14 parts on 17 nets, routed with 61 tracks and 17 vias.

Its parts include 2 switches, 1 IC and 1 diode. It belongs with the lEDs and displays boards and the ESP32 and RISC-V boards of this library.

README

README.md

Tabquarium - ESP32-C3 Aquarium Game

Tabquarium is an ESP-IDF aquarium game for an SSD1306 128x64 OLED with fish collecting, decorations, blindbox rewards, persistent save data, weather effects, and sleep-aware simulation.

Current Platform

  • Target MCU: ESP32-C3
  • Framework: ESP-IDF v5.4.x
  • Display: SSD1306 (I2C, monochrome 128x64)

Hardware Wiring (ESP32-C3)

OLED (SSD1306, I2C)

  • VCC -> 3.3V
  • GND -> GND
  • SDA -> GPIO 5
  • SCL -> GPIO 6

Buttons

  • Mode button -> GPIO 21
  • Action button -> GPIO 20
  • Tabs/Reward button -> GPIO 7

LED

  • Hunger/alert LED -> GPIO 10

Game Controls

  • Mode: cycles main screens (Blindbox -> Aquarium -> Fish -> Decorations)
  • Action on Blindbox: shake/open rewards
  • Action in Aquarium: feed fish (drops random top-spawn food pieces)
  • Tabs on Blindbox: earn +1 tab with cooldown
  • Clock set mode:
    • Enter/exit with mode+action hold combo
    • Action adjusts hour
    • Mode adjusts minute

Core Features

  • Blindbox rewards with 80% fish / 20% decoration odds
  • Persistent fish, decorations, tabs, clock, and tank hunger state via NVS
  • Persistent hourly weather seed via NVS
  • Decor ownership tracking separate from active visible decor slots
  • Tank-wide hunger system (single tank timer instead of per-fish hunger)
  • Starvation system:
    • First random fish death when hunger reaches zero
    • Then one random fish death every 24h while unfed
  • Wake/offline progression using saved unix timestamps
  • Clock restore on boot from saved unix time
  • Startup overlays:
    • Save corruption warning
    • Offline death summary
    • Dismissed by button press
  • Save schema recovery:
    • Legacy fish blob migration path before corruption fallback
  • Fish behaviors:
    • Committed food targeting so a fish chases its chosen pellet instead of constantly retargeting
    • Some fish intentionally prefer the second- or third-closest pellet when multiple food pieces exist
    • Species movement variants (including snail/crab behavior)
    • Nighttime sleep behavior with floating sleep Z particles
  • Food system:
    • 2-3 food pieces per feed action
    • Top spawn, lifetime/consume timers, and touch/consume logic
    • Pellets keep falling even when untouched and expire after 10 seconds
  • Weather system:
    • Hour-long weather seed with chunked rain and sun-ray windows
    • Rain occupies 15% of seeded time
    • Sun rays occupy 30% of non-rain seeded time
    • Rain suppresses sun rays while active
    • Thunderstorms can occur during rain and flash the composed frame
  • UI/sleep behavior:
    • Input lockout after wake to avoid accidental presses
    • Clock-set screen blocks idle sleep
    • Changing the clock invalidates the current weather seed so a new hour schedule is generated
  • LED behavior:
    • Blinks when tank reaches half-hunger threshold
    • 2-second solid pulse when a tab reward is earned
  • Rendering polish:
    • Multiple fish and decor sprite spacing/alignment tweaks
    • Dotted sunbeams that keep a stable origin while active
    • Rain droplets that become expanding surface ripples
    • Clock-set display position adjustments
    • "Tabquarium" branding text in UI
    • Decor label update: "Oyster Pearl"

Build and Flash

Prerequisites

  • ESP-IDF installed and exported in shell
  • idf.py available

Build

bash
idf.py build

Flash

bash
idf.py flash

Monitor

bash
idf.py monitor

Full Cycle

bash
idf.py build flash monitor

Project Layout

text
.
├── CMakeLists.txt
├── sdkconfig
├── main/
│   ├── aquarium.c
│   ├── aquarium.h
│   ├── display.c
│   ├── gifts.c
│   ├── input.c
│   └── ui.c
└── .github/
    └── copilot-instructions.md

Notes

  • Frame cadence targets ~60 FPS (vTaskDelay(17ms) cadence in UI loop).
  • Current dev toggles for weather testing live near the top of main/aquarium.c:
    • always_raining
    • always_thunder

Parts

14
QtyValueFootprintReferences
3TestPointConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalTAB_GND1, TAB1, TAB2
3TestPointTestPoint:TestPoint_Pad_1.5x1.5mmTP1, TP7, TP8
2SW_PushButton_Switch_SMD:SW_SPST_TL3342SW1, SW2
1Buzzerpersonalmodules:XDCR_SMT-0440-T-RBZ1
1LEDLED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolderD1
1MountingHoleMountingHole:MountingHole_2mmH1
1R_USResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder2.2k1
1SSD1306personalmodules:128x64OLEDBrd1
1XIAO ESP32C3personalmodules:xiao_esp32c3U1

Similar boards

  • 2 layers116.8 × 30 mmType d, the printed circuit board in 3D

    Type d

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    14 parts3kApache-2.0
  • 2 layers32 × 22 mmDiff driver, the printed circuit board in 3D

    Diff driver

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    14 parts990GPL-3.0
  • 2 layers34 × 45 mm2032Charger, the printed circuit board in 3D

    2032Charger

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    14 parts915
  • 2 layers34 × 109.9 mmTdisplay s3, the printed circuit board in 3D

    Tdisplay s3

    landonr/homeThing

    Wifi Smart Home Remotes that run on ESPHome

    14 parts551GPL-3.0
  • 2 layers45.3 × 42.7 mmMainPcb, the printed circuit board in 3D

    MainPcb

    adamb314/ServoProject

    Getting the most out of your hobby servo

    14 parts545
  • 2 layers42.5 × 28.8 mmC5VRX JACK DIY, the printed circuit board in 3D

    C5VRX JACK DIY

    Twotoz/C5VRX

    Ultra-minimal, zero-CPU 5.8 GHz analog FPV video receiver using ESP32-C5 Wi-Fi 6 PHY MODEM_DIAG, BitScrambler WBFM demodulation & resistor DAC CVBS

    14 parts515GPL-3.0
  • 2 layers62 × 24 mmMai button, the printed circuit board in 3D

    Mai button

    whowechina/mai_pico

    Pico controller for Maimai

    14 parts475

Questions

How big is the Tabquarium PCB?

It measures 35 × 47.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Tabquarium use?

14 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Tabquarium KiCad files?

From the jackshisd/Tabquarium repository on GitHub, at the commit this page was made from: the board is main_board/main_board.kicad_pcb and its schematic main_board/main_board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Tabquarium design in my own project?

Its repository states no licence, so its author keeps all rights: ask jackshisd before reusing the design.