hold it · feel it pulse · put it down · it rests
64.2 × 131.5 × 7.65mm · iPhone 13 mini form factor · № 0001
Most devices demand your attention. ommphone asks for something different — your presence. A piece of carbonized bamboo that pulses with a heartbeat. That grows warm when another one is near.
Not a notification. Not a message. Just warmth. Just a heartbeat. Just the quiet signal that another human being chose the same thing you did.
Pick it up. Within a heartbeat it pulses — soft at first, building over 15 seconds as warmth grows. Put it down and it fades. No buttons, no apps, no instructions. Just hold it and breathe.
BLE scans continuously. Another ommphone nearby — beat quickens, warmth deepens automatically. No pairing, no setup. The closer you are, the more alive it feels. Within 3m both devices beat in phase simultaneously.
Two strangers. Two devices beating in perfect phase. They both feel it at the same moment. No words needed. The device already said everything. A connection without a screen in sight.
Hold beat starts · warmth builds over 15 seconds
Put down beat fades · heat stops immediately
Left button tap beat override on/off
Right button tap heat override on/off
Left hold 1.5s airplane mode · invisible to others
Right hold 3s power off
Hold the ommphone
more than your own phone.
Not as a rule. As a practice. Every time you reach for your phone out of habit, reach for this instead. Let the heartbeat remind you what presence feels like.
Connect with others
in real life.
When two ommphones meet, something real passes between the people holding them. Foster those moments. Let it be the beginning of something that doesn't need a screen.
Be present.
Be mindful.
The device asks nothing of you. No content, no feed, no reply. Just the quiet agreement to show up — to the room you're in, the person across from you, the breath already moving through your body.
Practice
coherent breathing.
Inhale 5 seconds. Exhale 5 seconds. Repeat. Heart, lungs, and nervous system fall into resonance — coherence. The ommphone's 7-second beat is your guide. One breath per pulse.
THE PLEDGE
"I will hold this more than my phone.
I will seek real connection.
I will be present.
I will breathe."
Pick it up — it wakes.
The first heartbeat confirms it's alive.
Hold the right button 3 seconds to power off.
A long pulse confirms shutdown.
Idle on a table for 10 minutes with no nearby ommphone — it sleeps on its own.
Hold it in your palm.
Within one second — lub-dub.
The pulse is soft at first. Over 15 seconds the beat strengthens and the bamboo warms to your skin.
Breathe with it. Put it down and the beat fades over 5 pulses. Warmth stops the moment you let go.
No pairing. No app. No setup.
Both people hold their ommphone.
Devices detect each other over BLE. Beat quickens, warmth deepens — on both devices at once.
Within 3 metres the heartbeats phase-lock. You feel it. They feel it. Simultaneously.
Complete Gerber package for JLCPCB. Upload and order. 2-layer FR4, all layers included. PCB Rev3.1 — 25mm cap pad.
Complete JLCPCB SMT assembly package. BOM with LCSC part numbers. CPL with exact coordinates.
Playing card form factor. 64.2 × 131.5 × 7.65mm. Double groove, icon recesses, USB-C slot.
540 lines of production C. nRF5 SDK 17.1.0. Pickup-to-pulse auto detection. 2-button overrides. BLE proximity sync.
19-step build plan. Every cost itemised. Who does what. Every file mapped to every vendor.
Full embedded engineer job description for ITviec / TopDev HCMC. Firmware + Gerber review.
/* OMPHONE FIRMWARE v4.0 — nRF52832 Pickup-to-pulse · 2 buttons · BLE proximity */ #define BEAT_INTERVAL_MEDITATION 7000 // 7s — meditation #define BEAT_INTERVAL_MIN 800 // fastest — very close #define LUB_DURATION 70 // first thump ms #define LUB_DUB_GAP 180 // gap between lub + dub #define NTC_ADC_THRESHOLD 680 // ~45°C safety cutoff /* Touch poll — runs every 50ms */ static void touch_poll_handler(void *p) { bool raw = nrf_gpio_pin_read(PIN_TOUCH); /* Debounce: 200ms pickup, 1500ms putdown */ if (confirmed_pickup) { m_state = DEVICE_WAKING; heater_set(HEATER_LOW); // warmth starts immediately motor_pulse(MOTOR_SOFT); // first heartbeat } if (confirmed_putdown) { m_state = DEVICE_FADING; heater_set(HEATER_OFF); // heat stops instantly m_fade_count = 5; // beat fades over 5 pulses } } /* Warmth ramps with hold duration */ static uint16_t heat_for_ramp(void) { uint32_t held_ms = ms_now() - m_held_since_ms; if (held_ms < 5000) return HEATER_LOW; // 0–5s if (held_ms < 15000) return HEATER_MED; // 5–15s return HEATER_HIGH; // 15s+ }
| Ref | Component | Package | LCSC # | Qty |
|---|---|---|---|---|
| U1 | nRF52832 — BLE SoC | QFN-48 | C112885 | 1 |
| X1 | 32MHz Crystal | SMD-3225 | C9002 | 1 |
| U2 | TTP223 Cap Touch IC | SOT-23-6 | C80757 | 1 |
| U3 | TP4056 LiPo Charger | SOP-8 | C16581 | 1 |
| U4 | DW01A Batt Protection | SOT-23-6 | C351370 | 1 |
| Q1 | FS8205A Dual N-FET | SOT-23-6 | C32254 | 1 |
| Q2 | 2N7002 NPN MOSFET | SOT-23 | C8545 | 1 |
| J1–J4 | JST-PH 2-pin connector | JST-PH-2 | C157929 | 4 |
| J5 | USB-C Receptacle | USB-C-SMD | C2765186 | 1 |
| LED1 | Red LED 0402 | 0402 | C2286 | 1 |
| C1–C8 | MLCC 100nF / 4.7uF / 10uF | 0402 | C49678 | 8 |
| R1–R3 | Resistors 1.2k / 10k / 100Ω | 0402 | C25867 | 3 |
| SW1 | PTS525SM15SMTR2 — Beat button (left, P0.06) | 6×6mm SMD | C92584 | 1 |
| SW2 | PTS525SM15SMTR2 — Heat button (right, P0.07) | 6×6mm SMD | C92584 | 1 |
X-ray view shows the PCB centred inside the phone with 3mm clearance each side. Battery zone top · BLE + power middle · USB-C bottom. Right panel shows the 4-layer stack: front shell 3.8mm · PCB 1.8mm · LiPo 4.5mm · back tray 3.85mm = 7.65mm total.
Back tray exterior shows ॐ symbol, ECG heartbeat line, HOLD HERE arc and № 0001 serial. Interior shows the 58.6×118.6mm PCB pocket, LiPo battery pocket (top zone), JST connector relief slots (right edge J1–J4) and motor relief circle (left).
2-layer FR4 · HASL lead-free · all SMT · 25mm cap pad · SW1+SW2 · JLCPCB ready
Not on the PCB — these live inside the bamboo enclosure and connect via JST-PH cables
3V DC · 70mA · glue to inner bamboo wall for resonance · connects to J2
search Amazon ↗10kΩ at 25°C · B=3950 · leads ≥80mm · sits at copper spreader · connects to J3
search Amazon ↗3.7V · JST-PH 2-pin · check polarity (red=+) before connecting · connects to J4
search Adafruit ↗5V · 15×15mm · stick under copper spreader at grip zone · connects to J1
search Amazon ↗100mm pre-crimped · pack of 10 · connects all off-board components to J1–J4
search Amazon ↗Flashes nRF52832 firmware via SWD · 4 wires to PCB · reuse forever
search Amazon ↗0.5mm thick · cut from copper sheet · sits between heating pad and bamboo surface
search Amazon ↗Double-sided · mounts heating pad and motor inside enclosure without screws
search Amazon ↗hold the rhythm · 7 seconds · no counting needed