A Django-based crowdsourcing tool for data collection and validation. Upload CSV files, create dynamic questions, and collect responses from contributors.
- CSV Upload & Parsing: Upload CSV files and automatically parse data
- Dynamic Questions: Create questions with placeholders that pull from CSV data
- Multiple Question Types: Support for text, textarea, multiple choice, and true/false
- UUID-based URLs: Unique, shareable links for each assignment
- Progress Tracking: Real-time progress monitoring for creators
- Export Functionality: Download enriched CSV files with all responses
- User Roles: Different interfaces for creators and contributors
- Anonymous Contributions: Support for both authenticated and anonymous contributors
- Python 3.9+
- PostgreSQL (or SQLite for development)
- Django 4.2.7
-
Clone the repository
cd claude-assignments
-
Install dependencies
pip install -r requirements.txt
-
Set up environment variables
cp .env.example .env # Edit .env with your database credentials and secret key
-
Run migrations
python manage.py makemigrations python manage.py migrate
-
Create a superuser
python manage.py createsuperuser
-
Run the development server
python manage.py runserver
-
Access the application
- Main site: http://localhost:8000
- Admin panel: http://localhost:8000/admin
- Login with your credentials
- Create an Assignment by uploading a CSV file
- Add Questions using placeholders like
{column_name}
from your CSV - Share the URL with contributors
- Monitor Progress from your dashboard
- Export Results as an enriched CSV file
- Access the assignment via the shared URL
- Answer questions for each data entry
- Submit responses (anonymous or authenticated)
- Track your progress as you complete entries
Your CSV file should:
- Have a header row with column names
- Use simple, descriptive column names (these become placeholders)
- Be encoded in UTF-8 (preferred) or common encodings
Example:
city,state,population
Boston,MA,675647
New York,NY,8336817
Los Angeles,CA,3898747
Use placeholders in your questions:
- "Who is the mayor of {city}, {state}?"
- "Is the population of {city} greater than 1 million? (True/False)"
- "What category best describes {city}? (Multiple Choice)"
assignments/
├── assignments/ # Django project settings
├── core/ # Main application
│ ├── models.py # Database models
│ ├── views.py # View logic
│ ├── forms.py # Form definitions
│ ├── templates/ # HTML templates
│ └── utils.py # Helper functions
├── media/ # User uploads
├── static/ # Static files
└── templates/ # Base templates
python manage.py test
- Assignment: Main assignment with CSV file
- CSVEntry: Individual rows from CSV
- Question: Question templates with placeholders
- Response: User answers to questions
- EmbedWhitelist: Approved domains for embedding
- Set
DEBUG=False
in production - Configure proper
ALLOWED_HOSTS
- Use PostgreSQL for production
- Set up static file serving (WhiteNoise included)
- Configure media file storage (S3 optional)
- Use environment variables for secrets
SECRET_KEY
: Django secret keyDEBUG
: Debug mode (True/False)DATABASE_URL
: PostgreSQL connection stringAWS_ACCESS_KEY_ID
: (Optional) For S3 storageAWS_SECRET_ACCESS_KEY
: (Optional) For S3 storageAWS_STORAGE_BUCKET_NAME
: (Optional) S3 bucket name
This project was built with AI assistance and is optimized for development with Claude Code. See CLAUDE.md
for AI-specific development guidelines.
[Add your license here]
For issues and feature requests, please use the GitHub issue tracker.