A Django-based digital humanities project for researching and cataloging textile trade data, with integrated museum collection crawling and comprehensive data management capabilities.
Tech Stack: Python 3.12+ / Django 6.0 / Wagtail 7 / PostgreSQL 17 / Daphne / Tailwind CSS
Connecting Threads is a digital scholarship project that combines:
- Textile record management with comprehensive metadata and relationships
- Museum collection integration through automated crawling of V&A and Cooper-Hewitt APIs
- Research workflow tools for reviewing, publishing, and exporting data
- Public-facing interface built with Wagtail CMS
- Modern admin interface powered by Django Unfold
- Automated data fetching from Victoria & Albert Museum and Cooper-Hewitt APIs
- Image downloading with thumbnail generation and IIIF support
- Review workflow for quality control before publishing
- Batch operations for efficient data processing
- Comprehensive metadata including dates, locations, subjects, and textile types
- Relationship mapping between places, areas, subjects, and named actors
- Image management with public/private visibility controls
- Tag-based organization with keyword support
- Modern UI with Django Unfold theme integration
- Thumbnail previews in list views for quick visual identification
- Advanced filtering and search capabilities
- Bulk actions for efficient data management
- Export functionality with customizable field mappings
- Multiple export formats (CSV, Excel, JSON) via django-import-export
- Custom field mappings with human-readable column names
- Comprehensive data including relationships, images, and metadata
- Research-ready datasets for analysis and sharing
- Python 3.12+
- PostgreSQL 17+
- Node.js (for Tailwind CSS compilation)
The project uses uv for fast Python package management:
cd ct-django
# Install dependencies
uv sync
# Install pre-commit hooks for code formatting
uv run pre-commit install
uv run pre-commit autoupdateAlternatively, start the complete application and PostgreSQL stack with Docker:
docker compose up --buildThe application is available at http://localhost:8000/, with a container
health endpoint at http://localhost:8000/health/.
Copy the documented development defaults, then replace placeholder values as needed:
cp .env.example .env# Create PostgreSQL database
createdb connectingthreads
# Run migrations
uv run python manage.py migrate
# Create superuser
uv run python manage.py createsuperuser# Start the Django development server
uv run python manage.py runserver
# In a separate terminal, compile Tailwind CSS
uv run python manage.py tailwind startCommon development tasks are available via Makefile:
make preview: Start the development server (uv run python manage.py runserver)make tailwind: Start Tailwind CSS compilation in watch modemake mm: Create Django migrations (uv run python manage.py makemigrations)make migrate: Apply Django migrations (uv run python manage.py migrate)make check: Run Django system checksmake test: Run the pytest suitemake lint: Run code linting and formattingmake shell: Open the Django shellmake help: List available commands
ct-django/
├── config/ # Django settings and configuration
├── material/ # Core textile record models and admin
├── crawler/ # Museum API crawling functionality
├── exhibits/ # Exhibition and display models
├── theme/ # Tailwind CSS theme and styling
├── templates/ # Django templates
├── static/ # Static assets
├── media/ # Uploaded files and images
├── pyproject.toml # Python dependencies and tool configuration
└── uv.lock # Reproducible Python dependency lockfile
- Access the admin interface at
/admin/ - Navigate to Crawler → Staged Museum Items
- Use the fetch buttons to download data:
- "Fetch All Data" - Downloads from both museums
- "Fetch Cooper-Hewitt" - Downloads from Cooper-Hewitt API
- "Fetch V&A" - Downloads from Victoria & Albert Museum API
- Review fetched items in the Staged Museum Items list
- Add review notes and mark items as reviewed
- Publish approved items to create TextileRecord entries
- Manage published records in the Textile Records admin
Both Staged Museum Items and Textile Records support comprehensive data export:
- Select records to export (or export all)
- Choose export format (CSV, Excel, JSON)
- Download research-ready datasets with proper column names
We use pre-commit hooks to maintain code quality:
# Install hooks
uv run pre-commit install
# Run hooks manually
uv run pre-commit run --all-filesCode formatting is handled by:
- Black for Python code formatting
- djhtml for Django template formatting
- Ruff for Python linting
Connecting Threads is released under the MIT License.
This project is developed by the Roy Rosenzweig Center for History and New Media at George Mason University. Museum data is provided through the generous APIs of:
- Victoria & Albert Museum, London
- Cooper-Hewitt, Smithsonian Design Museum