Retro Dialer β’ Modern UI β’ Offline-Ready
Crispy Octo Rotary Phone is a fun, retro-inspired phone dialer built entirely with HTML, CSS, and JavaScript β no build tools, no frameworks.
Just open the file and enjoy:
- β Rotary Dial with realistic physics
- β Keypad mode with DTMF tones
- β Contacts manager
- β Call log history
- β Light/Dark/System themes
- β Haptics & Sound toggle
- β PWA support (Installable, Offline Capable)
- Drag a number to the stopper
- Release to dial
- Authentic clicking sound pulses
- Smooth and snappy animation
- Toggle to keypad mode
- Real dual-tone DTMF synthesized with WebAudio
- Perfect for UI/UX experiments
- Add new contacts
- Auto-fill numbers
- Quick Call
- Long-term storage via
localStorage
- Timestamped entries
- Status: Dialed / Failed / Ended
- Automatically recorded
- Persistent
- Dark (default)
- Light
- System Mode (auto detect OS theme)
- Toggle sound effects
- Haptic feedback on supported devices
- Install as standalone app
- Offline ready (service worker + caching)
- Clean manifest and icons included
- Download the ZIP
- Extract
- Open
index.html - Done β
- Open in browser
- Menu β βInstall Appβ
- Launch from home screen
- Click/Touch a number hole
- Drag clockwise to the stopper
- Release
- Listen for click pulses
- Number appears on screen
- Tap digits directly
- Hear authentic DTMF tones
- Haptics (if enabled & supported)
- Press Call
- Phone rings 4 cycles
- If no answer β Busy tone
- Press End to stop early
- Add contacts with β+ Add Contactβ
- Press βCallβ next to a contact
- Auto-fills the number
- Every call you make is saved
- Shows timestamp + call status
- Theme switch
- Rotary/Keypad default mode
- Toggle Sounds
- Toggle Haptics
| Action | Key |
|---|---|
| Dial digits | 0β9, *, # |
| Call | Enter |
| Delete | Backspace |
| Clear number | C |
root/
β index.html
β manifest.json
β service-worker.js
β README.md
β
βββ css/
β βββ style.css
β
βββ js/
β βββ app.js # Core rotary logic, call flow
β βββ ui.js # UI logic, contacts, keypad, settings
β βββ dtmf.js # DTMF generator
β βββ state.js # Persistence (localStorage)
β
βββ assets/
βββ icons/ # PWA icons
βββ images/ # README images (hero + preview)
βββ sounds/ # click.wav, ring.wav, busy.wav
- Push this project to your repo
- Go to Settings β Pages
- Select Main branch / Root
- Visit your project URL
- App caches itself automatically (offline mode)
Works perfectly on:
- Netlify
- Vercel
- Cloudflare Pages
- Amazon S3
- Any CDN / static host
- Chrome β
- Firefox β
- Edge β
- Safari (iOS/macOS) β
Some browsers block audio before first user interaction β expected behavior.
Because it's fun, nostalgic, and oddly satisfying.
No β itβs UI/UX simulation only.
Locally in localStorage.
No server, no tracking, no backend.
Ideas & PRs welcome!
- Speed-dial favorites
- Animated call waveform
- Custom sound packs
- More themes
MIT License β use, modify, remix freely.
Built with β€οΈ β because rotating a dial is surprisingly therapeutic.
