

Gemini panel
Schematics, pcbs, layout files for all my keyboard projects
- Size
- 250.2 × 84.2 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 151
- Nets
- 124
- Pads
- 851
- Tracks, vias
- 3,195, 242
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 8 May 2026
- Updated
- 18 Aug 2026
Overview
Gemini panel is an open-source printed circuit board by thanoslabs, from the thanoslabs/keyboards repository on GitHub. It is a 2-layer board of 250.2 × 84.2 mm with 151 parts on 124 nets, routed with 3,195 tracks and 242 vias.
It is built around the 74AHCT1G125SE, 1N4148W and SK6812MINI-E, with the B5819W, MCP1700-3302E/TT and MCP23017-E/SO among its other parts. It belongs with the RP2040 boards of this library.
Main components
674AHCT1G125SE
SOT-353-40℃~+125℃ 1 1 4.5V~5.5V 4.7ns@5V,50pF 40uA 74AHCT 8mA 8mA Schmitt trigger Tri-State Unidirectional SOT-353 Buffers, Drivers, Receivers, Transceivers ROHSDiodes IncorporatedBuffers, Drivers, Receivers, Transceivers1N4148W
SOD-123150mA 1A 1V@50mA 1uA@75V 400mW 4ns 75V Independent SOD-123 Switching Diodes ROHSSTMicroelectronicsSwitching DiodesSK6812MINI-E
SMD-40℃~+85℃ 0.6mA 1.78mm 120mcd~240mcd 120° 160mcd~320mcd 1kHz 2.8mm 2000V 3.2mm 3.7V~5.5V 460nm~470nm 515nm~525nm 620nm~625nm 800Kbit/s 815mcd~1275mcd Semi-transparent lens SMD RGB LEDs(Built-in IC) ROHSOPSCO OptoelectronicsRGB LEDs(Built-In IC)B5819W
SOD-123-55℃~+125℃ 1.5A 1mA@40V 25A 40V 600mV@1A Standalone SOD-123 Schottky Diodes ROHSMDDSchottky DiodesMCP1700-3302E/TT
SOT-23-40℃~+125℃@(Tj) 1 1.6uA 178mV@(250mA) 250mA 3.3V 44dB@(100Hz) 6V Fixed Over Temperature Protection、Short Circuit Protection Positive SOT-23 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSMicrochip TechnologyVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsMCP23017-E/SO
SOIC-28-300mil-40℃~+85℃ 1.7MHz 1.8V~5.5V 16 1uA 600mV 8 8mA I2C Interrupt Output Reset function、Cascade and address expansion SOIC-28-300mil I/O Expanders ROHSMicrochip TechnologyI/O Expanders
README
README.mdkeyboards
Schematics, pcbs, layout files for all my keyboard projects
Structure
design/— original keyboard designs, one folder per board withlayout/(KLE, keymap, VIA),pcb/(KiCad),case/(3DP CAD), andfirmware/(QMK/VIA builds) insidegemini/— split staggered 40% that docks into a regular 40%
commissions/— VIA/layout files for boards built for othersdocs/— GitHub Pages site with interactive design docs, deployed by.github/workflows/pages.ymlon every push tomainthat touchesdocs/(one-time setup: Settings → Pages → Source → GitHub Actions)tools/release/—kb_release.py, the release bundler (see below)
Releases
Every merge to main that touches design/<board>/ publishes a GitHub
release for that board:
.github/workflows/release.yml. Each release
is a manufacturing bundle — a self-contained snapshot of one version, so a
fab house or a future me can build the board from a single download without
checking out the repo:
layout/— KLE, keymap, VIApcb/— the KiCad projects, footprint library, placement CSVs, generatorspcb/fab/<project>-gerbers.zip— gerbers + Excellon drill, plotted bykicad-cliat build time; this is the file you upload to JLCPCB/PCBWaypcb/fab/<project>-bom-jlc.csv,-cpl-jlc.csv— BOM and placement in JLCPCB's column format;-bom-pcbway.csvcarries MPNs for PCBWaypcb/fab/<project>-cpl.csv,-drc.json— KiCad's own placement export (everything else is derived from it) and the DRC report as builtASSEMBLY.md— what gets machine-placed, what's fitted by hand, and the DFM checks to clear before ordering assemblycase/stl/,case/step/— case piecesfirmware/— QMK/VIA definitions and any built imagesMANIFEST.json,SHA256SUMS,RELEASE.md
Some of that duplicates the repo, deliberately: a release pins each file to the version it was built with.
Versioning
Semver per keyboard, held as <board>-v<x.y.z> git tags — gemini-v0.2.1 is
independent of any other board. First release of a board is 0.1.0.
| How | Bump |
|---|---|
Merge to main touching design/<board>/ | patch |
…with [minor] or [major] in a commit message | minor / major |
…with [skip release] in a commit message | none — run does nothing |
| Actions → Release keyboards → Run workflow | pick the board, the bump level, or an exact x.y.z; dry_run builds and uploads the bundle as a workflow artifact without tagging or publishing |
Building a bundle locally
python3 tools/release/kb_release.py bundle --board gemini --version 0.1.0
# → dist/gemini-v0.1.0/ and dist/gemini-v0.1.0.zipNeeds kicad-cli on PATH (or KICAD_CLI set) for the gerbers; pass
--skip-pcb for a source-only bundle. Only files tracked by git go in, so
venvs and KiCad backups never leak into a release.
Assembly (PCBA) files
The boards are script-generated and have no schematic, so the BOM can't come
out of KiCad. design/<board>/pcb/parts.csv is the source of truth instead:
one rule per part, matched against every footprint on the board at release
time. A footprint that matches no rule fails the build rather than
quietly vanishing from the BOM — which matters here, because the switch
footprints carry keycap legends (T, Space) in their Value field and a
naive value-based BOM would list 22 one-off parts instead of 43 sockets.
Rules also mark parts hand (the Pico, which sits on headers and can't be
machine-placed) so they stay out of the BOM and CPL but still get written up
in ASSEMBLY.md, and carry a per-part rotation offset for parts whose
orientation in JLCPCB's library differs from the footprint's.
Parts
151| Qty | Value | Footprint | References |
|---|---|---|---|
| 43 | 1N4148W | D_SOD-123 | L_D00, L_D01, L_D02, L_D03, L_D04, L_D05, L_D10, L_D11, L_D12, L_D13, L_D14, L_D15, L_D20, L_D21, L_D22, L_D23 +27 |
| 43 | SK6812MINI-E | LED_SK6812MINI-E_3.2x2.8mm_P1.5mm_ReverseMount | L_LED00, L_LED01, L_LED02, L_LED03, L_LED04, L_LED05, L_LED10, L_LED11, L_LED12, L_LED13, L_LED14, L_LED15, L_LED20, L_LED21, L_LED22, L_LED23 +27 |
| 2 | 1uF | C_0603_1608Metric | R_C2, R_C3 |
| 2 | 4k7 | R_0603_1608Metric | L_R1, L_R2 |
| 2 | 5k1 | R_0603_1608Metric | L_R3, L_R4 |
| 2 | Alt | SW_MX_HS_CPG151101S11_1.25u | L_SW32, R_SW32 |
| 2 | Ctrl | SW_MX_HS_CPG151101S11_1.25u | L_SW30, R_SW33 |
| 2 | Logo_Gemini | Logo_Gemini | L_G1, R_G1 |
| 2 | Space | SW_MX_HS_CPG151101S11_1u | L_SW33, R_SW30 |
| 2 | USB-C link | HRO-TYPE-C-31-M-12-Assembly | L_J1, R_J1 |
| 2 | stab 2.75u | STAB_MX_2.75u | L_ST_SW33, R_ST_SW30 |
| 1 | , | SW_MX_HS_CPG151101S11_1u | R_SW22 |
| 1 | . | SW_MX_HS_CPG151101S11_1u | R_SW23 |
| 1 | 100nF | C_0603_1608Metric | R_C1 |
| 1 | 74AHCT1G125 | SOT-23-5 | L_U2 |
| 1 | ; | SW_MX_HS_CPG151101S11_1u | R_SW14 |
| 1 | A | SW_MX_HS_CPG151101S11_1u | L_SW11 |
| 1 | B | SW_MX_HS_CPG151101S11_1u | L_SW25 |
| 1 | B5819W | D_SOD-123 | L_DV1 |
| 1 | Bksp | SW_MX_HS_CPG151101S11_1.5u | R_SW05 |
| 1 | C | SW_MX_HS_CPG151101S11_1u | L_SW23 |
| 1 | D | SW_MX_HS_CPG151101S11_1u | L_SW13 |
| 1 | E | SW_MX_HS_CPG151101S11_1u | L_SW03 |
| 1 | Enter | SW_MX_HS_CPG151101S11_1.25u | R_SW15 |
| 1 | Esc/Ctrl | SW_MX_HS_CPG151101S11_1.5u | L_SW10 |
| 1 | F | SW_MX_HS_CPG151101S11_1u | L_SW14 |
| 1 | Fn | SW_MX_HS_CPG151101S11_1.25u | R_SW31 |
| 1 | G | SW_MX_HS_CPG151101S11_1u | L_SW15 |
| 1 | GUI | SW_MX_HS_CPG151101S11_1u | L_SW31 |
| 1 | H | SW_MX_HS_CPG151101S11_1u | R_SW10 |
| 1 | I | SW_MX_HS_CPG151101S11_1u | R_SW02 |
| 1 | J | SW_MX_HS_CPG151101S11_1u | R_SW11 |
| 1 | K | SW_MX_HS_CPG151101S11_1u | R_SW12 |
| 1 | L | SW_MX_HS_CPG151101S11_1u | R_SW13 |
| 1 | M | SW_MX_HS_CPG151101S11_1u | R_SW21 |
| 1 | MCP1700-3302 | SOT-23 | R_U2 |
| 1 | MCP23017-E/SO | SOIC-28W_7.5x17.9mm_P1.27mm | R_U1 |
| 1 | N | SW_MX_HS_CPG151101S11_1u | R_SW20 |
| 1 | O | SW_MX_HS_CPG151101S11_1u | R_SW03 |
| 1 | P | SW_MX_HS_CPG151101S11_1u | R_SW04 |
| 1 | Q | SW_MX_HS_CPG151101S11_1u | L_SW01 |
| 1 | R | SW_MX_HS_CPG151101S11_1u | L_SW04 |
| 1 | Raspberry Pi Pico | RPi_Pico_SMD_TH | L_U1 |
| 1 | S | SW_MX_HS_CPG151101S11_1u | L_SW12 |
| 1 | Shift | SW_MX_HS_CPG151101S11_1.75u | L_SW20 |
| 1 | Shift | SW_MX_HS_CPG151101S11_1u | R_SW24 |
| 1 | T | SW_MX_HS_CPG151101S11_1u | L_SW05 |
| 1 | Tab | SW_MX_HS_CPG151101S11_1.25u | L_SW00 |
| 1 | U | SW_MX_HS_CPG151101S11_1u | R_SW01 |
| 1 | USB-C host | HRO-TYPE-C-31-M-12-Assembly | L_J2 |
| 1 | USB_DM | TestPoint_THTPad_D1.5mm_Drill0.7mm | L_TP2 |
| 1 | USB_DP | TestPoint_THTPad_D1.5mm_Drill0.7mm | L_TP1 |
| 1 | V | SW_MX_HS_CPG151101S11_1u | L_SW24 |
| 1 | W | SW_MX_HS_CPG151101S11_1u | L_SW02 |
| 1 | X | SW_MX_HS_CPG151101S11_1u | L_SW22 |
| 1 | Y | SW_MX_HS_CPG151101S11_1u | R_SW00 |
| 1 | Z | SW_MX_HS_CPG151101S11_1u | L_SW21 |
| 1 | stab 2.0u | STAB_MX_2u | R_ST_SW24 |
More from thanoslabs/keyboards
2- 2 layers127.1 × 84.2 mm

