Skip to content

Novanglus96/LenoreChore

Repository files navigation

Contributors Forks Stargazers Issues MIT License LinkedIn


About The Project

Product Name Screen Shot

LenoreChore is a smart, customizable chore management app. Designed for households or small groups, LenoreChore helps you keep track of tasks, assign chores efficiently, and maintain a consistent routine—even when life gets busy.

I originally built LenoreChore for my wife and me to simplify our weekly chore routine. After our daughter was born, I expanded the app to include parent/child user roles so we could introduce responsibility in a fun and manageable way.

Key Features

  • Custom Areas – Define and organize chores by specific locations (like rooms or zones) in your home.
  • 🗂️ Area Grouping – Group multiple areas for batch management and easier scheduling.
  • 👪 Child/Parent Users – Support for family-style roles with tailored visibility and controls.
  • 👤 Chore Assignment – Assign tasks to specific users with clear accountability.
  • 📈 Chore History Graph – Visualize completed chores over time to track progress and consistency.
  • 🛫 Vacation Mode – Pause chore assignments when you're away, then resume with your schedule intact.
  • 📱 Progressive Web App (PWA) – Install LenoreChore as an app on desktop or mobile. Works offline with automatic background sync when reconnected.

LenoreChore is built for self-hosting and is fully responsive—mobile- and desktop-friendly out of the box.

Whether you're managing your own chores or teaching kids how to contribute around the house, LenoreChore helps bring structure, fairness, and visibility to your daily routines.

(back to top)

Built With

  • Django
  • Vue
  • Docker

(back to top)

Getting Started

Welcome to LenoreChore! This guide will help you set up and run the application using Docker and Docker Compose.

Prerequisites

Make sure you have the following installed on your system:

Step 1: Create a .env File

Create a .env file in the root directory of the project.

  • PostgreSQL is optional — if the SQL_* variables are omitted, LenoreChore falls back to SQLite automatically.
  • Redis is bundled into the container and used automatically for caching and real-time sync — no configuration required. To use your own Redis server instead, set REDIS_URL (see Using an external Redis); the bundled instance is then skipped.

Minimal setup (SQLite + bundled Redis):

DEBUG=0
SECRET_KEY=mysupersecretkey
DJANGO_ALLOWED_HOSTS=localhost
CSRF_TRUSTED_ORIGINS=http://localhost
DJANGO_SUPERUSER_PASSWORD=supervisorpassword
DJANGO_SUPERUSER_EMAIL=someone@somewhere.com
DJANGO_SUPERUSER_USERNAME=supervisor
TIMEZONE=America/New_York

Full setup (PostgreSQL + external Redis):

DEBUG=0
SECRET_KEY=mysupersecretkey
DJANGO_ALLOWED_HOSTS=localhost
CSRF_TRUSTED_ORIGINS=http://localhost
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=LenoreChore
SQL_USER=LenoreChoreuser
SQL_PASSWORD=somepassword
SQL_HOST=db
SQL_PORT=5432
DJANGO_SUPERUSER_PASSWORD=supervisorpassword
DJANGO_SUPERUSER_EMAIL=someone@somewhere.com
DJANGO_SUPERUSER_USERNAME=supervisor
TIMEZONE=America/New_York
REDIS_URL=redis://redis:6379/0

Adjust these values according to your environment and application requirements.

Using an external Redis

REDIS_URL is optional. When it is unset (or points at localhost / 127.0.0.1), LenoreChore uses the Redis bundled inside the container. To use your own Redis server instead, set REDIS_URL to point at it — the bundled instance is then skipped automatically, so no redundant Redis runs.

Format: redis://[:password@]host:port/db

Scenario REDIS_URL
Bundled Redis (default) unset
Redis running as a Compose service named redis redis://redis:6379/0
External host by address redis://10.1.10.50:6379/0
Password-protected redis://:yourpassword@redis.internal:6379/0
TLS rediss://redis.internal:6380/0

Redis is used only for ephemeral caching and SSE pub/sub, so no persistence is required on the external server.

Step 2: Create a docker-compose.yml File

Minimal setup (single container, SQLite, no Redis):

services:
  app:
    image: novanglus96/lenorechore:latest
    container_name: LenoreChore
    ports:
      - "8080:80"
    volumes:
      - LenoreChore_data_volume:/home/app/web/data
      - LenoreChore_media_volume:/home/app/web/mediafiles
    env_file:
      - ./.env
    restart: unless-stopped

volumes:
  LenoreChore_data_volume:
  LenoreChore_media_volume:

Full setup (PostgreSQL + Redis):

