1559c48104b60a48f516598ca32fdd4d4b6e659c
Implement complete member management system with GraphQL API per OpenSpec proposal. Only firstName is required; all other fields are optional with conditional validation. Key features: - GraphQL CRUD operations (create, read, update, delete members) - SQLAlchemy 2.0 async with SQLite database - Alembic database migrations - Conditional validation (email/phone validated only when provided) - Member fields: firstName (required), lastName, address, email, phone (all optional) - Database seed script with sample member - FastAPI with Strawberry GraphQL integration Implementation details: - Python 3.11+ with uv package manager - Async database sessions throughout - Proper error handling and validation - Code quality: black, isort, ruff - Comprehensive end-to-end testing completed All 20 tasks from OpenSpec proposal completed successfully. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Clubber
A toolset for managing members of non-profit societies (Vereine) with AI-powered administration.
Overview
Clubber provides a GraphQL API for member management combined with an MCP (Model Context Protocol) server that enables AI assistants to help with society administration tasks.
Current Status: Early development - OpenSpec documentation and project structure in place.
Architecture
The system consists of two main components:
-
GraphQL API - Core backend for member data management
- Built with FastAPI and Strawberry GraphQL
- Database-agnostic design (SQLite for development, PostgreSQL for production)
- SQLAlchemy 2.0 ORM with async support
-
MCP Server - AI assistant integration layer
- Connects to the GraphQL API
- Provides tools for AI agents to manage society operations
- Service account authentication
Tech Stack
- Python 3.11+ - Primary language
- uv - Fast package and project manager
- FastAPI - Async web framework
- Strawberry GraphQL - Type-safe GraphQL with Python type hints
- SQLAlchemy 2.0 - Database ORM
- Alembic - Database migrations
Project Structure
clubber/
├── openspec/ # Specification-driven development
│ ├── project.md # Project conventions and context
│ ├── specs/ # Current specifications
│ └── changes/ # Change proposals
├── CLAUDE.md # AI assistant instructions
└── README.md # This file
Getting Started
Prerequisites
- Python 3.11 or higher
- uv package manager
Setup
# Clone the repository
git clone ssh://git@codeberg.org/gurix/clubber.git
cd clubber
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Set up the project (when implemented)
# uv venv
# uv pip install -e .
Development Workflow
This project uses OpenSpec for specification-driven development:
- Review existing specs in
openspec/specs/ - Create change proposals in
openspec/changes/before implementing features - Validate proposals with
openspec validate --strict - Implement changes following the proposal
- Archive completed changes after deployment
See openspec/AGENTS.md for detailed workflow instructions.
Working with Git Worktrees
We use git worktrees for parallel development:
# Create a worktree for a feature branch
git worktree add ../clubber-feature-name feature/feature-name
# Work in the worktree
cd ../clubber-feature-name
# Remove worktree after merge
git worktree remove ../clubber-feature-name
Contributing
- Read
openspec/project.mdfor project conventions - For new features, create an OpenSpec proposal first
- Follow the coding style (Black, isort, ruff)
- Write tests for new functionality
- Use conventional commits (
feat:,fix:,docs:, etc.)
License
The MIT License
Contact
Markus Graf - info@markusgraf.ch
Acknowledgments
Built with support from:
Languages
Python
70.2%
JavaScript
29%
Mako
0.8%