A Comprehensive Pokémon Management System
Presented by Team PokeSense
PokeSense is a comprehensive Pokémon management application designed for Professor Oak's Research Lab. The system allows researchers to search, collect, and analyze Pokémon data through an intuitive interface with direct integration to the PokeAPI.
Our application demonstrates a clean separation between GUI, business logic, and data layers while providing a rich user experience for Pokémon enthusiasts and researchers alike.
Team PokeSense logo
Professor Oak's Pokémon Research Lab faces significant challenges in their daily operations:
Professor Oak explaining the challenges to team members
A comprehensive Pokémon management system that:
Since implementing PokeSense, Professor Oak's lab has reported:
Reduction in time spent looking up Pokémon information
Elimination of lost research notes
Increase in collaborative research projects
Adoption rate among researchers
Responsibility: Architecture, integration, and project oversight
Strengths: Leadership, determination, strategic planning
Signature Tool: Git & Project Management
Responsibility: Business logic and PokeAPI integration
Strengths: Problem-solving, API design, data modeling
Signature Tool: Python Core & API Integration
Responsibility: UI design and Streamlit implementation
Strengths: UX/UI design, frontend development, user empathy
Signature Tool: Streamlit & Data Visualization
Responsibility: Data layer and testing
Strengths: Quality control, persistence, attention to detail
Signature Tool: Testing & Storage Implementation
PokeSense follows a clean separation of concerns with three distinct layers:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ GUI │ ↔ │ Logic │ ↔ │ Data │ │ (Streamlit)│ │ (Core) │ │ (Storage) │ └─────────────┘ └─────────────┘ └─────────────┘ Brock Misty Serena (Frontend) (Business Logic) (Data Layer) Ash (Project Lead & Integration)
tool-pokeapi/ ├── core/ # Core functionality │ ├── models.py # Data models │ ├── storage.py # Storage implementation │ ├── operations.py # Collection operations │ └── pokeapi_service.py # API integration ├── interfaces/ │ └── streamlit_app/ # Streamlit interface ├── examples/ # Example scripts ├── tests/ # Unit tests └── docs/ # Documentation
Our team bonding with a dragon-type mascot during development sprints
We implemented a round-robin approach to ensure all team members gained experience across the full stack:
Week | Ash | Misty | Brock | Serena |
---|---|---|---|---|
1 | Integration | API | UI | Data |
2 | Data | Integration | API | UI |
3 | UI | Data | Integration | API |
4 | API | UI | Data | Integration |
Goal: Establish core architecture and basic API integration
Key Deliverables:
Primary Contributor: Ash & Misty
Goal: Implement storage and collection operations
Key Deliverables:
Primary Contributor: Serena & Ash
Goal: Create Streamlit interface and collection management
Key Deliverables:
Primary Contributor: Brock & Misty
Goal: Polish UI, complete documentation, and add final features
Key Deliverables:
Primary Contributor: All team members
Seamless integration with the PokeAPI to retrieve comprehensive Pokemon data:
# Search for Pokémon results = PokeApiService.search_pokemon("pikachu") # Get Pokémon details details = PokeApiService.get_pokemon_details("pikachu") # Create Pokémon object pokemon = PokeApiService.create_pokemon_from_api_data(details)
Implemented by: Misty
Flexible storage system with JSON implementation:
# Initialize storage storage = JsonStorage("pokemon_collection.json") # Create collection collection = PokemonCollection(storage) # Add, retrieve, update, and delete operations collection.add_pokemon(pokemon) collection.get_pokemon(pokemon_id) collection.update_pokemon(pokemon) collection.delete_pokemon(pokemon_id)
Implemented by: Serena
Intuitive Streamlit interface with rich visualization:
Implemented by: Brock
Comprehensive data model for Pokemon with validation:
@dataclass class Pokemon: name: str pokemon_id: int types: List[str] sprites: Dict[str, str] height: int weight: int stats: List[Dict[str, any]] abilities: List[str] moves: List[str] favorite: bool = False notes: str = "" id: str = field(default_factory=lambda: str(uuid4())) date_added: datetime = field(default_factory=datetime.now)
Implemented by: Ash
We implemented extensive testing to ensure code quality and reliability:
test_models.py
: Pokemon data model validationtest_storage.py
: Storage operationstest_operations.py
: Collection managementtest_pokeapi_service.py
: API integrationOur test suite maintains high coverage across components:
Led by Serena, our QA process includes:
Our live demo showcases:
To run PokeSense on your own machine:
# Clone the repository git clone https://github.com/CTS285_FA22/tool-pokeapi.git # Install dependencies pip install -r requirements.txt # Run the Streamlit web interface cd interfaces/streamlit_app streamlit run pokeapi_app.py # Or try the MVP console demo cd examples python pokemvp.py
Planned features for future releases:
Any questions?
Ash - Project Lead
Misty - Technical Architect
Brock - Frontend Developer
Serena - Quality Assurance
Charizard - Team Mascot
github.com/CTS285_FA22/tool-pokeapi