██╗███╗ ██╗██╗████████╗██╗ ██╗███████╗███████╗
██║████╗ ██║██║╚══██╔══╝██║ ██║██╔════╝██╔════╝
██║██╔██╗ ██║██║ ██║ ██║ ██║█████╗ █████╗
██║██║╚██╗██║██║ ██║ ██║ ██║██╔══╝ ██╔══╝
██║██║ ╚████║██║ ██║ ███████╗██║██║ ███████╗
╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚══════╝╚═╝╚═╝ ╚══════╝
your life. one terminal.
InitLife is a mobile-first personal dashboard styled as a terminal. No app store, no login required, no backend. Open it, set your name, and it becomes your ambient life display - real-time clock, day/week/year progress, focus windows, and optional Google account sync.
Built to live as a pinned tab on your PC and a home screen shortcut on your phone.
[✓] real-time clock with live seconds
[✓] day · week · year progress bars with time remaining
[✓] time-aware greeting with your name
[✓] focus window suggestions based on time of day
[✓] custom theme / accent colour picker
[✓] configurable widgets (show/hide sections)
[✓] auto geolocation via nominatim reverse geocoding
[✓] weather api integration (real-time conditions)
[✓] pomodoro / focus timer mode
[✓] google oauth 2.0 - no backend, token stays on device
├── google calendar → next event this week
├── gmail → unread count
├── tasks → add and complete
└── birthdays → upcoming in next 14 days (auto-hides)
[✓] rotating dev/engineering quote log (↻ to cycle)
[✓] dynamic page title → HH:MM · XX% day · InitLife
[✓] installable as PWA → android prompt + ios instructions
[✓] session uptime counter
[✓] 100% localStorage - all data stays on your device
[✓] single .html file - no dependencies, no build step
html → structure
css → monochrome terminal aesthetic (JetBrains Mono · Share Tech Mono)
javascript → vanilla, no frameworks, no bundler
google → calendar api · gmail api · people api · tasks api (oauth 2.0 implicit flow)
nominatim → openstreetmap reverse geocoding
No npm. No webpack. No React. One file.
git clone https://github.com/kieranperk/initlife.git
cd initlife
# rename initlife.html to index.html, push to main
# enable github pages → settings → pages → deploy from branchThen point your domain DNS to GitHub Pages:
Type Host Value
A @ 185.199.108.153
A @ 185.199.109.153
A @ 185.199.110.153
A @ 185.199.111.153
CNAME www kieranperk.github.io
# just open the file - no server needed for basic features
open initlife.html
# for google oauth to work, serve over https or localhost
npx serve .Google sync is optional. To enable it:
1. console.cloud.google.com → new project
2. enable APIs:
- Google Calendar API
- Gmail API
- People API
- Google Tasks API
3. credentials → create oauth 2.0 client id → web application
4. authorised javascript origins:
- https://initlife.app
- http://localhost (for dev)
5. authorised redirect uris:
- https://initlife.app/
- http://localhost/initlife.html
6. paste client id into initlife.html → GOOGLE_CLIENT_ID
note: the client secret is not needed and should never appear in the frontend.
tokens are stored inlocalStoragewith expiry tracking. nothing leaves the device.
initlife/
├── index.html ← the entire app
├── oembed.json ← discord / social embed metadata
├── manifest.json ← pwa manifest
├── privacy.html ← privacy policy
├── sw.js ← service worker
├── README.md ← you are here
└── LICENSE ← mit with commons
[ ] offline service worker / full pwa cache
MIT with Commons Clause - see LICENSE.
You can use, modify, and share InitLife freely.
You may not sell it or offer it as a paid hosted service without permission.
built by kieranperk · initlife.app