A modern, interactive family tree visualization and management application built with Vue 3, TypeScript, and Tailwind CSS. This application allows users to create, manage, and visualize complex family relationships with an intuitive interface.
- Interactive Family Tree Visualization: Navigate through generations with a dynamic tree view
- Comprehensive Member Management: Add, edit, and delete family members with detailed information
- Complex Relationship Support: Handle multiple spouses, children, and parent relationships
- Search & Navigation: Quick search functionality to find and navigate to specific family members
- Data Persistence: Automatic local storage with import/export capabilities
- Personal Details: First name, middle names, last name, maiden name
- Vital Information: Birth/death dates and places, gender, living status
- Family Relationships: Parents, spouses, and children with bidirectional relationship management
- Additional Data: Photo URLs, personal notes, creation/update timestamps
- Responsive Design: Works seamlessly on desktop and mobile devices
- Dark Theme: Modern dark interface with excellent contrast and readability
- Sliding Drawer: Detailed member information in a side panel
- Modal Forms: Clean, organized forms for adding and editing members
- Search Results: Real-time search with member details and quick navigation
You can now export all upcoming anniversaries (birthdays, marriage anniversaries, and memorial dates) to a standard .ics calendar file. This file can be imported into Google Calendar, Apple Calendar, Outlook, and most other calendar applications.
- Open the Anniversary Drawer (left side of the app)
- At the top of the list, click the Export to Calendar button
- This will download a file named
family-anniversaries.ics - Import this file into your favorite calendar app to see all your family anniversaries as events
Each event includes:
- The full name(s) of the person or couple
- The type of anniversary (birthday, marriage, memorial)
- The date and a description (e.g., age or years married)
This feature helps you never miss an important family date again!
- Frontend Framework: Vue 3 with Composition API
- Language: TypeScript for type safety
- Styling: Tailwind CSS for utility-first styling
- Build Tool: Vite for fast development and building
- State Management: Vue's reactive system with localStorage persistence
src/
โโโ components/ # Vue components
โ โโโ FamilyTree.vue # Main tree visualization
โ โโโ FamilyNode.vue # Individual member cards
โ โโโ GenerationLine.vue # Horizontal generation display
โ โโโ Header.vue # Application header with search
โ โโโ MemberForm.vue # Add/edit member form
โ โโโ MemberDetail.vue # Member information display
โ โโโ ... # Other UI components
โโโ composables/ # Reusable Vue composables
โ โโโ useFileOperations.ts # File import/export logic
โโโ types.d.ts # TypeScript type definitions
โโโ App.vue # Main application component
- Vue 3: Core framework for building the UI
- Tailwind CSS: Utility-first CSS framework for styling
- Vite: Fast build tool for development and production
- TypeScript: Strongly typed programming language for better code quality
The application uses a flexible data model that supports complex family structures:
interface Member {
id: number
firstName: string
middleNames: string[]
lastName: string
maidenName?: string
birthDate?: string
birthPlace?: string
deathDate?: string
deathPlace?: string
gender: 'male' | 'female' | 'other'
isAlive: boolean
parentUnionId?: number
photoUrl?: string
notes?: string
createdAt: string
updatedAt: string
}
interface Union {
id: number
member1Id: number
member2Id: number
marriageDate: string
marriagePlace: string
divorceDate?: string
divorcePlace?: string
childrenIds: number[]
}The family tree uses a navigation system that allows users to explore different generations:
- Root View: Shows members without parents
- Parent Navigation: Click to view a member's parents
- Child Navigation: Click to view a member's children
- Search Navigation: Jump directly to any member via search
The application maintains bidirectional relationships automatically:
- Parent-Child: When you set a parent, the child is automatically added to the parent's children list
- Spouse Relationships: When you add a spouse, both members are updated with the relationship
- Cascade Updates: Deleting a member automatically updates all related members
- Local Storage: All data is automatically saved to browser localStorage
- Import/Export: Full JSON import/export functionality with validation
- Data Validation: Robust validation ensures data integrity during import
- Node.js (version 16 or higher)
- npm or yarn package manager
- Clone the repository:
git clone <repository-url>
cd family_tree- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and navigate to
http://localhost:5173
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run type-check- Run TypeScript type checkingnpm run format- Format code with Prettier
- Click the "Add a family member" button in the header
- Fill in the required information (first name, last name, gender)
- Optionally add birth/death information, parents, spouses, and children
- Click "Save" to create the member
- View Parents: Click the "Parents" button on any member card
- View Children: Click the "Children" button on any member card
- Return to Root: Use the navigation breadcrumbs or search for a root member
- Use the search bar in the header
- Type any part of a member's name
- Click on a search result to navigate to that member in the tree
- Export: Use the "Actions" dropdown โ "Download Tree Data" to save your family tree
- Import: Use the "Actions" dropdown โ "Upload Tree Data" to load a previously exported file
- Clear All: Use the "Actions" dropdown โ "Remove all family members" to start fresh
- Desktop: Full-featured interface with side drawer for member details
- Mobile: Optimized layout with collapsible sections and touch-friendly controls
- Keyboard Navigation: Full keyboard support for all interactions
- Screen Reader Support: Proper ARIA labels and semantic HTML
- High Contrast: Dark theme with excellent contrast ratios
- Virtual Scrolling: Efficient rendering of large family trees
- Lazy Loading: Components load only when needed
- Optimized Updates: Minimal re-renders through Vue's reactivity system
The application is designed with extensibility in mind. Potential future features include:
- Photo Management: Upload and manage family photos
- Timeline View: Chronological view of family events
- Collaboration: Share family trees with other users
- Advanced Search: Search by dates, locations, or relationships
- Export Formats: PDF, GEDCOM, or other genealogy formats
- Undo/Redo: Action history and reversal capabilities
- Desktop App: Build a desktop app using Electron
This project follows Vue.js best practices and design patterns. When contributing:
- Follow the existing code structure and patterns
- Use TypeScript for type safety
- Maintain the dark theme design
- Ensure responsive design works on all screen sizes
- Add proper error handling and validation
- Write clear, descriptive commit messages
This project is open source and available under the MIT License.
Built with โค๏ธ using Vue 3, TypeScript, and Tailwind CSS