Family HQ

Family HQ is a full‑stack Flask application designed to keep a busy household organised. Built for real daily use, it brings together shared messaging, meal planning, activity scheduling, and personalised dashboards in one place. With secure authentication, modular architecture, and a clean, responsive interface, it supports the routines of a family with clarity and reliability.

Python Flask SQLAlchemy Bootstrap 5 Jinja2 HTML/CSS JavaScript

Overview

Family HQ is a full‑stack web application designed to simplify family organisation and communication. It brings together shared messaging, meal planning, activity scheduling, and household coordination into a single, easy‑to‑use platform. The application provides a personalised dashboard, secure user accounts, and a clean interface that keeps families connected and organised.

The goal of Family HQ was to build a practical, real‑world system that supports everyday family life while giving me hands‑on experience with authentication, multi‑user logic, structured routing, and modular Flask application design.

Core Features

Messaging

A simple, persistent chat system that keeps everyone aligned on plans, reminders, and last‑minute changes. Messages are stored in the database and displayed in real time via lightweight polling.

Meal Planning

A shared weekly meal planner that helps reduce decision fatigue and keeps everyone informed about dinner plans. Meals can be added, edited, and viewed by all authenticated users.

Activities

A central place to track school events, clubs, appointments, and family commitments. Activities are displayed chronologically and surfaced on the dashboard.

Admin Tools

User management, content editing, and configuration options for the household. Built with role‑based access in mind to keep sensitive actions restricted.

Technical Breakdown

Family HQ is built with a modular, maintainable structure that mirrors production‑grade Flask applications.

  • Flask Blueprints — Each feature (dashboard, meals, activities, chat, admin) is isolated into its own blueprint for clean separation of concerns.
  • SQLAlchemy ORM — Relational models for users, messages, meals, and activities, with clear relationships and constraints.
  • Jinja Templates — Server‑rendered pages with reusable components and layout inheritance.
  • Bootstrap 5 — A responsive, accessible UI that works across desktops, tablets, and phones.
  • Authentication & Sessions — Secure login, password hashing, and session management.
  • Polling‑based Chat Updates — A pragmatic approach to real‑time messaging without the overhead of WebSockets.

This structure makes the project easy to extend, test, and maintain — and reflects the same architectural discipline used in your workplace Flask projects.

Technical Challenges and Solutions

  • Managing multi‑user data cleanly
  • Ensured that all meals, activities, and messages are scoped correctly and displayed consistently across users, avoiding duplication and race conditions.
  • Designing a scalable blueprint layout
  • Refactored early prototypes into a modular structure that supports future features without becoming tangled or monolithic.
  • Efficient dashboard loading
  • Optimised queries to avoid N+1 patterns when pulling meals, activities, and messages together for the dashboard.
  • Balancing simplicity with real‑world use
  • Kept the UI intentionally minimal so children and adults can use it easily, while still supporting more advanced admin functions.

Routing Example

Python
@dashboard_bp.route("/dashboard")
@login_required
def dashboard():
    meals = Meal.query.filter_by(user_id=current_user.id).all()
    activities = Activity.query.filter_by(user_id=current_user.id).all()
    messages = ChatMessage.query.order_by(ChatMessage.timestamp.desc()).limit(10)
    return render_template("dashboard.html", meals=meals, activities=activities, messages=messages)

Chat Message Model

Python
class ChatMessage(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    content = db.Column(db.String(500), nullable=False)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)

Meal Planning Model

Python
class Meal(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.Date, nullable=False)
    meal = db.Column(db.String(120), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

Activity Scheduling

Python
class Activity(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), nullable=False)
    date = db.Column(db.Date, nullable=False)
    time = db.Column(db.Time, nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

What I Learned

Building Family HQ helped me develop skills in:

  • Designing multi‑user systems
  • Implementing authentication and protected routes
  • Structuring a modular Flask backend
  • Managing relational data models
  • Building real‑time or near‑real‑time features
  • Creating clean, reusable UI components
  • Thinking about UX for everyday, non‑technical users

It also strengthened my understanding of how to build maintainable, scalable web applications.

Future Improvements

  • Shared to‑do lists with task assignment
  • Push notifications for events and messages
  • Shared shopping lists linked to meal plans
  • Role‑based permissions (parents vs children)
  • Mobile app version using the same backend
  • Improved analytics for household activity

Homepage

Homepage

Homepage

Dashboard

Dashboard

Dashboard

Chat

Chat

Chat

Meal Planner

Meal Planner

Meal Planner

Meal Planner Detail

Meal Planner Detail

Meal Planner Detail

Activity Planner

Activity Planner

Activity Planner

Activity Planner Detail

Activity Planner Detail

Activity Planner Detail