Lineage is a digital space dedicated to strengthening family connections and preserving precious memories.
Live Demo | Read the Case Study
As families expand and geographic distances grow, keeping track of family history, coordinating events, and preserving shared memories becomes increasingly difficult. Traditional methods often rely on fragmented social media groups or physical records that are susceptible to being lost or forgotten.
Lineage is a comprehensive digital platform designed to be a centralized hub for families. It allows users to intuitively map out their family trees, securely record vital dates and relationships, and coordinate family events within a private, authenticated space.
- Interactive Family Tree: Visually explore and manage complex family dynamics (roots, parents, children, spouses).
- Event Planning: Plan, track, and organize upcoming and past family events with location and date tracking.
- Role-Based Access & Privacy: Secure authentication system ensuring family data is only visible to authorized members.
- Shareable Links: Generate secure, tokenized links to invite family members to explore the tree.
- Responsive UI: Built with TailwindCSS for a seamless experience on both desktop and mobile.
- Backend: Python, Flask, SQLAlchemy (ORM)
- Database: SQLite (Development) / PostgreSQL (Production ready)
- Frontend: HTML5, Jinja2, TailwindCSS, JavaScript, jQuery
- Testing & CI: Pytest, GitHub Actions
Lineage follows a modular, monolithic architecture using Flask Blueprints to separate concerns (auth, family, member, event, link).
For deep dives into the system design, please refer to our documentation directory:
- Application Flow
- Database Entity Relationship Diagram (ERD)
- Deployment & AWS Infrastructure
- Security & Scalability
- Python 3.11+
- Git
-
Clone the repository:
git clone https://github.com/joelmuhoho/lineage.git cd lineage -
Set up a virtual environment (Recommended):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
Environment Variables: Create a
.envfile in the root directory. Use.env.exampleas a template:FLASK_APP=run.py FLASK_ENV=development SECRET_KEY=your_secure_secret_key LINEAGE_DATABASE_URI=sqlite:///lineage.db
-
Initialize the Database:
flask db init flask db migrate -m "Initial migration" flask db upgrade -
Run the application:
flask run --port=5001
-
Access the app at
http://localhost:5001.
Lineage uses pytest for unit and integration testing.
pytest
- Complex Data Modeling: Designing a self-referential database schema for family trees required strict application-level validation to prevent logical loops (e.g., a child cannot be older than a parent).
- State Management: Managing complex nested UI states (like expanding/collapsing family nodes) taught valuable lessons in combining server-side rendering (Jinja2) with asynchronous JavaScript (AJAX).
- Security First: Implementing secure JWT tokens for password resets and shareable links reinforced the importance of stateless, time-bound authentication.