- 2 layers123.1 × 84.2 mm

Similar boards
- 2 layers134.8 × 132 mm

- 2 layers135 × 90 mm

Cable tester
Mykola2/uart-cable-tester
design.py is the single source of truth: parts, footprints, pin-to-net map and positions. Everything else is generated from it.
66 parts - 2 layers241.6 × 71.7 mm

- 2 layers118 × 118 mm

Input main
hdh7485/agent-deck
Physical AI agent controller for Codex, Hermes, OMX, and tmux workflows
74 parts - 2 layers162 × 82 mm

Ahm panel placed
kimaernoudt/custom-ahm-wallpanel
One board that replaces the hand wiring: the 4 encoders, the 4 scene buttons, all 48 ring LEDs, 4 button LEDs and the MCP23017 sit on it. One 10-wire UEXT cable and one 2-wire 5 V cable go to the Olimex ESP32-POE.
78 parts - 4 layers353.7 × 129.8 mm

TokenBoard
h3ll5ur7er/TokenBoard
You wouldn't vibe code a keyboard.. or would you? uses konnect to interact with KiCad and CADence to model the case
422 parts - 2 layers446.9 × 141.7 mm

- 2 layers308.8 × 99.3 mm

Questions
How big is the Gemini panel PCB?
It measures 250.2 × 84.2 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Gemini panel use?
151 parts, built around the 74AHCT1G125SE, 1N4148W, SK6812MINI-E and B5819W. 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 Gemini panel KiCad files?
From the thanoslabs/keyboards repository on GitHub, at the commit this page was made from: the board is design/gemini/pcb/gemini-panel/gemini-panel.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Gemini panel design in my own project?
Its repository states no licence, so its author keeps all rights: ask thanoslabs before reusing the design.