A Flask-based web application for hosting a virtual research symposium showcasing student research projects in Human-Computer Interaction. This application provides an admin interface for managing research projects and a public gallery for viewing research presentations.
- Landing Page: Attractive homepage introducing the symposium
- Research Gallery: Grid view of all research groups and their papers
- Project Details: Individual project pages showing student-paper associations
- Media Access: Preview and download combined slide decks and posters (PDF)
- Similar Projects: Discover related research based on tags
- Responsive Design: Modern, mobile-friendly interface
- Dashboard: Overview of all research projects with statistics
- CSV Upload: Bulk import of research project data
- Project Management: Add, edit, and delete research projects
- Media Upload: Upload combined slide decks and posters (PDF)
- Tags Management: Categorize projects for better discovery
- User Authentication: Secure admin login system
- Backend: Flask (Python web framework)
- Database: SQLAlchemy with SQLite
- Frontend: Bootstrap 5 + Font Awesome icons
- Authentication: Flask-Login
- File Handling: Werkzeug file uploads
- Data Processing: Pandas for CSV handling
- Python 3.7 or higher
- pip (Python package installer)
# If using git
git clone <repository-url>
cd gallery
# Or download and extract the ZIP filepip install -r requirements.txtflask initThis command will:
- Delete existing database (if it exists) for a fresh start
- Create the database and tables
- Create admin user "bob" with password "bobpass"
- Insert sample research projects
flask runThe application will start on http://localhost:5000
- Username:
bob - Password:
bobpass
Important: Change these credentials in production!
- Start the application
- Login with admin credentials
- Navigate to the admin dashboard
- Prepare a CSV file with the required columns (see sample below)
- Go to "Upload CSV" in the admin menu
- Select your CSV file and upload
- Review the imported projects
- From the admin dashboard, click the edit button for any project
- Update project information
- Upload poster PDFs and video files
- Save changes
- Combined Slide Decks: PDF with both students' presentations combined
- Combined Posters: PDF with both students' posters combined
- Video Presentations: YouTube or other video URLs
- Tags: Comma-separated tags for categorizing and finding similar projects
- Files are automatically organized in the uploads directory
- Visit the homepage to learn about the symposium
- Click "Explore Research Gallery" to view all projects
- Click on any project to see detailed information
- Preview and download combined slide decks (both students' presentations in one PDF)
- Preview and download combined posters (both students' posters in one PDF)
- Watch video presentations
- See which paper each student worked on
- Discover similar projects based on tags
- Browse projects by research focus areas
- Each research group consists of 2 students working together
- Each group produces 2 research papers (one per student)
- Students are clearly associated with their specific papers
- Groups are identified by their group name (e.g., "Team Alpha", "Team Beta")
- Combined Slide Decks: Single PDF containing both students' presentation slides
- Combined Posters: Single PDF containing both students' research posters
- Video Presentations: Optional video URLs for additional content
- Projects can be tagged with relevant keywords
- Tags enable discovery of similar research projects
- Examples: "mobile", "ui design", "accessibility", "virtual reality", "education"
group_name: Research group namemember1_name: First team membermember2_name: Second team memberpaper1_title: First paper titlepaper2_title: Second paper title
member1_paper: Which paper member1 worked on (defaults to paper1_title if not specified)member2_paper: Which paper member2 worked on (defaults to paper2_title if not specified)presentation_video_url: URL to presentation videotags: Comma-separated tags for categorizing and finding similar projects
group_name,member1_name,member2_name,paper1_title,paper2_title,member1_paper,member2_paper,presentation_video_url,tags
"Team Alpha","Member 1","Member 2","Paper 1 Title","Paper 2 Title","Paper 1 Title","Paper 2 Title","https://youtube.com/...","mobile, ui design, accessibility"The system includes sample research projects that demonstrate the structure:
-
Team Alpha: Mobile UI Design research
- Papers: "Mobile UI Design Patterns" and "User Experience Optimization"
- Tags: mobile, ui design, user experience, interface
-
Team Beta: Web Accessibility research
- Papers: "Web Accessibility Implementation" and "Inclusive Design Principles"
- Tags: accessibility, web design, inclusive design, ui design
-
Team Gamma: Virtual Reality in Education research
- Papers: "VR in Educational Contexts" and "Immersive Learning Environments"
- Tags: virtual reality, education, immersive learning, technology
Each sample project includes student-paper associations, combined media files, and relevant tags for discovery.
gallery/
├── app.py # Main Flask application
├── requirements.txt # Python dependencies
├── uploads/ # File uploads (auto-created)
│ ├── posters/ # Combined poster PDFs
│ ├── presentations/ # Combined slide deck PDFs
│ └── group_files/ # Additional group files
├── instance/ # Database files (auto-created)
├── README.md # This file
├── templates/ # HTML templates
│ ├── base.html # Base template with navigation
│ ├── index.html # Landing page
│ ├── gallery.html # Research gallery
│ ├── view_project.html # Individual project view
│ ├── login.html # Admin login
│ ├── admin_dashboard.html # Admin dashboard
│ ├── upload_csv.html # CSV upload form
│ └── edit_project.html # Project editing form
└── uploads/ # File uploads (created automatically)
├── posters/ # PDF posters
└── videos/ # Video presentations
- Modify CSS variables in
templates/base.html - Update Bootstrap classes for different layouts
- Customize Font Awesome icons
- Change database URI in
app.pyfor different databases - Modify models in the
ResearchProjectclass - Add new fields as needed
- Add new routes in
app.py - Create new templates in the
templates/directory - Extend admin functionality
- Change default admin credentials
- Update
SECRET_KEYin production - Implement proper user authentication for production
- Add rate limiting for file uploads
- Validate file types and sizes
flask initwill delete any existing database - use with caution in production- Media files are stored in the
uploads/directory - Combined PDFs should contain both students' work in a single file
- Tags are comma-separated and used for finding similar projects
- Use a production WSGI server (Gunicorn, uWSGI)
- Set up a reverse proxy (Nginx, Apache)
- Use environment variables for configuration
- Implement proper logging
- Set up database backups
- Use HTTPS with SSL certificates
The application uses a .flaskenv file for configuration. You can also create a .env file for additional customization:
# Copy the example file
cp env_example.txt .env
# Edit .env with your settings
nano .envKey environment variables:
FLASK_APP: Flask application entry pointSECRET_KEY: Secret key for sessions and securityDATABASE_URL: Database connection stringADMIN_USERNAME: Admin username (default: bob)ADMIN_PASSWORD: Admin password (default: bobpass)
For production:
export FLASK_ENV=production
export SECRET_KEY=your-secure-secret-key
export DATABASE_URL=your-database-url
export ADMIN_USERNAME=your-admin-username
export ADMIN_PASSWORD=your-secure-password- Ensure the application has write permissions
- Check if the database file is accessible
- Verify SQLite is working properly
- Check file size limits (default: 16MB)
- Verify file formats are supported
- Ensure upload directories have proper permissions
- Verify all template files are in the
templates/directory - Check for syntax errors in Jinja2 templates
- Ensure template inheritance is correct
- Check the console output for error messages
- Verify all dependencies are installed
- Ensure file permissions are correct
- Check the Flask debug output
To contribute to this project:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is created for educational purposes as part of COMP 3603 Human-Computer Interaction course.
For technical support or questions about this application, please contact your course instructor or refer to the course materials.
Note: This application is designed for educational use and should be properly secured before use in production environments.