A Django-based portfolio website showcasing the sculpture, jewelry, puzzles, and chairs of artist Charles O. Perry. This site has been modernized to Django 5.x with a file-based data architecture.
- Sculpture Gallery: Browse sculptures by style (ribbed, planar, topological, solid) or material
- Jewelry Collection: View pendants, earrings, pins, and other jewelry pieces
- Puzzle Showcase: Interactive puzzles and chess sets
- Chair Designs: Industrial design furniture pieces
- Contact Forms: Contact and newsletter subscription functionality
- Tour & Slideshow: Interactive map tour and slideshow presentations
- Framework: Django 5.x
- Data Storage: File-based CSV data (no database required)
- Authentication: None (public portfolio site)
- Email: Django SMTP integration for contact forms
- Python 3.8+
- pip
- Clone the repository:
git clone <repository-url>
cd charlesperrycom
- Install dependencies:
pip install django
- Set up environment variables (optional):
cp .env.example .env
# Edit .env with your values
- Run the development server:
python manage.py runserver
- Visit the site:
- Main site: http://localhost:8000/
Create a .env
file or set environment variables:
# Required for production
DJANGO_SECRET_KEY=your-secret-key-here
DEBUG=false
# Email configuration (for contact forms)
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-password
DEFAULT_FROM_EMAIL=noreply@charlesperry.com
See EMAIL_SETUP.md for detailed email configuration instructions.
The site uses CSV files for data storage:
media/sculpture/art.csv
- Sculpture databasemedia/jewelry/jewelry.csv
- Jewelry collectionmedia/puzzles/puzzles.csv
- Puzzle designs
To add new sculptures, jewelry, or puzzles:
- Add a new row to the appropriate CSV file
- Add images to the corresponding media directory
- The changes will appear immediately (no database migration needed)
/
- Homepage/sculpture/
- Main sculpture gallery/sculpture/style/
- Browse by style/sculpture/material/
- Browse by material/sculpture/slideshow/
- Slideshow presentation/sculpture/tour/
- Interactive map tour/jewelry/
- Jewelry collection/puzzles/
- Puzzle designs/chairs/
- Chair furniture/bio/
- About the artist/bio/contact/
- Contact form
# Start development server
python manage.py runserver
# View emails in console (no SMTP needed)
# Contact forms will print to terminal
The site uses CSV files instead of a traditional database:
- Benefits: No database setup, easy data management, version controllable
- Data Loading: CSV files are read on each request
- Performance: Suitable for small datasets (hundreds of items)
- Legacy Models: Django model files (
models.py
) are preserved but not used. They could be reactivated for future database integration if needed.
- New Data Types: Add CSV file and create corresponding item class
- New Views: Follow existing patterns in app views.py files
- Templates: Extend base templates for consistent styling
- Generate new
DJANGO_SECRET_KEY
- Set
DEBUG=false
- Configure email settings
- Set up web server (nginx/Apache) for static files
- Configure HTTPS
- Set proper file permissions
export DJANGO_SECRET_KEY="your-generated-secret-key"
export DEBUG=false
export EMAIL_HOST_USER="production-email@domain.com"
export EMAIL_HOST_PASSWORD="app-specific-password"
export DEFAULT_FROM_EMAIL="noreply@charlesperry.com"
This site was migrated from Google App Engine to modern Django:
- Original: GAE Python 2.7 with webapp2 framework
- Converted: Django 5.x with Python 3.8+
- Database: Migrated from GAE Datastore to CSV files
- Authentication: Removed (was admin-only, now public)
- Email: Converted from GAE Mail API to Django SMTP
- Secret key moved to environment variables
- Debug mode configurable
- No user authentication (reduced attack surface)
- File-based data (no SQL injection risk)
- Minimal dependencies
- Proper email configuration
- Data Loading: CSV files loaded on each request
- Caching: None implemented (suitable for low-traffic portfolio site)
- Static Files: Served by Django in development, should use web server in production
- Modern browsers (Chrome, Firefox, Safari, Edge)
- Mobile responsive design
© 2000-2025 Charles O. Perry. All rights reserved.
For technical issues or questions about the artist's work, use the contact form at /bio/contact/
.