services:
  app:
    image: novanglus96/lenorechore:latest
    container_name: LenoreChore
    ports:
      - "8080:80"
    volumes:
      - LenoreChore_static_volume:/home/app/web/staticfiles
      - LenoreChore_media_volume:/home/app/web/mediafiles
    depends_on:
      - db
      - redis
    env_file:
      - ./.env
    restart: unless-stopped
  db:
    image: postgres:15
    container_name: LenoreChore_db
    volumes:
      - LenoreChore_postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env
    environment:
      - POSTGRES_USER=${SQL_USER}
      - POSTGRES_PASSWORD=${SQL_PASSWORD}
      - POSTGRES_DB=${SQL_DATABASE}
  redis:
    image: redis:7-alpine
    container_name: LenoreChore_redis
    restart: unless-stopped

volumes:
  LenoreChore_postgres_data:
  LenoreChore_static_volume:
  LenoreChore_media_volume:

Step 3: Run the Application

  1. Start the services:

    docker compose up -d
  2. Access the application in your browser at http://localhost:8080.

Notes

  • Adjust exposed ports as needed for your environment.
  • If you encounter any issues, ensure your .env file has the correct values and your Docker and Docker Compose installations are up to date.

PWA and Reverse Proxy Requirement

PWA features (installability, service worker, offline sync) require LenoreChore to be served over HTTPS via a reverse proxy (e.g. Traefik, nginx with SSL termination). The reverse proxy must forward the X-Forwarded-Proto header to the container.

Plain HTTP deployments will not support PWA features. The install prompt will not appear and the service worker will not register.

Example Traefik label to ensure the header is forwarded (most Traefik setups do this automatically):

- "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"

Example nginx upstream config if you are using nginx as your outer proxy:

proxy_set_header X-Forwarded-Proto $scheme;

Note: If you previously accessed the site while it had a certificate error and clicked "Proceed anyway" in your browser, Chrome may remember that exception and block PWA installation. To fix this, go to Chrome Settings → Privacy and Security → Site Settings, find your site, and click Reset permissions — then reload the page.

Push Notifications (optional)

LenoreChore can send each user a daily Web Push summarizing what's due and overdue, at a time they choose. Users opt in (and pick a time) on their Profile page.

To enable it on the server, generate a VAPID key pair once and add it to your .env:

docker compose exec app python manage.py generate_vapid_keys

Copy the printed values into .env:

VAPID_PUBLIC_KEY=...
VAPID_PRIVATE_KEY=...
VAPID_SUBJECT=mailto:you@example.com

Restart the container. If these are unset, push notifications are simply disabled (the rest of the app is unaffected).

Caveats:

  • Web Push requires HTTPS via a reverse proxy — the same requirement as the PWA features above.
  • On iOS/iPadOS (16.4+), the user must first install the app to their home screen; Safari does not deliver Web Push to a regular browser tab.

Enjoy using LenoreChore!


Upgrading to v1.3

v1.3 consolidates the separate frontend, backend, worker, and nginx containers into a single app container. PostgreSQL and Redis are now optional.

What changed

Before (≤ v1.2) After (v1.3+)
novanglus96/lenorechore_frontend (removed)
novanglus96/lenorechore_backend (removed)
novanglus96/lenorechore_worker (removed)
novanglus96/lenoreapps_proxy (nginx) (removed)
novanglus96/lenorechore

Steps

  1. Stop your existing stack:

    docker compose down
  2. Replace your docker-compose.yml — remove the frontend, backend, worker, and nginx services and add the single app service. See the Getting Started examples above.

  3. Update your .env — remove the DATABASE=postgres line if present (no longer required). All other variables remain the same.

  4. Start the new stack:

    docker compose up -d

Will my data be safe?

Yes. PostgreSQL data is stored in a named Docker volume (LenoreChore_postgres_data) that exists independently of the containers. As long as your docker-compose.yml references the same volume name and your SQL_* env vars are unchanged, all data is preserved through the upgrade.

Note: If you choose to drop the db service and switch to SQLite, your existing PostgreSQL data will not be migrated automatically. Export your data first if needed.

(back to top)

Roadmap

  • v1.3 Release
    • Redis caching with write-through invalidation
    • Form validation (vee-validate + yup)
    • Dark/light theme toggle (persisted per browser)
    • Mobile UI improvements (edge-to-edge cards, fullscreen forms)
    • PWA support (installable, offline queuing, background sync)
    • Demo Data

See the open issues for a full list of proposed features (and known issues).

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the MIT License. See LICENSE.txt for more information.

(back to top)

Support

Buy Me A Coffee

Or

Contact

John Adams - Lenore.Apps@gmail.com

Project Link: https://github.com/Novanglus96/LenoreChore

(back to top)

Acknowledgements

A heartfelt thanks to our Patrons for their generous support! Your contributions help us maintain and improve this project.

⭐ Thank You to Our Supporters:

Red Supporter Badge Red Supporter Badge BuyMeACoffee Supporter Badge

Want to see your name here? Support us on Patreon to join our amazing community and shape the future of LenoreChore!

(back to top)

About

A simple chore app.

Topics

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Sponsor this project

Packages

 
 
 

Contributors