Sleep tracking web application to log, visualize, and understand your resting rhythm. Flask BE and Vanilla JS FE. https://sleepy-eepy.vitapavlik.cz/
  • Python 47.2%
  • HTML 36.8%
  • CSS 10.2%
  • JavaScript 4.6%
  • Shell 0.7%
  • Other 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-10 15:24:14 +01:00
static timeline view - view details by clicking on bars 2026-11-10 15:24:14 +01:00
templates timeline view - view details by clicking on bars 2026-11-10 15:24:14 +01:00
translations timeline view - view details by clicking on bars 2026-11-10 15:24:14 +01:00
.dockerignore first version 2026-11-10 06:47:48 +01:00
.gitignore first version 2026-11-10 06:47:48 +01:00
app.py uuid tokens for shared 2026-11-10 07:00:27 +01:00
auth_service.py first version 2026-11-10 06:47:48 +01:00
config.py first version 2026-11-10 06:47:48 +01:00
database.py first version 2026-11-10 06:47:48 +01:00
docker-compose.yml first version 2026-11-10 06:47:48 +01:00
docker-entrypoint.sh first version 2026-11-10 06:47:48 +01:00
Dockerfile first version 2026-11-10 06:47:48 +01:00
favicon.ico first version 2026-11-10 06:47:48 +01:00
i18n.py first version 2026-11-10 06:47:48 +01:00
init_db.py first version 2026-11-10 06:47:48 +01:00
LICENSE.txt first version 2026-11-10 06:47:48 +01:00
log_service.py first version 2026-11-10 06:47:48 +01:00
models.py first version 2026-11-10 06:47:48 +01:00
prompt.txt timeline view - view details by clicking on bars 2026-11-10 15:24:14 +01:00
README.md add readme 2026-11-10 15:11:40 +01:00
requirements.txt first version 2026-11-10 06:47:48 +01:00
sleep_service.py timeline view - view details by clicking on bars 2026-11-10 15:24:14 +01:00
test_app.py uuid tokens for shared 2026-11-10 07:00:27 +01:00
timezone_utils.py first version 2026-11-10 06:47:48 +01:00
wsgi.py first version 2026-11-10 06:47:48 +01:00

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

  1. Start the container:

    docker compose up -d
    
  2. Obtain the initial admin password: On first deployment, a one-time password for the admin account is printed to standard output:

    docker compose logs web
    
  3. Log in: Open http://localhost:5004 (or your configured port). Log in as admin using 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.