Skip to content

exhuma/spriglet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Spriglet Project Design Document

Project Overview

Spriglet is a collaborative tabletop device ecosystem for games and other activities requiring shared counting or tracking. Each device has a display and input (e.g., button), and devices form a local mesh network to synchronize state. Players can join or leave at any time without disrupting the shared state.

Core Features

  • Local mesh networking between devices.
  • Shared game or tracking state using CRDTs (PN-Counters and structured JSON objects).
  • Simple, playful interface with a display and input for each device.
  • Support for multiple games or collaborative tracking use-cases.
  • Future Android app as a provisioner or client for additional functionality.

Technologies

  • Hardware: ESP32 (display + button) for prototyping.
  • Networking: Bluetooth Mesh (BLE Mesh, Bluetooth SIG standard) for peer-to-peer communication.
  • Data Synchronization: Conflict-free Replicated Data Types (CRDTs) for eventual consistency, supporting increments and decrements.
  • UI/UX: Friendly, minimalistic displays; color coding optional for multiple players/devices.

CRDT Design

  • Each player statistic is represented by a PN-Counter (Positive-Negative Counter) to allow both increments and decrements.
  • Structured game state represented as a JSON-like object with per-device sub-counters.
  • Merge rule: take element-wise maximum of all replica counters to guarantee convergence.
  • Example for a single player:
{
  "points": { "P": { "d1": 3 }, "N": { "d2": 1 } },
  "lives":  { "P": { "d1": 5 }, "N": { "d2": 2 } }
}

Branding

  • Name: Spriglet
  • Logo Concept: Small sprout with three rounded leaves, representing multiple players/devices. Soft pastel colors (green + yellow).
  • Typography: Rounded sans-serif font (e.g., Nunito, Quicksand, Poppins) for friendliness and readability.
  • Tagline: "Grow your game, together."

Design Principles

  • Ease of Use: Minimal learning curve; players interact directly with devices.
  • Resilience: Devices join/leave without disrupting the mesh; CRDT ensures convergence.
  • Flexibility: Supports multiple types of games or collaborative counting tasks.
  • Playfulness: Friendly, whimsical aesthetic to engage users.

Architecture Diagram

+-------------------+        +-------------------+        +-------------------+
|   ESP32 Device    |        |   ESP32 Device    |        |   ESP32 Device    |
|  + Display/Button | <----> |  + Display/Button | <----> |  + Display/Button |
|  + CRDT State     |        |  + CRDT State     |        |  + CRDT State     |
+-------------------+        +-------------------+        +-------------------+
         ^                                                            |
         |                                                            |
         +------------------- Android App ----------------------------+
               (Provisioner, future client via BLE Mesh)

Next Steps

  • Prototype a single device with display, button, and BLE Mesh connectivity.
  • Implement PN-Counter CRDT logic for shared state.
  • Test multi-device mesh synchronization and convergence.
  • Design friendly UI and branding elements for devices and future app.
  • Plan for cross-language usability and potential Android app integration.

About

A collaborative tabletop device ecosystem for games and other activities requiring shared counting or tracking.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors