Contributing to Famlab¶
Thank you for your interest in contributing to Famlab! This guide will help you understand our development process and documentation standards.
Documentation-First Development
We're currently in a documentation-first development phase. Before writing any code, we're defining the complete user experience and system architecture through documentation. This helps us validate ideas and scope before implementation.
Development Philosophy¶
Core Principles¶
- Deploy once, use forever - Everything should aim at zero-maintenance after initial setup
- MVP-focused - Build distributed backup networks completely before expanding features
- Family-friendly - Solutions work for all technical skill levels in a household
- Document first - Define user experience before implementation
Read more about our Principles on the dedicated page.
Documentation Framework¶
We follow the Diátaxis framework for organizing documentation:
- Tutorials (
docs/tutorials/
) - Learning-oriented, step-by-step guides - How-to guides (
docs/how-to/
) - Problem-solving oriented, goal-focused - Reference (
docs/reference/
) - Information-oriented, comprehensive details - Explanation (
docs/explanation/
) - Understanding-oriented, clarifying concepts
When contributing documentation, consider which category best fits your content.
Architecture Decision Process¶
When to Write an ADR¶
Create an Architecture Decision Record (ADR) for:
- Significant architectural choices - Technology selection, system boundaries
- Design patterns - How components interact, data flow decisions
- Deployment strategies - Hardware requirements, installation approaches
- Scope decisions - What's included/excluded from MVP or releases
ADR Workflow¶
- Copy one of the templates from
docs/reference/architecture-decisions/README.md
- Number sequentially - Use next available ADR number
- Write the ADR following the MADR template
- Get feedback through pull request review
- Update status when decision is finalized
See ADR process documentation for templates and examples.
Development Workflow¶
Current Phase: Documentation Development¶
- Identify gaps - Find missing or unclear documentation
- Write ADR if needed - Document any architectural decisions
- Follow Diátaxis - Place content in appropriate documentation category
- Focus on user experience - Document what users will actually do
- Validate through review - Ensure documentation serves user needs
Future Phase: Implementation¶
Once documentation is complete:
- Tests first - Write comprehensive tests before implementation
- Atomic commits - Each commit represents one logical change
- Zero maintenance - Every component must be "set and forget"
- MVP scope only - No feature creep beyond documented scope
Getting Started¶
- Read the architecture - Start with our Principles
- Check current ADRs - Review the architecture decisions
- Understand the MVP - Read about the first release's scope
- Follow getting started - Walk through our tutorial
- Set up your environment - Follow the steps in the source code's main README
- Get familiar with the testing principles - Check out our Testing Reference
Before Submitting Proposals¶
- Run tests locally:
mise run test
must pass - Add tests for new features: Shell tests or console-test blocks
- Update documentation: Keep examples testable where appropriate
- Check test coverage: New CLI commands should have console-test examples
Questions and Discussion¶
- Architecture questions - Open an issue to discuss before writing ADR
- Documentation clarity - Suggest improvements to existing docs
- Scope questions - Reference MVP document and existing ADRs
- Implementation timing - Remember we're documentation-first right now
License¶
This project is licensed under the GNU Affero General Public License v3.0. By contributing, you agree that your contributions will be licensed under the same license.
Remember: We're building the documentation first to ensure we build the right thing. Every contribution helps validate our approach before we commit to code.