- Python 47.2%
- HTML 36.8%
- CSS 10.2%
- JavaScript 4.6%
- Shell 0.7%
- Other 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| static | ||
| templates | ||
| translations | ||
| .dockerignore | ||
| .gitignore | ||
| app.py | ||
| auth_service.py | ||
| config.py | ||
| database.py | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| favicon.ico | ||
| i18n.py | ||
| init_db.py | ||
| LICENSE.txt | ||
| log_service.py | ||
| models.py | ||
| prompt.txt | ||
| README.md | ||
| requirements.txt | ||
| sleep_service.py | ||
| test_app.py | ||
| timezone_utils.py | ||
| wsgi.py | ||
sleepy-eepy 🌙
sleepy-eepy is a cozy, friendly, multi-user sleep tracking web application. It allows users to log sleep intervals, visualize resting rhythms with a 24-hour weekly timeline, view daily aggregations and statistics, bulk-import CSV data, and share read-only timeline links.
Tech Stack
- Backend: Python, Flask, SQLAlchemy (ORM only, no raw SQL), SQLite (WAL mode)
- Frontend: Vanilla JavaScript (no external JS dependencies), CSS (cozy light & dark mode)
- Production Server: Gunicorn (4 worker threads)
- Container: Docker & Docker Compose (based on
debian:trixie-slim) - Authentication & Security: Argon2 password hashing with 256-bit hex salt, TOTP two-factor authentication (SHA-256, 32-byte Base32 secret)
- License: GNU Affero General Public License v3.0 (AGPLv3)
Deployment
Quick Start with Docker Compose
-
Start the container:
docker compose up -d -
Obtain the initial admin password: On first deployment, a one-time password for the
adminaccount is printed to standard output:docker compose logs web -
Log in: Open http://localhost:5004 (or your configured port). Log in as
adminusing the one-time password; you will be prompted to change it immediately.
Persistent Data
All persistent data (SQLite database sleepy_eepy.db and atomic secret key secret_key) is stored in the ./data directory mounted into the container.
Configuration
Configure your desired bind address and port number in docker-compose.yml
and start the container. Log in as admin and everything else can be
configured directly on the site in Site Settings.