GitHub - DavidMiserak/poopyfeed: Baby care tracking web app for feeding, diapers, and sleep. Django 6 + Angular 21.

4 min read Original article ↗

Python 3.13+ Node 20+ Django 6.0 Angular 21 pre-commit

A baby care tracking web application for monitoring feeding, diapers, and sleep patterns. Built with Django 6.0 (backend) and Angular 21 (frontend).

Features

  • Multi-child support: Track multiple children from one account
  • Child sharing: Share access with co-parents and caregivers
  • Tracking: Monitor feedings (bottle/breast), diaper changes, and naps
  • Role-based access: Owner, co-parent, and caregiver roles
  • REST API: Token-authenticated API for frontend and mobile apps
  • PWA ready: Progressive Web App capabilities
  • Analytics: Visualize feeding, diaper, and sleep trends
  • Data Export: Export data as CSV or PDF

Screenshots

See docs/SCREENSHOTS.md for app screenshots (sign up, dashboard, analytics, and more).

Quick Start

Prerequisites

  • Podman (recommended) or Docker
  • Make
  • Git

To use Docker instead of Podman, set RUNTIME=docker in the root Makefile or use Docker Compose directly.

Installation

# Clone repository with submodules
git clone https://github.com/DavidMiserak/poopyfeed.git
cd poopyfeed
git submodule update --init --recursive

# First-time setup (install hooks, build images)
make setup

# Start all services (frontend, backend, database, Redis, Celery worker)
make run

Access

Initial Setup

With make run already running:

# Run database migrations
make migrate

# Create an admin user
make createsuperuser

Project Structure

poopyfeed/
├── front-end/           # Angular 21 frontend (submodule)
│   ├── poopyfeed/       # Angular application
│   ├── Containerfile    # Multi-stage Docker build
│   └── Makefile         # Frontend commands
├── back-end/            # Django 6.0 backend (submodule)
│   ├── django_project/  # Django settings
│   ├── accounts/        # User management
│   ├── children/        # Child profiles & sharing
│   ├── diapers/         # Diaper tracking
│   ├── feedings/        # Feeding tracking
│   ├── naps/            # Nap tracking
│   ├── Containerfile    # Django container
│   └── Makefile         # Backend commands
├── android/             # Android app (Kotlin)
├── docs/                # Design and persona documentation
├── podman-compose.yaml  # Orchestration (frontend, backend, db, Redis, Celery)
├── Makefile             # Root commands
├── DEPLOYMENT.md        # Full deployment guide
└── README.md            # This file

Development

Common Commands

make run              # Start all services
make stop             # Stop all services
make restart          # Stop and start
make logs             # View all logs
make logs-backend     # Backend logs only
make logs-frontend    # Frontend logs only
make migrate          # Run database migrations
make test-backend     # Run Django tests (with coverage)
make test-frontend    # Run Vitest tests
make clean            # Stop and remove volumes

Optional: make redis-cli, make celery-worker, make celery-beat for Redis/Celery inspection or running the scheduler.

Android

Build and test the Android app (requires make run for backend):

make build-android    # Build debug APK
make test-android     # Run unit tests
make lint-android     # Run lint checks

See DEPLOYMENT.md for complete documentation.

Architecture

  • Frontend: Angular 21 (standalone components, signals, SSR)
  • Backend: Django 6.0 + Django REST Framework
  • Database: PostgreSQL 14
  • Redis: Cache, sessions, Celery broker (started with make run)
  • Celery: Background tasks (e.g. PDF export); worker runs with make run
  • Authentication: django-allauth (email-based) + Token auth (API)
  • Styling: Tailwind CSS v4
  • Testing: Vitest (frontend), Django TestCase (backend)

Hot Reload

Both frontend and backend support hot reload during development:

  • Edit files in front-end/poopyfeed/ or back-end/
  • Changes automatically reload in containers
  • No rebuild needed!

API Integration

The frontend connects to the backend API via a proxy configuration:

// Frontend makes requests to /api/v1/*
this.http.get("/api/v1/children/");

// Proxy forwards to http://backend:8000/api/v1/children/

See front-end/docs/API.md for complete API documentation.

Deployment

Local Development

make run  # Uses podman-compose.yaml

Production

  • Backend: Deploy to Render (see DEPLOYMENT.md)
  • Frontend: Build production image with nginx (see front-end/Containerfile)

Testing

# Backend tests (98%+ coverage, 280+ tests)
make test-backend

# Frontend tests (Vitest)
make test-frontend

Code Quality

Pre-commit hooks enforce:

  • Conventional commit messages
  • Code formatting (Black, Prettier)
  • Linting (Bandit, ESLint)
  • Spell checking (codespell)
make pre-commit-setup  # Install hooks

Documentation

Technology Stack

Backend:

  • Django 6.0
  • Django REST Framework
  • Djoser (API auth)
  • django-allauth (web auth)
  • PostgreSQL 14
  • Redis (cache, sessions, Celery broker)
  • Celery (background tasks)
  • Python 3.13

Frontend:

  • Angular 21
  • TypeScript 5.9 (strict mode)
  • Tailwind CSS v4
  • Vitest (testing)
  • Server-Side Rendering (SSR)

DevOps:

  • Podman (default) or Docker
  • Compose orchestration
  • Multi-stage containers
  • Pre-commit hooks
  • Make automation

License

See the LICENSE file for details.