OB
אופיר ברנס
Builder · TLV
חזרה לכל הפרויקטים
PWA · 2026 · Personal Project

Dice

כלי החלטות אלגנטי — קוביות 3D ב-CSS preserve-3d, גלגל הגרלה מסתובב, ובוחר רנדומלי מרשימה

Dice

Dice — אפליקציית PWA לקבלת החלטות יומיומית. 3 מצבים שונים תחת אינטרפייס אחד נקי: קוביות 3D, גלגל הגרלה, ובוחר רנדומלי. רנדומיות אמיתית קריפטוגרפית, אנימציות 3D ב-CSS pure, וצלילי גלגול עם Web Audio.

3 מצבים

1. קוביות 3D (CSS preserve-3d)

  • 7 סוגי קוביות: D4 / D6 / D8 / D10 / D12 / D20 / D100
  • עד 10 קוביות במכה אחת — ה-render עובר ל-small mode כשיש 5+ למניעת גלישה
  • 6 פאות אמיתיות של cube עם transform-style: preserve-3d ו-backface-visibility: hidden
  • כל פאה ממוקמת ב-3D עם rotateX/rotateY + translateZ(40px) (חצי גודל הקובייה)
  • Animation 1.4s עם 5 keyframes שמדמים גלגול אמיתי (rotateX 1440°, rotateY 720°, translateY -60px) ואז נחיתה על הערך הסופי
  • D6 dot patterns מקוריים — grid 3×3 עם תבנית נקודות נכונה לכל ערך 1-6 (עם hidden dots)
  • D4-D100 משתמשות ב-numeric face עם IBM Plex Mono גדול

2. גלגל הגרלה (SVG slices)

  • אפשרויות מותאמות אישית (טקסטרא, אחת לשורה)
  • SVG dynamic slices — Math.cos/sin + arc paths, צבע אוטומטי מ-8-color palette
  • תוויות מסובבות עם transform="rotate(...)" כדי שיתאימו לכיוון של כל slice
  • ספין 5-8 סיבובים מלאים + jitter עם cubic-bezier(.18,.7,.2,1) 3.5s — נחיתה איטית ודרמטית
  • חישוב מתמטי לתוצאה הסופית מתוך מערך הרוטציה הצברני

3. בוחר רנדומלי

  • רשימה מותאמת אישית של פריטים (שמות, אפשרויות, כל מה שתרצה)
  • Animation cycling של 18 רוחות פתע לפני התוצאה הסופית (1.5 שניות דרמטיות)
  • אופציה: ללא חזרה — בחירות עוקבות יהיו שונות
  • אופציה: אנימציה ארוכה — נטרל לקבלת בחירה מיידית

רנדומיות אמיתית

הכל משתמש ב-crypto.getRandomValues(new Uint32Array(1)) — לא ב-Math.random() הסטנדרטי. זה רנדומיות באיכות קריפטוגרפית, מתאים גם למשחקי D&D (איפה כל גלגול משנה את העלילה), וגם להגרלות "אמיתיות" שמרגישות הוגנות.

פיצ'רים נוספים

  • Web Audio beep — אקורד 4 צלילים (140→220→180→380Hz) עם oscillator + gain envelope
  • Vibration patterns ייחודיים לכל מצב: roll start, mid-animation, final reveal
  • היסטוריית 50 גלגולים אחרונים ב-IndexedDB עם time index ו-DESC cursor
  • Persisted settings — סוג קובייה, כמות, אפשרויות גלגל, אפשרויות בוחר נשמרים בין סשנים
  • Mode persistence — חוזר לאותו טאב בו היית בפעם האחרונה

טכנולוגיות

  • CSS preserve-3d + 6-face cube עם transform: translateZ(±half) לכל פאה
  • crypto.getRandomValues לרנדומיות אמיתית
  • SVG dynamic arc paths עם Math trigonometry
  • Web Audio API (oscillator + gain) ללא קבצי mp3
  • Vibration API — patterns תקטיליים
  • IndexedDB — history (autoIncrement, time-indexed) + settings
  • Service Worker + PWA installable

עיצוב

פלטה ash-rose + cream + emerald accents — אסתטיקת חדר משחקים אלגנטי. נבדלת מ-mauve (Calc), dusty-rose (Mood), salmon (Voice) ע"י הגוון המאופק יותר עם accent ירוק נדיר. רקע cocoa-rose #181014 · ash-rose #c4a5a8 · cream #fef3c7 · emerald #34d399 כצבע משני.

טיפוגרפיה — Heebo + Frank Ruhl Libre לתוצאות הבוחר + IBM Plex Mono לכל המספרים (300 weight, tabular-nums). Glassmorphic surfaces, ambient ash-rose orbs נעות ברקע, dice עם inner shadow + light edge highlights לתחושת תלת-מימד אמיתית.

פתח את Dice ב-ofir.zbang.net/dice

· TECHNOLOGY ·
PWA CSS 3D Transforms crypto.getRandomValues Web Audio SVG Dynamic Paths IndexedDB Vibration API

פרויקטים קשורים.

· YOUR PROJECT NEXT ·

הפרויקט הבא שלך?

בוא נדבר