Skip to content

Repository files navigation

⏱️ Steins;Gate Desktop Pet (命运石之门 跨世界线桌面宠物)

A lightweight, native, and immersive cross-worldline desktop companion featuring 7 iconic Future Gadget Lab members, a realistic Nixie Tube Divergence Meter, and dynamic speech interactions.

Tauri v2 React 19 TypeScript TailwindCSS OpenSpec SDD License: MIT

El Psy Kongroo.
"No one knows what the future holds. That's why its potential is infinite."


📖 English Overview

Steins;Gate Desktop Pet is a native, ultra-lightweight desktop companion application engineered with Tauri v2, React 19, and Tailwind CSS.

Designed with obsessive attention to visual detail, it brings 7 key members of the Future Gadget Laboratory (LabMem) directly to your workspace. The application features authentic sprite animations, an amber neon Nixie Tube Divergence Meter with scrambling worldline transitions, an adaptive speech dialogue bubble, proactive health/focus reminders, and an intuitive radial context wheel menu.

The entire system was architected and iterated following the OpenSpec Spec-Driven Development (SDD) paradigm, maintaining high engineering rigor across 8 distinct architectural milestones.


🌟 Key Features / 核心特性

👥 1. 7 Future Gadget Lab Members (未来道具研究所全员交互)

Switch seamlessly between 7 LabMem characters, each with unique color palettes, sprite poses, customized voice lines, poke reactions, and idle animations:

  • 🧪 Makise Kurisu (牧濑红莉栖 / 助手)LabMem No.004 · Genius neuroscientist, Dr Pepper enthusiast & tsundere remarks.
  • 🎀 Shiina Mayuri (椎名真由理 / 嘟嘟噜)LabMem No.002 · Energetic companion, metal Uupa lover & pocketwatch caretaker.
  • 🐱 Faris NyanNyan (菲利斯·喵喵)LabMem No.007 · Akihabara maid icon & Rai-Net Access Battlers champion.
  • ⛩️ Urushibara Ruka (漆原琉华)LabMem No.006 · Shrine maiden attire & wielder of the Samidare blade.
  • 📱 Kiryu Moeka (桐生萌郁 / 闪光的指压师)LabMem No.005 · Shining Finger, lightning-fast keystrokes & FB messages.
  • 🚲 Amane Suzuha (阿万音铃羽 / 打工战士)LabMem No.008 · Part-time warrior, cycling explorer & mission-driven traveler.
  • Hiyajo Maho (比屋定真帆)LabMem No.009 · Brain science researcher & Viktor Chondria University associate.

⚡ 2. Realistic Nixie Tube Divergence Meter (仿真实体辉光管变动率仪)

  • Authentic Visual Modeling: Built with pure CSS & SVG shaders featuring amber neon cathode discharge glow, unlit filament shadows, internal anode mesh grid textures, top glass dome reflections, and bottom socket structures.
  • Worldline Scrambling: Real-time jitter and random scrambling animations when worldlines fluctuate (e.g. 1.048596% Steins Gate line, 0.571024% $\alpha$ line, 1.130426% $\beta$ line).
  • Toggleable & Movable: Easily toggle visibility or adjust display options via context menu.

🪟 3. Native Frameless Transparent Window (原生无边框透明窗口)

  • Ultra-low Resource Footprint: Native Rust + WebKit/WebView runtime consumes only ~30–50MB RAM (compared to 200MB+ in typical Electron apps).
  • Native Microsecond Dragging & Click-through: Flawless OS-level drag responsiveness without visual jitter.
  • Always on Top & Multi-Monitor Support: Floats smoothly on top of your development environment, browser, or IDE.

💬 4. Adaptive Speech Bubbles & Smart Reminders (自适应气泡与健康提醒)

  • Smart Viewport Positioning: Automatically calculates bounds and avoids window clipping across different scale presets.
  • Interactive Poking: Click on characters to trigger situational tsundere/cheerful reactions and expressive sprites.
  • Health & Productivity Routines: Timely non-intrusive reminders for:
    • 💧 Hydration alerts
    • 🧘 Stretches & posture realignment
    • 👀 Eye strain relief breaks
    • 🌙 Late-night rest warnings

🎡 5. Futuristic Radial Context Wheel Menu (环形轮盘快捷菜单)

  • Right-click anywhere on the companion to summon a high-tech radial dial.
  • Fast switching for Characters, Special Actions, Scale Presets (0.8x / 1.0x / 1.25x), and Divergence Displays.

