119 lines
3.9 KiB
Markdown
119 lines
3.9 KiB
Markdown
# Product Context: Bitpoll Nix Flake
|
|
|
|
## Why This Project Exists
|
|
|
|
### Problem Statement
|
|
Bitpoll is a valuable Django-based web application for scheduling meetings and conducting polls, but it lacks proper packaging for the Nix ecosystem. NixOS users and organizations wanting to deploy Bitpoll face several challenges:
|
|
|
|
1. **Complex Manual Setup**: Installing Bitpoll requires manual dependency management and configuration
|
|
2. **Reproducibility Issues**: Traditional deployment methods don't guarantee consistent environments
|
|
3. **Security Concerns**: Manual installations often lack proper security hardening
|
|
4. **Maintenance Overhead**: Updates and system management become complex without proper packaging
|
|
|
|
### Solution Approach
|
|
This Nix flake solves these problems by providing:
|
|
- **Declarative Configuration**: Everything defined in Nix expressions
|
|
- **Reproducible Builds**: Pinned dependencies ensure consistent deployments
|
|
- **Security by Default**: Proper user isolation and systemd hardening
|
|
- **Easy Deployment**: Single-command installation and updates
|
|
|
|
## What Problems It Solves
|
|
|
|
### For System Administrators
|
|
- **Simplified Deployment**: Deploy Bitpoll with a single NixOS configuration
|
|
- **Consistent Environments**: Development, staging, and production environments are identical
|
|
- **Security Hardening**: Built-in security measures without manual configuration
|
|
- **Easy Updates**: Atomic updates and rollbacks through NixOS
|
|
|
|
### For Developers
|
|
- **Development Environment**: Instant development setup with `nix develop`
|
|
- **Testing**: Easy testing of different configurations
|
|
- **Contribution**: Clear packaging structure for contributing improvements
|
|
|
|
### For Organizations
|
|
- **Compliance**: Reproducible deployments aid in compliance and auditing
|
|
- **Reliability**: Reduced deployment failures through declarative configuration
|
|
- **Scalability**: Easy replication across multiple servers
|
|
|
|
## How It Should Work
|
|
|
|
### User Experience Goals
|
|
|
|
#### Simple Installation
|
|
```bash
|
|
# Add to NixOS configuration
|
|
services.bitpoll.enable = true;
|
|
# Rebuild system
|
|
sudo nixos-rebuild switch
|
|
```
|
|
|
|
#### Flexible Configuration
|
|
```nix
|
|
services.bitpoll = {
|
|
enable = true;
|
|
port = 8080;
|
|
allowedHosts = [ "bitpoll.company.com" ];
|
|
secretKeyFile = "/etc/bitpoll/secret";
|
|
};
|
|
```
|
|
|
|
#### Development Workflow
|
|
```bash
|
|
# Clone and develop
|
|
git clone <repo>
|
|
nix develop
|
|
# Instant development environment ready
|
|
```
|
|
|
|
### Expected Behavior
|
|
|
|
#### Production Deployment
|
|
- Service starts automatically on boot
|
|
- Proper logging through systemd
|
|
- Graceful handling of failures and restarts
|
|
- Secure file permissions and user isolation
|
|
- Database migrations run automatically
|
|
|
|
#### Development Environment
|
|
- All dependencies available immediately
|
|
- Django management commands work out of the box
|
|
- Hot reloading for development
|
|
- Easy testing of configuration changes
|
|
|
|
#### Data Management
|
|
- All data stored in `/var/lib/bitpoll`
|
|
- Proper backup and restore capabilities
|
|
- Database migrations handled automatically
|
|
- Static files served efficiently
|
|
|
|
## Target Users
|
|
|
|
### Primary Users
|
|
- **NixOS System Administrators**: Managing Bitpoll deployments
|
|
- **DevOps Engineers**: Implementing CI/CD for Bitpoll
|
|
- **Organizations**: Deploying internal polling/scheduling systems
|
|
|
|
### Secondary Users
|
|
- **Nix Package Maintainers**: Contributing to the ecosystem
|
|
- **Bitpoll Contributors**: Testing and developing Bitpoll itself
|
|
- **Security Teams**: Auditing and hardening deployments
|
|
|
|
## Success Metrics
|
|
|
|
### Technical Metrics
|
|
- Zero-downtime deployments
|
|
- Sub-minute startup times
|
|
- Successful automatic migrations
|
|
- No security vulnerabilities in default configuration
|
|
|
|
### User Experience Metrics
|
|
- Single-command deployment success
|
|
- Clear error messages for misconfigurations
|
|
- Comprehensive documentation coverage
|
|
- Active community adoption
|
|
|
|
### Operational Metrics
|
|
- Reliable service uptime
|
|
- Efficient resource utilization
|
|
- Successful backup/restore operations
|
|
- Easy troubleshooting and debugging
|