📐 Spec-Driven Development (SDD) with OpenSpec

This project was built from scratch following the AI-Native Spec-Driven Development (SDD) workflow via OpenSpec. Every feature and refactoring pass was planned, specified, and archived in the openspec/ directory:

openspec/
├── specs/                                   # Domain behavior contracts
│   ├── window-lifecycle/                    # Window transparency, pinning & drag specs
│   ├── pet-character-system/                # Character metadata, sprites & quote contracts
│   └── bubble-dialogue-system/              # Speech bubbles & auto-reminder schedules
└── changes/archive/                         # 8 Full Iteration Cycles
    ├── 2026-08-19-desktop-pet-mvp           # Milestone 1: Core MVP architecture
    ├── 2026-08-19-fix-pet-visuals-and-nixie # Milestone 2: Nixie tube styling & mesh grid
    ├── 2026-08-19-fix-dragging-and-scaling  # Milestone 3: Window viewport & scale presets
    ├── 2026-08-19-fix-native-drag-and-wake  # Milestone 4: Native drag performance optimization
    ├── 2026-08-19-enlarge-settings-and-fix-menu-viewport # Milestone 5: Radial menu clipping fix
    ├── 2026-08-19-fix-bubble-clipping-in-compact-scale   # Milestone 6: Speech bubble bounds
    ├── 2026-08-19-update-scale-presets-and-nixie-toggle  # Milestone 7: Dynamic Nixie toggle
    └── 2026-08-19-upgrade-retina-app-icons  # Milestone 8: High-DPI Retina ICNS/ICO assets

🏗️ Architecture & Directory Structure

steins-gate-desktop-pet/
├── src/
│   ├── components/
│   │   ├── ContextWheelMenu.tsx    # Radial context menu component
│   │   ├── DivergenceDisplay.tsx   # Divergence meter controller
│   │   ├── NixieTube.tsx           # Authentic CSS/SVG Nixie glow element
│   │   ├── PetSprite.tsx           # Animated sprite renderer & poke listener
│   │   └── SpeechBubble.tsx        # Dynamic speech bubble with viewport clamping
│   ├── data/
│   │   └── characters.ts           # 7 LabMem character metadata, sprites & quotes
│   ├── hooks/                      # Custom hooks for timers, reminders & audio
│   ├── types/
│   │   └── pet.ts                  # TypeScript definitions for character/window state
│   ├── App.tsx                     # Main layout & event controller
│   └── main.tsx                    # React root entry
├── src-tauri/
│   ├── src/main.rs                 # Tauri native Rust backend
│   ├── tauri.conf.json             # Transparent window & bundle configurations
│   └── Cargo.toml                  # Rust dependencies
├── pets/                           # High-res character sprite sheets
├── openspec/                       # OpenSpec SDD specifications & change logs
└── package.json                    # Project scripts & npm dependencies

🚀 Quick Start / 快速上手

Prerequisites

  • Node.js: 18.0+ or 20.0+
  • pnpm: 9.0+ (npm install -g pnpm)
  • Rust & Cargo: Latest stable toolchain (rustup.rs)
  • macOS / Windows / Linux with OS development dependencies for Tauri (Tauri Prerequisites Guide)

Installation & Development

# 1. Clone repository
git clone https://github.com/yongjun-guo/steins-gate-desktop-pet.git
cd steins-gate-desktop-pet

# 2. Install dependencies
pnpm install

# 3. Launch in development mode (Vite + Tauri Desktop Window)
pnpm tauri dev

Production Build

# Compile web bundle and build native installer / executable
pnpm tauri build

The compiled native executable (.app on macOS, .msi / .exe on Windows, .deb / .AppImage on Linux) will be generated under src-tauri/target/release/bundle/.


🤝 Contributing

Contributions, issues, and feature suggestions are always welcome! Feel free to check the Issues page.


📜 License & Disclaimer

This project is licensed under the MIT License - see the LICENSE file for details.

Non-Commercial Fan-Work Notice

"Steins;Gate" (シュタインズ・ゲート) and all associated characters, logos, audio, and visual assets are copyright and property of MAGES. / 5pb. / Nitroplus / Chiyomaru Studio. This repository is an open-source, non-profit fan-made creative demonstration made out of passion for the franchise.


Designed & Developed with ❤️ by GYJ (yongjun-guo)

About

Cross-Worldline Desktop Pet & Divergence Meter Companion powered by Tauri v2, React 19 & OpenSpec SDD

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages